lex-service_now 0.3.0 → 0.3.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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -49
  3. data/CLAUDE.md +107 -79
  4. data/README.md +140 -94
  5. data/lex-service_now.gemspec +1 -1
  6. data/lib/legion/extensions/service_now/access_control/runners/access_control.rb +5 -5
  7. data/lib/legion/extensions/service_now/account/runners/account.rb +4 -4
  8. data/lib/legion/extensions/service_now/aggregate/runners/aggregate.rb +1 -1
  9. data/lib/legion/extensions/service_now/approval/runners/approval.rb +5 -5
  10. data/lib/legion/extensions/service_now/asset/runners/asset.rb +6 -6
  11. data/lib/legion/extensions/service_now/attachment/runners/attachment.rb +4 -4
  12. data/lib/legion/extensions/service_now/audit/runners/audit.rb +3 -3
  13. data/lib/legion/extensions/service_now/business_rule/runners/business_rule.rb +5 -5
  14. data/lib/legion/extensions/service_now/calendar/runners/calendar.rb +6 -6
  15. data/lib/legion/extensions/service_now/catalog_task/runners/catalog_task.rb +4 -4
  16. data/lib/legion/extensions/service_now/catalog_variable/runners/catalog_variable.rb +5 -5
  17. data/lib/legion/extensions/service_now/change/runners/change.rb +14 -14
  18. data/lib/legion/extensions/service_now/ci_relationship/runners/ci_relationship.rb +5 -5
  19. data/lib/legion/extensions/service_now/client.rb +4 -0
  20. data/lib/legion/extensions/service_now/cmdb/instance/runners/instance.rb +7 -7
  21. data/lib/legion/extensions/service_now/cmdb/meta/runners/meta.rb +2 -2
  22. data/lib/legion/extensions/service_now/cmdb_health/runners/cmdb_health.rb +4 -4
  23. data/lib/legion/extensions/service_now/company/runners/company.rb +5 -5
  24. data/lib/legion/extensions/service_now/contract/runners/contract.rb +5 -5
  25. data/lib/legion/extensions/service_now/cost_center/runners/cost_center.rb +5 -5
  26. data/lib/legion/extensions/service_now/csm/runners/csm.rb +64 -0
  27. data/lib/legion/extensions/service_now/currency/runners/currency.rb +3 -3
  28. data/lib/legion/extensions/service_now/department/runners/department.rb +5 -5
  29. data/lib/legion/extensions/service_now/deprecation_log/runners/deprecation_log.rb +4 -4
  30. data/lib/legion/extensions/service_now/discovery/runners/discovery.rb +5 -5
  31. data/lib/legion/extensions/service_now/email_log/runners/email_log.rb +3 -3
  32. data/lib/legion/extensions/service_now/event/runners/event.rb +3 -3
  33. data/lib/legion/extensions/service_now/flow/runners/flow.rb +6 -6
  34. data/lib/legion/extensions/service_now/grc/runners/grc.rb +61 -0
  35. data/lib/legion/extensions/service_now/helpers/client.rb +23 -0
  36. data/lib/legion/extensions/service_now/hr_case/runners/hr_case.rb +5 -5
  37. data/lib/legion/extensions/service_now/import_set/runners/import_set.rb +2 -2
  38. data/lib/legion/extensions/service_now/incident/runners/incident.rb +6 -6
  39. data/lib/legion/extensions/service_now/integration_hub/runners/integration_hub.rb +49 -0
  40. data/lib/legion/extensions/service_now/knowledge/runners/knowledge.rb +5 -5
  41. data/lib/legion/extensions/service_now/knowledge_base/runners/knowledge_base.rb +6 -6
  42. data/lib/legion/extensions/service_now/knowledge_feedback/runners/knowledge_feedback.rb +4 -4
  43. data/lib/legion/extensions/service_now/license/runners/license.rb +4 -4
  44. data/lib/legion/extensions/service_now/location/runners/location.rb +5 -5
  45. data/lib/legion/extensions/service_now/metric/runners/metric.rb +4 -4
  46. data/lib/legion/extensions/service_now/mid_server/runners/mid_server.rb +5 -5
  47. data/lib/legion/extensions/service_now/notification/runners/notification.rb +5 -5
  48. data/lib/legion/extensions/service_now/on_call/runners/on_call.rb +5 -5
  49. data/lib/legion/extensions/service_now/performance_analytics/runners/performance_analytics.rb +5 -5
  50. data/lib/legion/extensions/service_now/problem/runners/problem.rb +6 -6
  51. data/lib/legion/extensions/service_now/project/runners/project.rb +6 -6
  52. data/lib/legion/extensions/service_now/release/runners/release.rb +5 -5
  53. data/lib/legion/extensions/service_now/request/runners/request.rb +6 -6
  54. data/lib/legion/extensions/service_now/scheduled_job/runners/scheduled_job.rb +5 -5
  55. data/lib/legion/extensions/service_now/script_action/runners/script_action.rb +5 -5
  56. data/lib/legion/extensions/service_now/script_include/runners/script_include.rb +5 -5
  57. data/lib/legion/extensions/service_now/security_incident/runners/security_incident.rb +5 -5
  58. data/lib/legion/extensions/service_now/service_catalog/runners/service_catalog.rb +11 -11
  59. data/lib/legion/extensions/service_now/service_portal/runners/service_portal.rb +55 -0
  60. data/lib/legion/extensions/service_now/skills/approval_workflow.rb +5 -5
  61. data/lib/legion/extensions/service_now/skills/asset_management.rb +5 -5
  62. data/lib/legion/extensions/service_now/skills/change_request.rb +6 -6
  63. data/lib/legion/extensions/service_now/skills/cmdb_query.rb +5 -5
  64. data/lib/legion/extensions/service_now/skills/incident.rb +6 -6
  65. data/lib/legion/extensions/service_now/skills/knowledge.rb +5 -5
  66. data/lib/legion/extensions/service_now/skills/problem_management.rb +6 -6
  67. data/lib/legion/extensions/service_now/skills/request_fulfillment.rb +6 -6
  68. data/lib/legion/extensions/service_now/skills/security_incident_response.rb +6 -6
  69. data/lib/legion/extensions/service_now/skills/service_catalog.rb +6 -6
  70. data/lib/legion/extensions/service_now/sla/runners/sla.rb +5 -5
  71. data/lib/legion/extensions/service_now/survey/runners/survey.rb +5 -5
  72. data/lib/legion/extensions/service_now/system_property/runners/system_property.rb +6 -6
  73. data/lib/legion/extensions/service_now/table/runners/table.rb +3 -3
  74. data/lib/legion/extensions/service_now/tag/runners/tag.rb +7 -7
  75. data/lib/legion/extensions/service_now/task/runners/task.rb +5 -5
  76. data/lib/legion/extensions/service_now/ui_action/runners/ui_action.rb +5 -5
  77. data/lib/legion/extensions/service_now/ui_policy/runners/ui_policy.rb +5 -5
  78. data/lib/legion/extensions/service_now/update_set/runners/update_set.rb +6 -6
  79. data/lib/legion/extensions/service_now/user/runners/user.rb +7 -7
  80. data/lib/legion/extensions/service_now/user_group/runners/user_group.rb +9 -9
  81. data/lib/legion/extensions/service_now/vendor/runners/vendor.rb +5 -6
  82. data/lib/legion/extensions/service_now/version.rb +1 -1
  83. data/lib/legion/extensions/service_now/work_order/runners/work_order.rb +6 -6
  84. data/lib/legion/extensions/service_now/workflow/runners/workflow.rb +6 -6
  85. data/lib/legion/extensions/service_now.rb +4 -0
  86. metadata +7 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7299f2cb64f753600e58b75350804a51164e4ed0b246a0124e9dd691ae813860
4
- data.tar.gz: 4cdb63326d0a106814c0f6abb67bf819198e0114d299dbf971a3185ed3b75f8c
3
+ metadata.gz: f18e533db37ce9fdaf5c08842bd1c7f147a5e395a977efe7d7ce4d5c865fbe58
4
+ data.tar.gz: c72de9f35aa66e0499592cbfe21cf6a65d951e6943e6b689d3f97c2cee5762ff
5
5
  SHA512:
6
- metadata.gz: 619c90c1289c5b046076a55290a5969d51605b5491ad3163a4038de98d99e06294b62774d5a3d24592ec27f0705ab759df3aafca91778be7c6af10f8d0e0d3ea
7
- data.tar.gz: 3ee2c4fb6921cf67f71139d9a288d6d056302a0b403f63dcb6b809dfb3667ca00b7689255e5ade8bb188d618a97169338b71673b7c8febb99401ca7e2e493374
6
+ metadata.gz: 25217fe95b96c91c97dc82fad4d2fdfedd04880ed910f35a7a2a24841f3210400a2a3bf95876b09a833bea69b887e64f7994b41ad0773b98cb8d8865d60c0a2d
7
+ data.tar.gz: 9d9ebe39b1c39b8e2272f28ec4a8a0580758e056e88fa60b5dfbd533ddfbd2e910af73e20a3f79ff6d7a41cc385eae3a81a1fb7c8a2d1f4b7319a2afde31c860
data/CHANGELOG.md CHANGED
@@ -1,58 +1,60 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1] - 2026-05-25
4
+
5
+ ### Fixed
6
+ - Skills: move `steps` DSL declaration after method definitions in all 10 skills to fix
7
+ `InvalidSkill` error on load (`validate_steps!` requires methods to be defined first)
8
+
9
+ ## [0.3.0] - 2026-04-22
10
+
11
+ ### Added
12
+ - Tag runner (7 methods) — label + label_entry CRUD, tag/untag records
13
+ - Metric runner (4 methods) — metric_definition + metric_instance
14
+ - Currency runner (3 methods) — fx_currency + fx_rate
15
+ - Calendar runner (6 methods) — cmn_schedule CRUD + entries
16
+ - KnowledgeFeedback runner (4 methods) — kb_feedback + kb_view
17
+ - License runner (4 methods) — license_agreement + allocations + installed software
18
+ - DeprecationLog runner (4 methods) — upgrade history + deprecation log
19
+ - CmdbHealth runner (4 methods) — duplicate CIs, stale CIs, health dashboard
20
+ - ServicePortal runner (6 methods) — portals, pages, widgets
21
+ - GRC runner (7 methods) — risks, controls, audits, policies
22
+ - CSM runner (6 methods) — customer service cases and contacts
23
+ - IntegrationHub runner (5 methods) — spokes, action types, connections, credentials
24
+ - Vendor runner (5 methods) — vendor-filtered company records
25
+ - CiRelationship runner (5 methods) — cmdb_rel_type + cmdb_rel_ci
26
+ - ScriptAction runner (5 methods) — sysevent_script_action CRUD
27
+ - UiPolicy runner (5 methods) — sys_ui_policy CRUD
28
+ - UiAction runner (5 methods) — sys_ui_action CRUD
29
+ - AccessControl runner (5 methods) — sys_security_acl CRUD
30
+ - CatalogTask runner (4 methods) — sc_task list/get/update/close
31
+ - KnowledgeBase runner (6 methods) — kb_knowledge_base CRUD + categories
32
+ - Helpers::Pagination — auto-fetches all pages for any list method
33
+ - Helpers::Retry — retries on RateLimitError/ServerError with exponential backoff
34
+ - Helpers::Client#handle_response — raises typed errors on non-2xx responses
35
+ - Errors module — AuthenticationError, AuthorizationError, NotFoundError,
36
+ UnprocessableError, RateLimitError, ServerError
37
+
38
+ ### Fixed
39
+ - Table runner: table_create/table_update no longer leak auth kwargs into request body
40
+ - Change runner: task methods renamed to list_change_tasks/create_change_task/
41
+ update_change_task/delete_change_task to avoid collision with Task runner
42
+
3
43
  ## [0.2.0] - 2026-04-22
4
44
 
5
45
  ### Added
6
- - Incident runner (6 methods)
7
- - Problem runner (6 methods)
8
- - Attachment runner (5 methods) with multipart upload support
9
- - Table runner (5 methods) — generic CRUD escape hatch for any table
10
- - Aggregate runner (1 method) stats/count/sum/avg queries
11
- - User runner (7 methods) including lookup by username and email
12
- - UserGroup runner (9 methods) including member management
13
- - Request/RITM runner (6 methods)
14
- - Approval runner (5 methods) — approve, reject, list_for_record
15
- - Task runner (5 methods) including add_work_note
16
- - SLA runner (5 methods) — definitions and task SLA tracking
17
- - ImportSet runner (2 methods)
18
- - Event runner (3 methods)
19
- - PerformanceAnalytics runner (5 methods) — widgets, scorecards, indicators
20
- - Flow/Subflow runner (6 methods)
21
- - Notification runner (5 methods)
22
- - EmailLog runner (3 methods)
23
- - Audit runner (3 methods) — field change history
24
- - SystemProperty runner (6 methods)
25
- - Asset runner (6 methods) including hardware
26
- - Location runner (5 methods)
27
- - Department runner (5 methods)
28
- - Company runner (5 methods)
29
- - Project runner (6 methods) including project tasks
30
- - Release runner (5 methods)
31
- - HrCase runner (5 methods)
32
- - SecurityIncident runner (5 methods)
33
- - UpdateSet runner (6 methods) including change listing
34
- - ScriptInclude runner (5 methods)
35
- - BusinessRule runner (5 methods)
36
- - ScheduledJob runner (5 methods)
37
- - OnCall runner (5 methods) — schedules, members, who_is_on_call
38
- - Survey runner (5 methods) — instances and responses
39
- - Contract runner (5 methods)
40
- - CostCenter runner (5 methods)
41
- - WorkOrder runner (6 methods) including tasks
42
- - Discovery runner (5 methods)
43
- - MidServer runner (5 methods)
44
- - CatalogVariable runner (5 methods)
45
- - Workflow runner (6 methods) — contexts and cancellation
46
- - 10 LLM skills: Incident, ChangeRequest, CmdbQuery, Knowledge, ServiceCatalog, ProblemManagement, RequestFulfillment, ApprovalWorkflow, AssetManagement, SecurityIncidentResponse
46
+ - Incident, Problem, Attachment, Table, Aggregate, User, UserGroup runners
47
+ - Request/RITM, Approval, Task, SLA, ImportSet, Event runners
48
+ - PerformanceAnalytics, Flow/Subflow runners
49
+ - Notification, EmailLog, Audit, SystemProperty runners
50
+ - Asset, Location, Department, Company, CostCenter runners
51
+ - Project, Release, SecurityIncident, HrCase runners
52
+ - UpdateSet, ScriptInclude, BusinessRule, ScheduledJob runners
53
+ - OnCall, Survey, Contract, WorkOrder, Discovery, MidServer runners
54
+ - CatalogVariable, Workflow runners
55
+ - 10 LLM skills
47
56
 
48
57
  ## [0.1.0] - 2026-04-22
49
58
 
50
59
  ### Added
51
- - Initial release
52
- - Change Management API (14 methods)
53
- - CMDB Instance API (7 methods)
54
- - CMDB Meta API (2 methods)
55
- - Knowledge API (5 methods)
56
- - Service Catalog API (11 methods)
57
- - Account API (4 methods)
58
- - LLM skill triggers for Incident, ChangeRequest, CmdbQuery, Knowledge, ServiceCatalog
60
+ - Initial release with Change, CMDB Instance/Meta, Knowledge, Service Catalog, Account
data/CLAUDE.md CHANGED
@@ -6,9 +6,9 @@
6
6
 
7
7
  ## Purpose
8
8
 
9
- Comprehensive Legion Extension connecting LegionIO to ServiceNow via REST APIs. Covers 46 domains spanning ITSM, ITOM, ITAM, HR, Security, DevOps, and platform administration.
9
+ Comprehensive Legion Extension connecting LegionIO to ServiceNow via REST APIs. Covers **66 domains** and **346 methods** spanning ITSM, ITOM, ITAM, HR, Security, GRC, CSM, DevOps, and platform administration.
10
10
 
11
- **Version**: 0.2.0
11
+ **Version**: 0.3.0
12
12
  **GitHub**: https://github.com/LegionIO/lex-service_now
13
13
  **License**: MIT
14
14
 
@@ -16,106 +16,134 @@ Comprehensive Legion Extension connecting LegionIO to ServiceNow via REST APIs.
16
16
 
17
17
  ```
18
18
  Legion::Extensions::ServiceNow
19
+ +-- Errors # AuthenticationError, AuthorizationError,
20
+ | # NotFoundError, UnprocessableError,
21
+ | # RateLimitError, ServerError
19
22
  +-- Helpers/
20
- | +-- Client # connection() with OAuth2→Bearer→Basic auth priority fallback
23
+ | +-- Client # connection() with OAuth2→Bearer→Basic fallback
24
+ | | # handle_response() raises typed errors on non-2xx
25
+ | +-- Pagination # paginate(method, **opts) auto-fetches all pages
26
+ | +-- Retry # with_retry(max_retries:) retries on rate limit/server errors
21
27
  +-- ITSM/
22
- | +-- Change::Runners::Change (14 methods) — normal/emergency/standard + tasks/conflicts/approvals
23
- | +-- Incident::Runners::Incident (6 methods) — CRUD + resolve
24
- | +-- Problem::Runners::Problem (6 methods) — CRUD + close
25
- | +-- Request::Runners::Request (6 methods) — sc_request + sc_req_item
26
- | +-- Approval::Runners::Approval (5 methods) — approve/reject + list_for_record
27
- | +-- Task::Runners::Task (5 methods) — CRUD + add_work_note
28
- | +-- Sla::Runners::Sla (5 methods) — definitions + task SLAs
28
+ | +-- Change (14) — normal/emergency/standard + change_tasks/conflicts/approvals
29
+ | +-- Incident (6) — CRUD + resolve
30
+ | +-- Problem (6) — CRUD + close
31
+ | +-- Request (6) — sc_request + sc_req_item
32
+ | +-- Approval (5) — approve/reject + list_for_record
33
+ | +-- Task (5) — CRUD + add_work_note
34
+ | +-- Sla (5) — definitions + task SLAs
35
+ | +-- CatalogTask (4) — sc_task list/get/update/close
29
36
  +-- CMDB/
30
- | +-- Cmdb::Instance::Runners::Instance (7 methods) — CI CRUD + relationships
31
- | +-- Cmdb::Meta::Runners::Meta (2 methods) — hierarchy + class metadata
32
- +-- Knowledge/
33
- | +-- Knowledge::Runners::Knowledge (5 methods) article CRUD
37
+ | +-- Cmdb::Instance (7) — CI CRUD + relationships
38
+ | +-- Cmdb::Meta (2) — hierarchy + class metadata
39
+ | +-- CiRelationship (5) — cmdb_rel_type + cmdb_rel_ci
40
+ | +-- CmdbHealth (4)duplicates, stale CIs, health dashboard
34
41
  +-- ServiceCatalog/
35
- | +-- ServiceCatalog::Runners::ServiceCatalog (11 methods) — catalogs/items/cart/order
36
- | +-- CatalogVariable::Runners::CatalogVariable (5 methods) — item variables CRUD
37
- +-- User Management/
38
- | +-- User::Runners::User (7 methods) — CRUD + lookup_by_username/email
39
- | +-- UserGroup::Runners::UserGroup (9 methods) — CRUD + member management
40
- | +-- Account::Runners::Account (4 methods) core account CRUD
41
- +-- Assets/
42
- | +-- Asset::Runners::Asset (6 methods) alm_asset CRUD + hardware
43
- | +-- Contract::Runners::Contract (5 methods) ast_contract CRUD
42
+ | +-- ServiceCatalog (11) — catalogs/items/cart/order
43
+ | +-- CatalogVariable (5) — item_option_new CRUD
44
+ +-- Knowledge/
45
+ | +-- Knowledge (5)article CRUD
46
+ | +-- KnowledgeBase (6)kb_knowledge_base CRUD + categories
47
+ | +-- KnowledgeFeedback (4)feedback + views
48
+ +-- UserManagement/
49
+ | +-- User (7) — CRUD + lookup_by_username/email
50
+ | +-- UserGroup (9)CRUD + member management
51
+ | +-- Account (4) — account CRUD
44
52
  +-- Organization/
45
- | +-- Location::Runners::Location (5 methods) — cmn_location CRUD
46
- | +-- Department::Runners::Department (5 methods) — cmn_department CRUD
47
- | +-- Company::Runners::Company (5 methods) — core_company CRUD
48
- | +-- CostCenter::Runners::CostCenter (5 methods) — cmn_cost_center CRUD
49
- +-- Project & Release/
50
- | +-- Project::Runners::Project (6 methods) — pm_project CRUD + tasks
51
- | +-- Release::Runners::Release (5 methods) rm_release CRUD
53
+ | +-- Location (5) — cmn_location CRUD
54
+ | +-- Department (5) — cmn_department CRUD
55
+ | +-- Company (5) — core_company CRUD
56
+ | +-- CostCenter (5) — cmn_cost_center CRUD
57
+ | +-- Vendor (5) vendor-filtered company records
58
+ +-- Assets/
59
+ | +-- Asset (6)alm_asset CRUD + hardware
60
+ | +-- Contract (5) — ast_contract CRUD
61
+ | +-- License (4) — agreements + allocations + installed software
52
62
  +-- Security/
53
- | +-- SecurityIncident::Runners::SecurityIncident (5 methods) — sn_si_incident CRUD
63
+ | +-- SecurityIncident (5) — sn_si_incident CRUD
64
+ | +-- AccessControl (5) — sys_security_acl CRUD
65
+ | +-- Grc (7) — risks + controls + audits + policies
54
66
  +-- HR/
55
- | +-- HrCase::Runners::HrCase (5 methods) — sn_hr_core_case CRUD
56
- +-- Platform Admin/
57
- | +-- SystemProperty::Runners::SystemProperty (6 methods) — sys_properties CRUD
58
- | +-- UpdateSet::Runners::UpdateSet (6 methods) — CRUD + list changes
59
- | +-- ScriptInclude::Runners::ScriptInclude (5 methods) sys_script_include CRUD
60
- | +-- BusinessRule::Runners::BusinessRule (5 methods) sys_script CRUD
61
- | +-- ScheduledJob::Runners::ScheduledJob (5 methods) — sysauto_script CRUD
62
- | +-- Workflow::Runners::Workflow (6 methods) wf_workflow + contexts
63
- | +-- Flow::Runners::Flow (6 methods) sn_fd flow execute + subflows
64
- | +-- Audit::Runners::Audit (3 methods) sys_audit + field changes
67
+ | +-- HrCase (5) — sn_hr_core_case CRUD
68
+ +-- CustomerService/
69
+ | +-- Csm (6) — customer cases + contacts
70
+ +-- ProjectRelease/
71
+ | +-- Project (6)pm_project CRUD + tasks
72
+ | +-- Release (5)rm_release CRUD
73
+ +-- PlatformAdmin/
74
+ | +-- SystemProperty (6)sys_properties CRUD
75
+ | +-- UpdateSet (6)CRUD + list changes
76
+ | +-- ScriptInclude (5)sys_script_include CRUD
77
+ | +-- BusinessRule (5) — sys_script CRUD
78
+ | +-- ScriptAction (5) — sysevent_script_action CRUD
79
+ | +-- ScheduledJob (5) — sysauto_script CRUD
80
+ | +-- UiPolicy (5) — sys_ui_policy CRUD
81
+ | +-- UiAction (5) — sys_ui_action CRUD
82
+ | +-- Workflow (6) — wf_workflow + contexts
83
+ | +-- Flow (6) — sn_fd flows + subflows
84
+ | +-- Audit (3) — sys_audit + field changes
85
+ | +-- DeprecationLog (4) — upgrade history + deprecation log
65
86
  +-- ITOM/
66
- | +-- Discovery::Runners::Discovery (5 methods) — schedules/logs/devices
67
- | +-- MidServer::Runners::MidServer (5 methods) — ecc_agent CRUD + capabilities
68
- | +-- Event::Runners::Event (3 methods) — sysevent CRUD
87
+ | +-- Discovery (5) — schedules/logs/devices
88
+ | +-- MidServer (5) — ecc_agent CRUD + capabilities
89
+ | +-- Event (3) — sysevent CRUD
69
90
  +-- Analytics/
70
- | +-- PerformanceAnalytics::Runners::PerformanceAnalytics (5 methods) — widgets/scorecards/indicators
71
- | +-- Aggregate::Runners::Aggregate (1 method) stats queries on any table
91
+ | +-- PerformanceAnalytics (5) — widgets/scorecards/indicators
92
+ | +-- Metric (4)definitions + instances
72
93
  +-- Comms/
73
- | +-- Notification::Runners::Notification (5 methods) — sysevent_email_action CRUD
74
- | +-- EmailLog::Runners::EmailLog (3 methods) — sys_email list/get/list_for_record
75
- +-- Field Service/
76
- | +-- WorkOrder::Runners::WorkOrder (6 methods) — wm_order CRUD + tasks + close
77
- | +-- OnCall::Runners::OnCall (5 methods) cmn_rota + members + who_is_on_call
94
+ | +-- Notification (5) — sysevent_email_action CRUD
95
+ | +-- EmailLog (3) — sys_email list/get/list_for_record
96
+ +-- FieldService/
97
+ | +-- WorkOrder (6) — wm_order CRUD + tasks + close
98
+ | +-- OnCall (5)schedules + members + who_is_on_call
99
+ +-- PlatformModules/
100
+ | +-- ServicePortal (6) — portals/pages/widgets
101
+ | +-- IntegrationHub (5) — spokes/connections/credentials
78
102
  +-- Utilities/
79
- | +-- Table::Runners::Table (5 methods) — generic CRUD on any table
80
- | +-- ImportSet::Runners::ImportSet (2 methods) — /api/now/import
81
- | +-- Survey::Runners::Survey (5 methods) assessments + instances + responses
103
+ | +-- Table (5) — generic CRUD on any table
104
+ | +-- ImportSet (2) — /api/now/import
105
+ | +-- Aggregate (1)stats queries on any table
106
+ | +-- Attachment (5) — upload/download files
107
+ | +-- Survey (5) — assessments + instances + responses
108
+ | +-- Tag (7) — label + label_entry CRUD
109
+ | +-- Currency (3) — fx_currency + fx_rate
110
+ | +-- Calendar (6) — cmn_schedule CRUD + entries
82
111
  +-- Skills/ (loaded only if legion-llm available)
83
112
  | +-- Incident, ChangeRequest, CmdbQuery, Knowledge, ServiceCatalog
84
113
  | +-- ProblemManagement, RequestFulfillment, ApprovalWorkflow
85
114
  | +-- AssetManagement, SecurityIncidentResponse
86
- +-- Client # Standalone client class including all 46 runners
115
+ +-- Client # includes all 66 runners + helpers
87
116
  ```
88
117
 
118
+ ## Known Method Name Notes
119
+
120
+ - Change runner task methods are named `list_change_tasks`, `create_change_task`, `update_change_task`, `delete_change_task` to avoid collision with the generic Task runner's `list_tasks`/`update_task`.
121
+
89
122
  ## Authentication
90
123
 
91
- `Helpers::Client#connection` selects auth priority order (most secure first):
92
- 1. **OAuth2** — `client_id` + `client_secret` → client credentials grant → `/oauth_token.do`, token memoized in `@fetch_oauth2_token`
124
+ Priority order (most secure wins):
125
+ 1. **OAuth2** — `client_id` + `client_secret` → `/oauth_token.do` memoized in `@fetch_oauth2_token`
93
126
  2. **Bearer** — `token` → `Authorization: Bearer <token>`
94
- 3. **Basic Auth** — `username` + `password` → HTTP Basic
127
+ 3. **Basic Auth** — `username` + `password`
95
128
 
96
- Instance URL defaults to `Legion::Settings[:service_now][:url]`, overridable per `Client.new` or per call.
129
+ URL defaults to `Legion::Settings[:service_now][:url]`, overridable per call or `Client.new`.
97
130
 
98
- ## Standalone Client
131
+ ## Helpers
99
132
 
133
+ ### Pagination
100
134
  ```ruby
101
- client = Legion::Extensions::ServiceNow::Client.new(
102
- url: 'https://your-instance.service-now.com',
103
- username: 'svc_account',
104
- password: 'secret'
105
- )
106
-
107
- # Or with OAuth2
108
- client = Legion::Extensions::ServiceNow::Client.new(
109
- url: 'https://your-instance.service-now.com',
110
- client_id: 'abc',
111
- client_secret: 'xyz'
112
- )
113
-
114
- client.list_incidents(sysparm_query: 'state=1', sysparm_limit: 50)
115
- client.create_change(short_description: 'Deploy v2.0')
116
- client.get_ci(class_name: 'cmdb_ci_server', sys_id: 'abc123')
135
+ all = client.paginate(:list_incidents, sysparm_query: 'state=1')
117
136
  ```
118
137
 
138
+ ### Retry
139
+ ```ruby
140
+ client.with_retry(max_retries: 3) { client.create_incident(...) }
141
+ ```
142
+ Retries on `RateLimitError` (exponential backoff) and `ServerError`. Does not retry auth errors.
143
+
144
+ ### Error Handling
145
+ `handle_response` is called automatically; raises typed `Errors::*` on non-2xx. Errors carry `.status` and `.detail`.
146
+
119
147
  ## Settings
120
148
 
121
149
  ```json
@@ -138,20 +166,20 @@ client.get_ci(class_name: 'cmdb_ci_server', sys_id: 'abc123')
138
166
  | `faraday >= 2.0` | HTTP client |
139
167
  | `faraday-multipart >= 1.0` | Multipart upload for attachments |
140
168
  | `legion-settings >= 1.3.14` | Settings/config |
141
- | `legion-logging >= 1.3.2` | Structured logging |
169
+ | `legion-logging >= 1.3.2` | Logging |
142
170
  | `legion-cache >= 1.3.11` | Caching |
143
171
  | `legion-crypt >= 1.4.9` | Credential encryption |
144
172
  | `legion-data >= 1.4.17` | ORM |
145
173
  | `legion-json >= 1.2.1` | JSON helpers |
146
174
  | `legion-transport >= 1.3.9` | AMQP transport |
147
175
 
148
- `legion-llm` is an optional soft dependency — skills load only if defined.
176
+ `legion-llm` is optional — skills load only if defined.
149
177
 
150
178
  ## Development
151
179
 
152
180
  ```bash
153
181
  bundle install
154
- bundle exec rspec # 217+ examples, 0 failures
182
+ bundle exec rspec # 372 examples, 0 failures
155
183
  bundle exec rubocop # 0 offenses
156
184
  ```
157
185