node-autotask 0.39.0 → 0.39.1

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 (39) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/MCP_TOOL_MANIFEST.md +4 -4
  3. package/N8N_MCP_MANIFEST.json +2 -2
  4. package/N8N_MCP_MANIFEST.md +3 -3
  5. package/capabilities.json +144 -144
  6. package/dist/capabilities.cjs +2 -2
  7. package/dist/capabilities.js +1 -1
  8. package/dist/{chunk-KSNK6UEW.cjs → chunk-73QNAEAF.cjs} +143 -143
  9. package/dist/{chunk-OKFTECIE.js → chunk-CQXB7KAO.js} +2 -2
  10. package/dist/{chunk-2KQS3RHQ.js → chunk-GDSCYY2G.js} +143 -143
  11. package/dist/{chunk-6ROB5KXB.cjs → chunk-GIVYTQ6R.cjs} +285 -285
  12. package/dist/{chunk-45PLS73K.cjs → chunk-LB34VFQY.cjs} +132 -99
  13. package/dist/{chunk-LD5UPSDB.js → chunk-LDTJNLX7.js} +2 -2
  14. package/dist/{chunk-FV5PJLIZ.js → chunk-LN3HQQBR.js} +48 -15
  15. package/dist/{chunk-RAZEXOLC.cjs → chunk-VR6RYXTD.cjs} +143 -143
  16. package/dist/{index-Bmoiwhx2.d.ts → index-C-Oqef4y.d.cts} +7169 -51
  17. package/dist/{index-BVOOHPvr.d.cts → index-C-Oqef4y.d.ts} +7169 -51
  18. package/dist/index.cjs +22 -22
  19. package/dist/index.d.cts +2 -4
  20. package/dist/index.d.ts +2 -4
  21. package/dist/index.js +4 -4
  22. package/dist/operations/index.cjs +179 -177
  23. package/dist/operations/index.d.cts +3 -221
  24. package/dist/operations/index.d.ts +3 -221
  25. package/dist/operations/index.js +4 -2
  26. package/dist/pool.cjs +9 -9
  27. package/dist/pool.d.cts +1 -2
  28. package/dist/pool.d.ts +1 -2
  29. package/dist/pool.js +4 -4
  30. package/dist/resources/index.cjs +4 -4
  31. package/dist/resources/index.d.cts +1 -2
  32. package/dist/resources/index.d.ts +1 -2
  33. package/dist/resources/index.js +3 -3
  34. package/dist/types/index.d.cts +1 -1
  35. package/dist/types/index.d.ts +1 -1
  36. package/docs/API.md +37 -7
  37. package/package.json +1 -1
  38. package/dist/index-BQVStxwi.d.cts +0 -6893
  39. package/dist/index-BQVStxwi.d.ts +0 -6893
package/capabilities.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
- "generatedAt": "2026-10-29T10:49:12.432Z",
2
+ "generatedAt": "2026-10-29T20:28:49.330Z",
3
3
  "groups": {
4
4
  "B": {
5
5
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
6
- "builtAt": "2026-10-29T10:49:12.431Z",
6
+ "builtAt": "2026-10-29T20:28:49.329Z",
7
7
  "records": [
8
8
  {
9
9
  "id": "appointments.count",
@@ -618,7 +618,7 @@
618
618
  "params": {
619
619
  "type": "object",
620
620
  "required": false,
621
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
621
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
622
622
  "properties": [
623
623
  {
624
624
  "name": "filter",
@@ -1470,7 +1470,7 @@
1470
1470
  "params": {
1471
1471
  "type": "object",
1472
1472
  "required": false,
1473
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
1473
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
1474
1474
  "properties": [
1475
1475
  {
1476
1476
  "name": "filter",
@@ -2109,7 +2109,7 @@
2109
2109
  "params": {
2110
2110
  "type": "object",
2111
2111
  "required": false,
2112
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
2112
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
2113
2113
  "properties": [
2114
2114
  {
2115
2115
  "name": "filter",
@@ -3767,7 +3767,7 @@
3767
3767
  "params": {
3768
3768
  "type": "object",
3769
3769
  "required": false,
3770
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
3770
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
3771
3771
  "properties": [
3772
3772
  {
3773
3773
  "name": "filter",
@@ -4984,7 +4984,7 @@
4984
4984
  "params": {
4985
4985
  "type": "object",
4986
4986
  "required": false,
4987
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
4987
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
4988
4988
  "properties": [
4989
4989
  {
4990
4990
  "name": "filter",
@@ -5822,7 +5822,7 @@
5822
5822
  "params": {
5823
5823
  "type": "object",
5824
5824
  "required": false,
5825
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
5825
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
5826
5826
  "properties": [
5827
5827
  {
5828
5828
  "name": "filter",
@@ -6884,7 +6884,7 @@
6884
6884
  "params": {
6885
6885
  "type": "object",
6886
6886
  "required": false,
6887
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
6887
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
6888
6888
  "properties": [
6889
6889
  {
6890
6890
  "name": "filter",
@@ -7656,7 +7656,7 @@
7656
7656
  "params": {
7657
7657
  "type": "object",
7658
7658
  "required": false,
7659
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
7659
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
7660
7660
  "properties": [
7661
7661
  {
7662
7662
  "name": "filter",
@@ -8528,7 +8528,7 @@
8528
8528
  "params": {
8529
8529
  "type": "object",
8530
8530
  "required": false,
8531
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
8531
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
8532
8532
  "properties": [
8533
8533
  {
8534
8534
  "name": "filter",
@@ -9569,7 +9569,7 @@
9569
9569
  "params": {
9570
9570
  "type": "object",
9571
9571
  "required": false,
9572
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
9572
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
9573
9573
  "properties": [
9574
9574
  {
9575
9575
  "name": "filter",
@@ -10497,7 +10497,7 @@
10497
10497
  "params": {
10498
10498
  "type": "object",
10499
10499
  "required": false,
10500
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
10500
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
10501
10501
  "properties": [
10502
10502
  {
10503
10503
  "name": "filter",
@@ -11529,7 +11529,7 @@
11529
11529
  "params": {
11530
11530
  "type": "object",
11531
11531
  "required": false,
11532
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
11532
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
11533
11533
  "properties": [
11534
11534
  {
11535
11535
  "name": "filter",
@@ -12360,7 +12360,7 @@
12360
12360
  "params": {
12361
12361
  "type": "object",
12362
12362
  "required": false,
12363
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
12363
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
12364
12364
  "properties": [
12365
12365
  {
12366
12366
  "name": "filter",
@@ -13397,7 +13397,7 @@
13397
13397
  "params": {
13398
13398
  "type": "object",
13399
13399
  "required": false,
13400
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
13400
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
13401
13401
  "properties": [
13402
13402
  {
13403
13403
  "name": "filter",
@@ -14222,7 +14222,7 @@
14222
14222
  "params": {
14223
14223
  "type": "object",
14224
14224
  "required": false,
14225
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
14225
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
14226
14226
  "properties": [
14227
14227
  {
14228
14228
  "name": "filter",
@@ -15060,7 +15060,7 @@
15060
15060
  "params": {
15061
15061
  "type": "object",
15062
15062
  "required": false,
15063
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
15063
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
15064
15064
  "properties": [
15065
15065
  {
15066
15066
  "name": "filter",
@@ -15942,7 +15942,7 @@
15942
15942
  "params": {
15943
15943
  "type": "object",
15944
15944
  "required": false,
15945
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
15945
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
15946
15946
  "properties": [
15947
15947
  {
15948
15948
  "name": "filter",
@@ -16824,7 +16824,7 @@
16824
16824
  "params": {
16825
16825
  "type": "object",
16826
16826
  "required": false,
16827
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
16827
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
16828
16828
  "properties": [
16829
16829
  {
16830
16830
  "name": "filter",
@@ -17696,7 +17696,7 @@
17696
17696
  "params": {
17697
17697
  "type": "object",
17698
17698
  "required": false,
17699
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
17699
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
17700
17700
  "properties": [
17701
17701
  {
17702
17702
  "name": "filter",
@@ -18661,7 +18661,7 @@
18661
18661
  "params": {
18662
18662
  "type": "object",
18663
18663
  "required": false,
18664
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
18664
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
18665
18665
  "properties": [
18666
18666
  {
18667
18667
  "name": "filter",
@@ -19876,7 +19876,7 @@
19876
19876
  "params": {
19877
19877
  "type": "object",
19878
19878
  "required": false,
19879
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
19879
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
19880
19880
  "properties": [
19881
19881
  {
19882
19882
  "name": "filter",
@@ -20900,7 +20900,7 @@
20900
20900
  "params": {
20901
20901
  "type": "object",
20902
20902
  "required": false,
20903
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
20903
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
20904
20904
  "properties": [
20905
20905
  {
20906
20906
  "name": "filter",
@@ -21955,7 +21955,7 @@
21955
21955
  "params": {
21956
21956
  "type": "object",
21957
21957
  "required": false,
21958
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
21958
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
21959
21959
  "properties": [
21960
21960
  {
21961
21961
  "name": "filter",
@@ -23173,7 +23173,7 @@
23173
23173
  "params": {
23174
23174
  "type": "object",
23175
23175
  "required": false,
23176
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
23176
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
23177
23177
  "properties": [
23178
23178
  {
23179
23179
  "name": "filter",
@@ -24224,7 +24224,7 @@
24224
24224
  "params": {
24225
24225
  "type": "object",
24226
24226
  "required": false,
24227
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
24227
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
24228
24228
  "properties": [
24229
24229
  {
24230
24230
  "name": "filter",
@@ -25161,7 +25161,7 @@
25161
25161
  "params": {
25162
25162
  "type": "object",
25163
25163
  "required": false,
25164
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
25164
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
25165
25165
  "properties": [
25166
25166
  {
25167
25167
  "name": "filter",
@@ -26195,7 +26195,7 @@
26195
26195
  "params": {
26196
26196
  "type": "object",
26197
26197
  "required": false,
26198
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
26198
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
26199
26199
  "properties": [
26200
26200
  {
26201
26201
  "name": "filter",
@@ -26845,7 +26845,7 @@
26845
26845
  "params": {
26846
26846
  "type": "object",
26847
26847
  "required": false,
26848
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
26848
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
26849
26849
  "properties": [
26850
26850
  {
26851
26851
  "name": "filter",
@@ -27521,7 +27521,7 @@
27521
27521
  "params": {
27522
27522
  "type": "object",
27523
27523
  "required": false,
27524
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
27524
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
27525
27525
  "properties": [
27526
27526
  {
27527
27527
  "name": "filter",
@@ -28468,7 +28468,7 @@
28468
28468
  "params": {
28469
28469
  "type": "object",
28470
28470
  "required": false,
28471
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
28471
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
28472
28472
  "properties": [
28473
28473
  {
28474
28474
  "name": "filter",
@@ -29219,7 +29219,7 @@
29219
29219
  "params": {
29220
29220
  "type": "object",
29221
29221
  "required": false,
29222
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
29222
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
29223
29223
  "properties": [
29224
29224
  {
29225
29225
  "name": "filter",
@@ -29978,7 +29978,7 @@
29978
29978
  "params": {
29979
29979
  "type": "object",
29980
29980
  "required": false,
29981
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
29981
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
29982
29982
  "properties": [
29983
29983
  {
29984
29984
  "name": "filter",
@@ -30723,7 +30723,7 @@
30723
30723
  "params": {
30724
30724
  "type": "object",
30725
30725
  "required": false,
30726
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
30726
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
30727
30727
  "properties": [
30728
30728
  {
30729
30729
  "name": "filter",
@@ -31718,7 +31718,7 @@
31718
31718
  "params": {
31719
31719
  "type": "object",
31720
31720
  "required": false,
31721
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
31721
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
31722
31722
  "properties": [
31723
31723
  {
31724
31724
  "name": "filter",
@@ -32692,7 +32692,7 @@
32692
32692
  "params": {
32693
32693
  "type": "object",
32694
32694
  "required": false,
32695
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
32695
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
32696
32696
  "properties": [
32697
32697
  {
32698
32698
  "name": "filter",
@@ -33540,7 +33540,7 @@
33540
33540
  "params": {
33541
33541
  "type": "object",
33542
33542
  "required": false,
33543
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
33543
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
33544
33544
  "properties": [
33545
33545
  {
33546
33546
  "name": "filter",
@@ -34299,7 +34299,7 @@
34299
34299
  "params": {
34300
34300
  "type": "object",
34301
34301
  "required": false,
34302
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
34302
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
34303
34303
  "properties": [
34304
34304
  {
34305
34305
  "name": "filter",
@@ -35172,7 +35172,7 @@
35172
35172
  "params": {
35173
35173
  "type": "object",
35174
35174
  "required": false,
35175
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
35175
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
35176
35176
  "properties": [
35177
35177
  {
35178
35178
  "name": "filter",
@@ -35951,7 +35951,7 @@
35951
35951
  "params": {
35952
35952
  "type": "object",
35953
35953
  "required": false,
35954
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
35954
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
35955
35955
  "properties": [
35956
35956
  {
35957
35957
  "name": "filter",
@@ -36809,7 +36809,7 @@
36809
36809
  "params": {
36810
36810
  "type": "object",
36811
36811
  "required": false,
36812
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
36812
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
36813
36813
  "properties": [
36814
36814
  {
36815
36815
  "name": "filter",
@@ -37557,7 +37557,7 @@
37557
37557
  "params": {
37558
37558
  "type": "object",
37559
37559
  "required": false,
37560
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
37560
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
37561
37561
  "properties": [
37562
37562
  {
37563
37563
  "name": "filter",
@@ -38223,7 +38223,7 @@
38223
38223
  "params": {
38224
38224
  "type": "object",
38225
38225
  "required": false,
38226
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
38226
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
38227
38227
  "properties": [
38228
38228
  {
38229
38229
  "name": "filter",
@@ -39465,7 +39465,7 @@
39465
39465
  "params": {
39466
39466
  "type": "object",
39467
39467
  "required": false,
39468
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
39468
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
39469
39469
  "properties": [
39470
39470
  {
39471
39471
  "name": "filter",
@@ -40781,7 +40781,7 @@
40781
40781
  "params": {
40782
40782
  "type": "object",
40783
40783
  "required": false,
40784
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
40784
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
40785
40785
  "properties": [
40786
40786
  {
40787
40787
  "name": "filter",
@@ -42010,7 +42010,7 @@
42010
42010
  "params": {
42011
42011
  "type": "object",
42012
42012
  "required": false,
42013
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
42013
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
42014
42014
  "properties": [
42015
42015
  {
42016
42016
  "name": "filter",
@@ -43012,7 +43012,7 @@
43012
43012
  "params": {
43013
43013
  "type": "object",
43014
43014
  "required": false,
43015
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
43015
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
43016
43016
  "properties": [
43017
43017
  {
43018
43018
  "name": "filter",
@@ -43889,7 +43889,7 @@
43889
43889
  "params": {
43890
43890
  "type": "object",
43891
43891
  "required": false,
43892
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
43892
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
43893
43893
  "properties": [
43894
43894
  {
43895
43895
  "name": "filter",
@@ -44714,7 +44714,7 @@
44714
44714
  "params": {
44715
44715
  "type": "object",
44716
44716
  "required": false,
44717
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
44717
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
44718
44718
  "properties": [
44719
44719
  {
44720
44720
  "name": "filter",
@@ -45539,7 +45539,7 @@
45539
45539
  "params": {
45540
45540
  "type": "object",
45541
45541
  "required": false,
45542
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
45542
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
45543
45543
  "properties": [
45544
45544
  {
45545
45545
  "name": "filter",
@@ -46364,7 +46364,7 @@
46364
46364
  "params": {
46365
46365
  "type": "object",
46366
46366
  "required": false,
46367
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
46367
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
46368
46368
  "properties": [
46369
46369
  {
46370
46370
  "name": "filter",
@@ -47195,7 +47195,7 @@
47195
47195
  "params": {
47196
47196
  "type": "object",
47197
47197
  "required": false,
47198
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
47198
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
47199
47199
  "properties": [
47200
47200
  {
47201
47201
  "name": "filter",
@@ -47960,7 +47960,7 @@
47960
47960
  "params": {
47961
47961
  "type": "object",
47962
47962
  "required": false,
47963
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
47963
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
47964
47964
  "properties": [
47965
47965
  {
47966
47966
  "name": "filter",
@@ -48858,7 +48858,7 @@
48858
48858
  "params": {
48859
48859
  "type": "object",
48860
48860
  "required": false,
48861
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
48861
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
48862
48862
  "properties": [
48863
48863
  {
48864
48864
  "name": "filter",
@@ -49833,7 +49833,7 @@
49833
49833
  "params": {
49834
49834
  "type": "object",
49835
49835
  "required": false,
49836
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
49836
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
49837
49837
  "properties": [
49838
49838
  {
49839
49839
  "name": "filter",
@@ -50596,7 +50596,7 @@
50596
50596
  "params": {
50597
50597
  "type": "object",
50598
50598
  "required": false,
50599
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
50599
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
50600
50600
  "properties": [
50601
50601
  {
50602
50602
  "name": "filter",
@@ -51242,7 +51242,7 @@
51242
51242
  "params": {
51243
51243
  "type": "object",
51244
51244
  "required": false,
51245
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
51245
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
51246
51246
  "properties": [
51247
51247
  {
51248
51248
  "name": "filter",
@@ -51913,7 +51913,7 @@
51913
51913
  "params": {
51914
51914
  "type": "object",
51915
51915
  "required": false,
51916
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
51916
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
51917
51917
  "properties": [
51918
51918
  {
51919
51919
  "name": "filter",
@@ -52879,7 +52879,7 @@
52879
52879
  "params": {
52880
52880
  "type": "object",
52881
52881
  "required": false,
52882
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
52882
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
52883
52883
  "properties": [
52884
52884
  {
52885
52885
  "name": "filter",
@@ -53716,7 +53716,7 @@
53716
53716
  "params": {
53717
53717
  "type": "object",
53718
53718
  "required": false,
53719
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
53719
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
53720
53720
  "properties": [
53721
53721
  {
53722
53722
  "name": "filter",
@@ -54651,7 +54651,7 @@
54651
54651
  "params": {
54652
54652
  "type": "object",
54653
54653
  "required": false,
54654
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
54654
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
54655
54655
  "properties": [
54656
54656
  {
54657
54657
  "name": "filter",
@@ -55504,7 +55504,7 @@
55504
55504
  "params": {
55505
55505
  "type": "object",
55506
55506
  "required": false,
55507
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
55507
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
55508
55508
  "properties": [
55509
55509
  {
55510
55510
  "name": "filter",
@@ -56243,7 +56243,7 @@
56243
56243
  "params": {
56244
56244
  "type": "object",
56245
56245
  "required": false,
56246
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
56246
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
56247
56247
  "properties": [
56248
56248
  {
56249
56249
  "name": "filter",
@@ -57135,7 +57135,7 @@
57135
57135
  "params": {
57136
57136
  "type": "object",
57137
57137
  "required": false,
57138
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
57138
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
57139
57139
  "properties": [
57140
57140
  {
57141
57141
  "name": "filter",
@@ -57811,7 +57811,7 @@
57811
57811
  "params": {
57812
57812
  "type": "object",
57813
57813
  "required": false,
57814
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
57814
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
57815
57815
  "properties": [
57816
57816
  {
57817
57817
  "name": "filter",
@@ -58752,7 +58752,7 @@
58752
58752
  "params": {
58753
58753
  "type": "object",
58754
58754
  "required": false,
58755
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
58755
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
58756
58756
  "properties": [
58757
58757
  {
58758
58758
  "name": "filter",
@@ -59604,7 +59604,7 @@
59604
59604
  "params": {
59605
59605
  "type": "object",
59606
59606
  "required": false,
59607
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
59607
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
59608
59608
  "properties": [
59609
59609
  {
59610
59610
  "name": "filter",
@@ -64011,7 +64011,7 @@
64011
64011
  "params": {
64012
64012
  "type": "object",
64013
64013
  "required": false,
64014
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
64014
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
64015
64015
  "properties": [
64016
64016
  {
64017
64017
  "name": "filter",
@@ -65697,7 +65697,7 @@
65697
65697
  "params": {
65698
65698
  "type": "object",
65699
65699
  "required": false,
65700
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
65700
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
65701
65701
  "properties": [
65702
65702
  {
65703
65703
  "name": "filter",
@@ -66460,7 +66460,7 @@
66460
66460
  "params": {
66461
66461
  "type": "object",
66462
66462
  "required": false,
66463
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
66463
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
66464
66464
  "properties": [
66465
66465
  {
66466
66466
  "name": "filter",
@@ -67004,7 +67004,7 @@
67004
67004
  },
67005
67005
  "A": {
67006
67006
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
67007
- "builtAt": "2026-10-29T10:49:12.432Z",
67007
+ "builtAt": "2026-10-29T20:28:49.330Z",
67008
67008
  "records": [
67009
67009
  {
67010
67010
  "id": "companies.count",
@@ -68161,7 +68161,7 @@
68161
68161
  "params": {
68162
68162
  "type": "object",
68163
68163
  "required": false,
68164
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
68164
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
68165
68165
  "properties": [
68166
68166
  {
68167
68167
  "name": "filter",
@@ -70027,7 +70027,7 @@
70027
70027
  "params": {
70028
70028
  "type": "object",
70029
70029
  "required": false,
70030
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
70030
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
70031
70031
  "properties": [
70032
70032
  {
70033
70033
  "name": "filter",
@@ -70986,7 +70986,7 @@
70986
70986
  "params": {
70987
70987
  "type": "object",
70988
70988
  "required": false,
70989
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
70989
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
70990
70990
  "properties": [
70991
70991
  {
70992
70992
  "name": "filter",
@@ -71969,7 +71969,7 @@
71969
71969
  "params": {
71970
71970
  "type": "object",
71971
71971
  "required": false,
71972
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
71972
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
71973
71973
  "properties": [
71974
71974
  {
71975
71975
  "name": "filter",
@@ -72958,7 +72958,7 @@
72958
72958
  "params": {
72959
72959
  "type": "object",
72960
72960
  "required": false,
72961
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
72961
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
72962
72962
  "properties": [
72963
72963
  {
72964
72964
  "name": "filter",
@@ -73970,7 +73970,7 @@
73970
73970
  "params": {
73971
73971
  "type": "object",
73972
73972
  "required": false,
73973
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
73973
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
73974
73974
  "properties": [
73975
73975
  {
73976
73976
  "name": "filter",
@@ -75010,7 +75010,7 @@
75010
75010
  "params": {
75011
75011
  "type": "object",
75012
75012
  "required": false,
75013
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
75013
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
75014
75014
  "properties": [
75015
75015
  {
75016
75016
  "name": "filter",
@@ -75871,7 +75871,7 @@
75871
75871
  "params": {
75872
75872
  "type": "object",
75873
75873
  "required": false,
75874
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
75874
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
75875
75875
  "properties": [
75876
75876
  {
75877
75877
  "name": "filter",
@@ -76644,7 +76644,7 @@
76644
76644
  "params": {
76645
76645
  "type": "object",
76646
76646
  "required": false,
76647
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
76647
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
76648
76648
  "properties": [
76649
76649
  {
76650
76650
  "name": "filter",
@@ -77578,7 +77578,7 @@
77578
77578
  "params": {
77579
77579
  "type": "object",
77580
77580
  "required": false,
77581
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
77581
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
77582
77582
  "properties": [
77583
77583
  {
77584
77584
  "name": "filter",
@@ -78336,7 +78336,7 @@
78336
78336
  "params": {
78337
78337
  "type": "object",
78338
78338
  "required": false,
78339
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
78339
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
78340
78340
  "properties": [
78341
78341
  {
78342
78342
  "name": "filter",
@@ -79401,7 +79401,7 @@
79401
79401
  "params": {
79402
79402
  "type": "object",
79403
79403
  "required": false,
79404
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
79404
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
79405
79405
  "properties": [
79406
79406
  {
79407
79407
  "name": "filter",
@@ -81115,7 +81115,7 @@
81115
81115
  "params": {
81116
81116
  "type": "object",
81117
81117
  "required": false,
81118
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
81118
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
81119
81119
  "properties": [
81120
81120
  {
81121
81121
  "name": "filter",
@@ -82261,7 +82261,7 @@
82261
82261
  "params": {
82262
82262
  "type": "object",
82263
82263
  "required": false,
82264
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
82264
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
82265
82265
  "properties": [
82266
82266
  {
82267
82267
  "name": "filter",
@@ -83859,7 +83859,7 @@
83859
83859
  "params": {
83860
83860
  "type": "object",
83861
83861
  "required": false,
83862
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
83862
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
83863
83863
  "properties": [
83864
83864
  {
83865
83865
  "name": "filter",
@@ -85193,7 +85193,7 @@
85193
85193
  "params": {
85194
85194
  "type": "object",
85195
85195
  "required": false,
85196
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
85196
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
85197
85197
  "properties": [
85198
85198
  {
85199
85199
  "name": "filter",
@@ -86040,7 +86040,7 @@
86040
86040
  "params": {
86041
86041
  "type": "object",
86042
86042
  "required": false,
86043
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
86043
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
86044
86044
  "properties": [
86045
86045
  {
86046
86046
  "name": "filter",
@@ -86878,7 +86878,7 @@
86878
86878
  "params": {
86879
86879
  "type": "object",
86880
86880
  "required": false,
86881
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
86881
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
86882
86882
  "properties": [
86883
86883
  {
86884
86884
  "name": "filter",
@@ -87935,7 +87935,7 @@
87935
87935
  "params": {
87936
87936
  "type": "object",
87937
87937
  "required": false,
87938
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
87938
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
87939
87939
  "properties": [
87940
87940
  {
87941
87941
  "name": "filter",
@@ -88982,7 +88982,7 @@
88982
88982
  "params": {
88983
88983
  "type": "object",
88984
88984
  "required": false,
88985
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
88985
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
88986
88986
  "properties": [
88987
88987
  {
88988
88988
  "name": "filter",
@@ -89807,7 +89807,7 @@
89807
89807
  "params": {
89808
89808
  "type": "object",
89809
89809
  "required": false,
89810
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
89810
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
89811
89811
  "properties": [
89812
89812
  {
89813
89813
  "name": "filter",
@@ -90572,7 +90572,7 @@
90572
90572
  "params": {
90573
90573
  "type": "object",
90574
90574
  "required": false,
90575
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
90575
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
90576
90576
  "properties": [
90577
90577
  {
90578
90578
  "name": "filter",
@@ -91446,7 +91446,7 @@
91446
91446
  "params": {
91447
91447
  "type": "object",
91448
91448
  "required": false,
91449
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
91449
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
91450
91450
  "properties": [
91451
91451
  {
91452
91452
  "name": "filter",
@@ -92296,7 +92296,7 @@
92296
92296
  "params": {
92297
92297
  "type": "object",
92298
92298
  "required": false,
92299
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
92299
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
92300
92300
  "properties": [
92301
92301
  {
92302
92302
  "name": "filter",
@@ -93134,7 +93134,7 @@
93134
93134
  "params": {
93135
93135
  "type": "object",
93136
93136
  "required": false,
93137
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
93137
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
93138
93138
  "properties": [
93139
93139
  {
93140
93140
  "name": "filter",
@@ -93972,7 +93972,7 @@
93972
93972
  "params": {
93973
93973
  "type": "object",
93974
93974
  "required": false,
93975
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
93975
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
93976
93976
  "properties": [
93977
93977
  {
93978
93978
  "name": "filter",
@@ -95532,7 +95532,7 @@
95532
95532
  "params": {
95533
95533
  "type": "object",
95534
95534
  "required": false,
95535
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
95535
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
95536
95536
  "properties": [
95537
95537
  {
95538
95538
  "name": "filter",
@@ -96297,7 +96297,7 @@
96297
96297
  "params": {
96298
96298
  "type": "object",
96299
96299
  "required": false,
96300
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
96300
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
96301
96301
  "properties": [
96302
96302
  {
96303
96303
  "name": "filter",
@@ -97057,7 +97057,7 @@
97057
97057
  "params": {
97058
97058
  "type": "object",
97059
97059
  "required": false,
97060
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
97060
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
97061
97061
  "properties": [
97062
97062
  {
97063
97063
  "name": "filter",
@@ -97921,7 +97921,7 @@
97921
97921
  "params": {
97922
97922
  "type": "object",
97923
97923
  "required": false,
97924
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
97924
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
97925
97925
  "properties": [
97926
97926
  {
97927
97927
  "name": "filter",
@@ -98771,7 +98771,7 @@
98771
98771
  "params": {
98772
98772
  "type": "object",
98773
98773
  "required": false,
98774
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
98774
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
98775
98775
  "properties": [
98776
98776
  {
98777
98777
  "name": "filter",
@@ -100247,7 +100247,7 @@
100247
100247
  "params": {
100248
100248
  "type": "object",
100249
100249
  "required": false,
100250
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
100250
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
100251
100251
  "properties": [
100252
100252
  {
100253
100253
  "name": "filter",
@@ -102519,7 +102519,7 @@
102519
102519
  "params": {
102520
102520
  "type": "object",
102521
102521
  "required": false,
102522
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
102522
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
102523
102523
  "properties": [
102524
102524
  {
102525
102525
  "name": "filter",
@@ -103876,7 +103876,7 @@
103876
103876
  "params": {
103877
103877
  "type": "object",
103878
103878
  "required": false,
103879
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
103879
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
103880
103880
  "properties": [
103881
103881
  {
103882
103882
  "name": "filter",
@@ -104999,7 +104999,7 @@
104999
104999
  "params": {
105000
105000
  "type": "object",
105001
105001
  "required": false,
105002
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
105002
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
105003
105003
  "properties": [
105004
105004
  {
105005
105005
  "name": "filter",
@@ -105770,7 +105770,7 @@
105770
105770
  "params": {
105771
105771
  "type": "object",
105772
105772
  "required": false,
105773
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
105773
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
105774
105774
  "properties": [
105775
105775
  {
105776
105776
  "name": "filter",
@@ -106847,7 +106847,7 @@
106847
106847
  "params": {
106848
106848
  "type": "object",
106849
106849
  "required": false,
106850
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
106850
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
106851
106851
  "properties": [
106852
106852
  {
106853
106853
  "name": "filter",
@@ -107834,7 +107834,7 @@
107834
107834
  "params": {
107835
107835
  "type": "object",
107836
107836
  "required": false,
107837
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
107837
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
107838
107838
  "properties": [
107839
107839
  {
107840
107840
  "name": "filter",
@@ -108966,7 +108966,7 @@
108966
108966
  "params": {
108967
108967
  "type": "object",
108968
108968
  "required": false,
108969
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
108969
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
108970
108970
  "properties": [
108971
108971
  {
108972
108972
  "name": "filter",
@@ -110119,7 +110119,7 @@
110119
110119
  "params": {
110120
110120
  "type": "object",
110121
110121
  "required": false,
110122
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
110122
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
110123
110123
  "properties": [
110124
110124
  {
110125
110125
  "name": "filter",
@@ -111068,7 +111068,7 @@
111068
111068
  "params": {
111069
111069
  "type": "object",
111070
111070
  "required": false,
111071
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
111071
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
111072
111072
  "properties": [
111073
111073
  {
111074
111074
  "name": "filter",
@@ -111928,7 +111928,7 @@
111928
111928
  "params": {
111929
111929
  "type": "object",
111930
111930
  "required": false,
111931
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
111931
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
111932
111932
  "properties": [
111933
111933
  {
111934
111934
  "name": "filter",
@@ -113135,7 +113135,7 @@
113135
113135
  "params": {
113136
113136
  "type": "object",
113137
113137
  "required": false,
113138
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
113138
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
113139
113139
  "properties": [
113140
113140
  {
113141
113141
  "name": "filter",
@@ -114127,7 +114127,7 @@
114127
114127
  "params": {
114128
114128
  "type": "object",
114129
114129
  "required": false,
114130
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
114130
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
114131
114131
  "properties": [
114132
114132
  {
114133
114133
  "name": "filter",
@@ -115018,7 +115018,7 @@
115018
115018
  "params": {
115019
115019
  "type": "object",
115020
115020
  "required": false,
115021
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
115021
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
115022
115022
  "properties": [
115023
115023
  {
115024
115024
  "name": "filter",
@@ -116236,7 +116236,7 @@
116236
116236
  "params": {
116237
116237
  "type": "object",
116238
116238
  "required": false,
116239
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
116239
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
116240
116240
  "properties": [
116241
116241
  {
116242
116242
  "name": "filter",
@@ -117156,7 +117156,7 @@
117156
117156
  "params": {
117157
117157
  "type": "object",
117158
117158
  "required": false,
117159
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
117159
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
117160
117160
  "properties": [
117161
117161
  {
117162
117162
  "name": "filter",
@@ -118088,7 +118088,7 @@
118088
118088
  "params": {
118089
118089
  "type": "object",
118090
118090
  "required": false,
118091
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
118091
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
118092
118092
  "properties": [
118093
118093
  {
118094
118094
  "name": "filter",
@@ -118940,7 +118940,7 @@
118940
118940
  "params": {
118941
118941
  "type": "object",
118942
118942
  "required": false,
118943
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
118943
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
118944
118944
  "properties": [
118945
118945
  {
118946
118946
  "name": "filter",
@@ -120006,7 +120006,7 @@
120006
120006
  "params": {
120007
120007
  "type": "object",
120008
120008
  "required": false,
120009
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
120009
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
120010
120010
  "properties": [
120011
120011
  {
120012
120012
  "name": "filter",
@@ -121084,7 +121084,7 @@
121084
121084
  "params": {
121085
121085
  "type": "object",
121086
121086
  "required": false,
121087
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
121087
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
121088
121088
  "properties": [
121089
121089
  {
121090
121090
  "name": "filter",
@@ -122468,7 +122468,7 @@
122468
122468
  "params": {
122469
122469
  "type": "object",
122470
122470
  "required": false,
122471
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
122471
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
122472
122472
  "properties": [
122473
122473
  {
122474
122474
  "name": "filter",
@@ -123402,7 +123402,7 @@
123402
123402
  "params": {
123403
123403
  "type": "object",
123404
123404
  "required": false,
123405
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
123405
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
123406
123406
  "properties": [
123407
123407
  {
123408
123408
  "name": "filter",
@@ -124248,7 +124248,7 @@
124248
124248
  "params": {
124249
124249
  "type": "object",
124250
124250
  "required": false,
124251
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
124251
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
124252
124252
  "properties": [
124253
124253
  {
124254
124254
  "name": "filter",
@@ -126643,7 +126643,7 @@
126643
126643
  "params": {
126644
126644
  "type": "object",
126645
126645
  "required": false,
126646
- "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null/0 or unresolved value; a names summary appears only when the 20 uncached name-read cap left ids unlabelled; false = raw ids), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
126646
+ "description": "The query params object (CLOSED — unknown keys are refused pre-request with a typed error naming the key + the valid keys): { filter?: FilterCondition[], limit?: number (total cap, default 500, max 2500 — NOT a page size), latest?: number (1-2500; the N highest-id rows — the vendor has no sort; count-probe + id-threshold semantics, see docs/API.md §4; the same-process latest-walk count probes are briefly cached per client — a 30 s TTL, cleared on a write through this client (a probe in flight across the write is discarded by the cache's invalidation epoch — issue #139); the plain count op and aggregate stay fresh — issue #127; limit and latest may coexist only when limit >= latest), noteChars?: number (integer >= 1; opt-in per-field char cap on the untrusted-class free-text fields of the resource (notes/descriptions/UDF prose): each capped value = the first N chars + the explicit marker … [+N chars truncated] (N = chars removed), applied at result-build BEFORE the server-side untrusted wrapper; absent = the raw, untruncated result), fieldsPreset?: string (a closed includeFields preset name — v1: \"billing_join\" (billing_items): resolved to its field list pre-walk, the vendor column selection on the IncludeFields wire; mutually exclusive with an explicit includeFields; docs/API.md §11.23), includeFields?: string[], fieldCheck?: boolean (default true: every includeFields NAME and every filter condition FIELD NAME is checked pre-request against the live field set (the vendored spec when that read faults — the resource's plan-pinned live-only fields, metadata.liveOnlyFields, are exempt from the vendored refusal: the live entity carries them and the vendor model omits them (e.g. time_entries postedDate/postedOnTime) — a truly unknown name is still refused); a refusal costs zero QUERY wire — the query POST and the count probe that anchors latest are never issued, a COLD fieldCache performs one authority metadata GET first (zero on a warm one); the one udf:true condition per query is exempt (a tenant UDF name is absent from the vendored spec by definition); false disables both name checks, never the shape/grammar checks; the count verb's bag is name-checked the same way (issue #140) and carries the same fieldCheck opt-out (issue #145); a direct queryBounded/queryAll call is not checked (no bag contract there)), names?: boolean (default true — rows gain label siblings: picklist <field>Label (statusLabel), <fk>Name for companyID/contractID/ticketID/roleID/billingCodeID/*ResourceID (contractIDName, assignedResourceIDName) — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); a names summary appears only when something was left unlabelled (the 20 uncached name-read cap, an unresolved picklist value, or a failed field-catalog read: names.catalogError); false = raw ids, ~30% smaller on a full tickets row), via?: \"post\" | \"get\" (vendor GET has a 2048-char cap) }. Filter grammar: 13 operators (eq, noteq, gt, gte, lt, lte, beginsWith, endsWith, contains, exist, notExist, in, notIn; in/notIn: array or \"1,2,3\") + and/or grouping (no not-group); field names in vendor API casing (via operations.fieldCatalog); caps: 500 OR-conditions / 1 UDF / 8000 chars.",
126647
126647
  "properties": [
126648
126648
  {
126649
126649
  "name": "filter",
@@ -127744,7 +127744,7 @@
127744
127744
  },
127745
127745
  "operations": {
127746
127746
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
127747
- "builtAt": "2026-10-29T10:49:12.432Z",
127747
+ "builtAt": "2026-10-29T20:28:49.330Z",
127748
127748
  "records": [
127749
127749
  {
127750
127750
  "id": "operations.aggregate",
@@ -127771,7 +127771,7 @@
127771
127771
  "opts": {
127772
127772
  "type": "object",
127773
127773
  "required": false,
127774
- "description": "AggregateOptions — { groupBy?: string[] (vendor field names), sum?: string[] (numeric vendor fields), top?: number (default 25, clamped 1..100 — the group-row cap), limit?: number (total-record cap for the walk modes, default 2500 = the house BOUNDED_QUERY_MAX_LIMIT — the hard max), names?: boolean (default true — group keys gain label siblings, e.g. key.ticketIDName, key.statusLabel — null, never missing, when the field is keyed with a null/0 or unresolved value; false = raw ids) }. NEITHER groupBy nor sum = COUNT mode (one vendor /query/count call — no walk; a 0 on a plan-pinned blind surface is marked blind: true with the S12-C sentinel — never a silent absence; a FILTERED 0 on an unfiltered-blind surface is a true zero). The walk modes fold client-side: hasMore/totalScanned carry the truncation honesty (no silent partial sums) and a mid-walk RATE_LIMITED propagates (the partial fold is discarded).",
127774
+ "description": "AggregateOptions — { groupBy?: string[] (vendor field names), sum?: string[] (numeric vendor fields), top?: number (default 25, clamped 1..100 — the group-row cap), limit?: number (total-record cap for the walk modes, default 2500 = the house BOUNDED_QUERY_MAX_LIMIT — the hard max), names?: boolean (default true — group keys gain label siblings, e.g. key.ticketIDName, key.statusLabel — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); false = raw ids) }. NEITHER groupBy nor sum = COUNT mode (one vendor /query/count call — no walk; a 0 on a plan-pinned blind surface is marked blind: true with the S12-C sentinel — never a silent absence; a FILTERED 0 on an unfiltered-blind surface is a true zero). The walk modes fold client-side: hasMore/totalScanned carry the truncation honesty (no silent partial sums) and a mid-walk RATE_LIMITED propagates (the partial fold is discarded).",
127775
127775
  "properties": [
127776
127776
  {
127777
127777
  "name": "groupBy",
@@ -128017,7 +128017,7 @@
128017
128017
  "staleCheck": {
128018
128018
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
128019
128019
  "sourceFile": "src/operations/index.ts",
128020
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
128020
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
128021
128021
  }
128022
128022
  },
128023
128023
  {
@@ -128136,7 +128136,7 @@
128136
128136
  "staleCheck": {
128137
128137
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
128138
128138
  "sourceFile": "src/operations/index.ts",
128139
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
128139
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
128140
128140
  }
128141
128141
  },
128142
128142
  {
@@ -128259,7 +128259,7 @@
128259
128259
  "staleCheck": {
128260
128260
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
128261
128261
  "sourceFile": "src/operations/index.ts",
128262
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
128262
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
128263
128263
  }
128264
128264
  },
128265
128265
  {
@@ -128392,7 +128392,7 @@
128392
128392
  "staleCheck": {
128393
128393
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
128394
128394
  "sourceFile": "src/operations/index.ts",
128395
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
128395
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
128396
128396
  }
128397
128397
  },
128398
128398
  {
@@ -128521,7 +128521,7 @@
128521
128521
  "staleCheck": {
128522
128522
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
128523
128523
  "sourceFile": "src/operations/index.ts",
128524
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
128524
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
128525
128525
  }
128526
128526
  },
128527
128527
  {
@@ -128544,7 +128544,7 @@
128544
128544
  "opts": {
128545
128545
  "type": "object",
128546
128546
  "required": false,
128547
- "description": "FetchManyOptions — { maxItems?: number (may lower the 20-item cap, never raise it), names?: boolean (default true — found records gain label siblings, e.g. statusLabel, contractIDName — null, never missing, when the field is keyed with a null/0 or unresolved value; false = raw records), liveFields?: boolean (opt-in live field validation — requested fields are validated against the tenant's LIVE entity field metadata (the cached metadata channel: a warm fieldCache costs zero wire; a cold run is one entityInformation/fields GET per distinct resource in the batch); when a resource's metadata is unavailable the validation falls back to the vendored-spec field set for that resource; when available the live set is authoritative — a field it lacks is refused even if the spec lists it, and a live field the spec lacks (e.g. time_entries postedDate) is accepted) }",
128547
+ "description": "FetchManyOptions — { maxItems?: number (may lower the 20-item cap, never raise it), names?: boolean (default true — found records gain label siblings, e.g. statusLabel, contractIDName — null, never missing, when the field is keyed with a null value, a 0 id or an unresolved value (a picklist 0 is labelled when the picklist defines it); false = raw records), liveFields?: boolean (opt-in live field validation — requested fields are validated against the tenant's LIVE entity field metadata (the cached metadata channel: a warm fieldCache costs zero wire; a cold run is one entityInformation/fields GET per distinct resource in the batch); when a resource's metadata is unavailable the validation falls back to the vendored-spec field set for that resource; when available the live set is authoritative — a field it lacks is refused even if the spec lists it, and a live field the spec lacks (e.g. time_entries postedDate) is accepted) }",
128548
128548
  "properties": [
128549
128549
  {
128550
128550
  "name": "maxItems",
@@ -128713,7 +128713,7 @@
128713
128713
  "staleCheck": {
128714
128714
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
128715
128715
  "sourceFile": "src/operations/index.ts",
128716
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
128716
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
128717
128717
  }
128718
128718
  },
128719
128719
  {
@@ -128953,7 +128953,7 @@
128953
128953
  "staleCheck": {
128954
128954
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
128955
128955
  "sourceFile": "src/operations/index.ts",
128956
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
128956
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
128957
128957
  }
128958
128958
  },
128959
128959
  {
@@ -129088,7 +129088,7 @@
129088
129088
  "staleCheck": {
129089
129089
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
129090
129090
  "sourceFile": "src/operations/index.ts",
129091
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
129091
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
129092
129092
  }
129093
129093
  },
129094
129094
  {
@@ -129256,7 +129256,7 @@
129256
129256
  "staleCheck": {
129257
129257
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
129258
129258
  "sourceFile": "src/operations/index.ts",
129259
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
129259
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
129260
129260
  }
129261
129261
  },
129262
129262
  {
@@ -129363,7 +129363,7 @@
129363
129363
  "staleCheck": {
129364
129364
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
129365
129365
  "sourceFile": "src/operations/index.ts",
129366
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
129366
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
129367
129367
  }
129368
129368
  },
129369
129369
  {
@@ -129467,7 +129467,7 @@
129467
129467
  "staleCheck": {
129468
129468
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
129469
129469
  "sourceFile": "src/operations/index.ts",
129470
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
129470
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
129471
129471
  }
129472
129472
  },
129473
129473
  {
@@ -129835,7 +129835,7 @@
129835
129835
  "staleCheck": {
129836
129836
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
129837
129837
  "sourceFile": "src/operations/index.ts",
129838
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
129838
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
129839
129839
  }
129840
129840
  },
129841
129841
  {
@@ -129949,7 +129949,7 @@
129949
129949
  "staleCheck": {
129950
129950
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
129951
129951
  "sourceFile": "src/operations/index.ts",
129952
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
129952
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
129953
129953
  }
129954
129954
  },
129955
129955
  {
@@ -130066,7 +130066,7 @@
130066
130066
  "staleCheck": {
130067
130067
  "planHash": "9bb87de7bcbda60f6c44955dba52b8e61e9c5547750ea8acacfcb6f261d7734f",
130068
130068
  "sourceFile": "src/operations/index.ts",
130069
- "sourceHash": "b4d6ab1e99e967439ce3d56028984701796de5ea2c5c941bda4897f6b14d1c19"
130069
+ "sourceHash": "66b9818ed94330f4ef2bef2698b1902b81cf1b0f3dc325e2a53b3204e4a6463e"
130070
130070
  }
130071
130071
  }
130072
130072
  ]