@webex/internal-plugin-device 3.12.0-next.54 → 3.12.0-next.55

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.
@@ -0,0 +1,335 @@
1
+ {
2
+ "manifest_version": 1,
3
+ "repository": {
4
+ "name": "@webex/internal-plugin-device",
5
+ "purpose": "Device registration for the Webex JS SDK: registers, refreshes, and unregisters this client's device with the WDM service and exposes the device-derived state (URLs, feature toggles, organization policy) as the webex.internal.device plugin.",
6
+ "category": "cat2-legacy",
7
+ "primary_languages": [
8
+ "javascript",
9
+ "typescript"
10
+ ]
11
+ },
12
+ "topology": "Single-repo",
13
+ "commands": {
14
+ "compile": {
15
+ "command": "yarn workspace @webex/internal-plugin-device build:src",
16
+ "source_file": "package.json",
17
+ "role": "compile"
18
+ },
19
+ "build": {
20
+ "command": "yarn workspace @webex/internal-plugin-device build",
21
+ "source_file": "package.json",
22
+ "role": "package"
23
+ },
24
+ "unit-test": {
25
+ "command": "yarn workspace @webex/internal-plugin-device test:unit",
26
+ "source_file": "package.json",
27
+ "role": "unit-test"
28
+ },
29
+ "browser-test": {
30
+ "command": "yarn workspace @webex/internal-plugin-device test:browser",
31
+ "source_file": "package.json",
32
+ "role": "integration-test"
33
+ },
34
+ "lint": {
35
+ "command": "yarn workspace @webex/internal-plugin-device test:style",
36
+ "source_file": "package.json",
37
+ "role": "lint"
38
+ },
39
+ "deploy": {
40
+ "command": "yarn workspace @webex/internal-plugin-device deploy:npm",
41
+ "source_file": "package.json",
42
+ "role": "deploy"
43
+ }
44
+ },
45
+ "toolchain": [
46
+ {
47
+ "name": "node",
48
+ "version": ">=18",
49
+ "origin": "repo-config",
50
+ "source_file": "package.json"
51
+ }
52
+ ],
53
+ "tests": {
54
+ "unit": {
55
+ "command_ref": "unit-test",
56
+ "dir": "test/unit",
57
+ "framework": "jest"
58
+ },
59
+ "integration": {
60
+ "command_ref": "browser-test",
61
+ "dir": "test/integration",
62
+ "framework": "mocha (karma runner)",
63
+ "external_deps": [
64
+ "Provisioned Webex test users via @webex/test-helper-test-users",
65
+ "Network access to Webex services"
66
+ ]
67
+ }
68
+ },
69
+ "quality_gates": {
70
+ "code_coverage": {
71
+ "origin": "none",
72
+ "declared_by": "riag@cisco.com via bootstrap questionnaire"
73
+ }
74
+ },
75
+ "coverage_status_definitions": {
76
+ "specced": ">=80% public surface specced, drift <5% — spec is authoritative",
77
+ "partial": "40-80% specced — spec is a hint, cross-check code",
78
+ "untracked": "<40% specced — code is the source of truth"
79
+ },
80
+ "modules": [
81
+ {
82
+ "path": "src/",
83
+ "coverage_status": "Partial",
84
+ "coverage_evidence": "Generator-side field measurement 80.0% (12 of 15 mandatory fields PRESENT, critical 6 of 7) assessed 2026-10-07. WEAK: external WDM integration (no committed machine-readable contract; owner states none can be provided, recorded as an approved unknown), test and characterization coverage (no baseline; MOD-015, INV-004, INV-005, MOD-026 untested), and design rationale (no accepted ADR). Provenance is PRESENT now that approval is recorded. Promotion to Specced held: a critical field is weak and no drift measurement exists.",
85
+ "canonical_spec": "src/docs/README.md",
86
+ "contracts": {
87
+ "provides": [
88
+ "device-plugin-sdk",
89
+ "device-registration-events",
90
+ "cisco-device-url-header"
91
+ ],
92
+ "requires": [
93
+ "wdm-device-registration-service",
94
+ "webex-core-plugin-host",
95
+ "webex-common-sdk",
96
+ "common-timers-sdk",
97
+ "http-core-sdk",
98
+ "internal-plugin-metrics-sdk"
99
+ ]
100
+ },
101
+ "last_assessed": "2026-10-07",
102
+ "section_profile": {
103
+ "has_ui": false,
104
+ "crosses_service_boundaries": true,
105
+ "enforces_domain_rules": true,
106
+ "is_concurrent_async": true,
107
+ "owns_persistence": false,
108
+ "returns_caller_errors": true,
109
+ "has_design_tradeoff": false,
110
+ "stateful_transitions": true,
111
+ "exposes_wire_protocol": false,
112
+ "ui_multi_screen": false,
113
+ "large_data_model": false,
114
+ "has_tiers": false,
115
+ "module_specific_conventions": true,
116
+ "published_package": true,
117
+ "embedded_in_host": false,
118
+ "holds_client_state": true,
119
+ "has_submodules": false,
120
+ "has_submodules_computed_by": "scripts/module_tree.py",
121
+ "has_submodules_computed_at": "2026-10-07T04:04:09Z",
122
+ "resolved_by": "claude-code/claude-sonnet-5-5 (host metadata; bootstrap questionnaire)",
123
+ "resolved_at": "2026-10-07T04:04:09Z"
124
+ }
125
+ }
126
+ ],
127
+ "contract_catalog": {
128
+ "index_path": "docs/architecture.md",
129
+ "definitions": {
130
+ "device-plugin-sdk": {
131
+ "kind": "sdk",
132
+ "publication": "published",
133
+ "source_kind": "repository-path",
134
+ "source": "package.json",
135
+ "summary": "Published npm package surface declared by package.json (main: dist/index.js, devMain: src/index.js): the default Device plugin registered as webex.internal.device, the config namespace webex.config.device, constants, CatalogDetails, DeviceRegistrationOptions, DeviceUrlInterceptor, and the feature classes exported from src/index.js. Internal plugin: semantic versioning is not strictly followed. Per-export detail lives in the owning module spec Public surface."
136
+ },
137
+ "device-registration-events": {
138
+ "kind": "event",
139
+ "publication": "published",
140
+ "source_kind": "repository-path",
141
+ "source": "src/device.js",
142
+ "summary": "Events on webex.internal.device: registration:success (name declared as DEVICE_EVENT_REGISTRATION_SUCCESS in src/constants.js, triggered in src/device.js), change and change:features (re-emitted by src/device.js), and change:<collection> for the developer, entitlement, and user feature collections (emitted by src/features/features-model.js; collection names declared in src/constants.js)."
143
+ },
144
+ "cisco-device-url-header": {
145
+ "kind": "http",
146
+ "publication": "internal",
147
+ "source_kind": "repository-path",
148
+ "source": "src/interceptors/device-url.js",
149
+ "summary": "cisco-device-url request header carrying the registered device URL, added by DeviceUrlInterceptor to outbound requests for catalog services other than idbroker, oauth, and saml."
150
+ },
151
+ "wdm-device-registration-service": {
152
+ "kind": "http",
153
+ "publication": "internal",
154
+ "source_kind": "external",
155
+ "source": "WDM service (Webex web device manager), reached through the wdm entry of the services catalog; no machine-readable contract is committed in this repository, and the response shape is exercised by the fixture test/unit/spec/wdm-dto.json",
156
+ "summary": "Device registration endpoints consumed by this module: POST wdm/devices to register, PUT and DELETE on the device url to refresh and unregister, and GET wdm/devices to list devices for cleanup."
157
+ },
158
+ "webex-core-plugin-host": {
159
+ "kind": "sdk",
160
+ "publication": "published",
161
+ "source_kind": "external",
162
+ "source": "@webex/webex-core (workspace package; no module spec, so source was used: WebexPlugin, persist, waitForValue, registerInternalPlugin, services plugin)",
163
+ "summary": "Plugin host contract consumed by this module: the WebexPlugin base model, the persist and waitForValue decorators, registerInternalPlugin, webex.request, and the services methods waitForCatalog, get, waitForService, getServiceFromUrl, convertUrlToPriorityHostUrl, and markFailedUrl."
164
+ },
165
+ "webex-common-sdk": {
166
+ "kind": "sdk",
167
+ "publication": "published",
168
+ "source_kind": "external",
169
+ "source": "@webex/common (workspace package; module spec consulted: oneFlight, deprecated, inBrowser, deviceType)",
170
+ "summary": "Shared primitives used here: oneFlight and deprecated decorators, the inBrowser flag, and the deviceType constants."
171
+ },
172
+ "common-timers-sdk": {
173
+ "kind": "sdk",
174
+ "publication": "published",
175
+ "source_kind": "external",
176
+ "source": "@webex/common-timers (workspace package; module spec consulted: safeSetTimeout)",
177
+ "summary": "safeSetTimeout, a setTimeout wrapper that unrefs the handle, used for the ephemeral refresh timer, the logout timer, and the registration wait."
178
+ },
179
+ "http-core-sdk": {
180
+ "kind": "sdk",
181
+ "publication": "published",
182
+ "source_kind": "external",
183
+ "source": "@webex/http-core (workspace package; module spec consulted: Interceptor)",
184
+ "summary": "The Interceptor base class extended by DeviceUrlInterceptor."
185
+ },
186
+ "internal-plugin-metrics-sdk": {
187
+ "kind": "sdk",
188
+ "publication": "published",
189
+ "source_kind": "external",
190
+ "source": "@webex/internal-plugin-metrics (workspace package; no module spec, so source was used: newMetrics.submitInternalEvent, newMetrics.callDiagnosticMetrics.setDeviceInfo, metrics.submitClientMetrics)",
191
+ "summary": "Metrics plugin API called during registration for internal events, call-diagnostic device info, and client metrics."
192
+ }
193
+ }
194
+ },
195
+ "spec_policy": {
196
+ "require_what_and_why": true,
197
+ "require_provenance": true,
198
+ "protected_specs": [
199
+ "src/docs/README.md"
200
+ ]
201
+ },
202
+ "validation": {
203
+ "generator_runtime": "claude-code",
204
+ "generator_model": "claude-sonnet-5-5",
205
+ "generator_run_id": "080ee7e9-bd3c-4dfc-a1ac-81cc28eec83f",
206
+ "generator_runtime_source": "host-metadata",
207
+ "validator_runtime": "01a114a2-39d4-73f2-b1b0-e0a3d977933d",
208
+ "validator_run_id": "01a114a2-39d4-73f2-b1b0-e0a3d977933d",
209
+ "validator_runtime_source": "host-metadata",
210
+ "minimum_independence": "different-runtime",
211
+ "runtime_fallback_tier": "different-runtime",
212
+ "blocking_severities": [
213
+ "Blocking"
214
+ ]
215
+ },
216
+ "layout": {
217
+ "sdd_root": ".sdd",
218
+ "docs_root": "docs",
219
+ "agent_entry_path": "AGENTS.md",
220
+ "standing_docs_root": "docs",
221
+ "spec_index_path": "docs/specs/README.md",
222
+ "module_docs_strategy": "source-local",
223
+ "module_docs_relative_path": "docs/README.md",
224
+ "module_docs_decision": {
225
+ "basis": "repo-standards-default",
226
+ "reason": "The package has no module-local documentation folder (the existing docs and src/docs directories were empty), documentation build, or protected authored file that collides with the source-local default.",
227
+ "decided_by": "claude-code (bootstrap questionnaire)",
228
+ "decided_at": "2026-10-07T04:04:09Z"
229
+ },
230
+ "repo_context_decision": {
231
+ "path": ".repo-context.json",
232
+ "schema_path": "schemas/repo-context.schema.json",
233
+ "action": "create",
234
+ "schema_action": "create",
235
+ "reason": "Neither the operational context nor its schema exists in this package; both are created from the bundled Repo Standards templates and verified repository evidence.",
236
+ "decided_by": "claude-code (bootstrap questionnaire)",
237
+ "decided_at": "2026-10-07T04:04:09Z"
238
+ },
239
+ "artifact_decisions": [
240
+ {
241
+ "path": "docs/service.md",
242
+ "action": "omit",
243
+ "reason": "The package is a published library, not a deployable service; it declares no deployment descriptor, container, or runtime entry point.",
244
+ "decided_by": "claude-code (bootstrap questionnaire)",
245
+ "decided_at": "2026-10-07T04:04:09Z"
246
+ },
247
+ {
248
+ "path": "mkdocs.yml",
249
+ "action": "omit",
250
+ "reason": "No documentation build exists for this package.",
251
+ "decided_by": "claude-code (bootstrap questionnaire)",
252
+ "decided_at": "2026-10-07T04:04:09Z"
253
+ },
254
+ {
255
+ "path": "api-specs/openapi.yaml",
256
+ "action": "omit",
257
+ "reason": "The package serves no HTTP routes; its published surface is the npm package declared in package.json, so no OpenAPI source applies.",
258
+ "decided_by": "claude-code (bootstrap questionnaire)",
259
+ "decided_at": "2026-10-07T04:04:09Z"
260
+ },
261
+ {
262
+ "path": "SECURITY.md",
263
+ "action": "omit",
264
+ "reason": "Absent at the package; the questionnaire did not select a security-policy artifact and no reporting contact is established.",
265
+ "decided_by": "claude-code (bootstrap questionnaire)",
266
+ "decided_at": "2026-10-07T04:04:09Z"
267
+ },
268
+ {
269
+ "path": "CONTRIBUTING.md",
270
+ "action": "omit",
271
+ "reason": "No package-level contribution guide exists; contribution rules are owned at the surrounding monorepo root.",
272
+ "decided_by": "claude-code (bootstrap questionnaire)",
273
+ "decided_at": "2026-10-07T04:04:09Z"
274
+ },
275
+ {
276
+ "path": "CHANGELOG.md",
277
+ "action": "omit",
278
+ "reason": "No package-level changelog exists; release notes are owned at the surrounding monorepo root.",
279
+ "decided_by": "claude-code (bootstrap questionnaire)",
280
+ "decided_at": "2026-10-07T04:04:09Z"
281
+ },
282
+ {
283
+ "path": "CTO_CHECKLIST.yml",
284
+ "action": "omit",
285
+ "reason": "The CTO readiness workflow applies to deployable services; this package is a published library.",
286
+ "decided_by": "claude-code (bootstrap questionnaire)",
287
+ "decided_at": "2026-10-07T04:04:09Z"
288
+ },
289
+ {
290
+ "path": "schemas/cto-checklist.schema.json",
291
+ "action": "omit",
292
+ "reason": "Selected together with CTO_CHECKLIST.yml, which is omitted.",
293
+ "decided_by": "claude-code (bootstrap questionnaire)",
294
+ "decided_at": "2026-10-07T04:04:09Z"
295
+ }
296
+ ],
297
+ "template_roots": {
298
+ "canonical": ".sdd/templates/repo-standards"
299
+ },
300
+ "repo_skills_root": ".sdd/skills",
301
+ "contract_index_path": "docs/architecture.md"
302
+ },
303
+ "substrate": {
304
+ "source": "WebexTools/repo-standards@d89a7fe59126ae3ad9bac9ca352aa7f12b4c85dc",
305
+ "consumed": [
306
+ "@webex/eslint-config-legacy and ESLint through package.json scripts",
307
+ "@webex/babel-config-legacy via babel.config.js",
308
+ "@webex/jest-config-legacy via jest.config.js",
309
+ "@webex/legacy-tools build and test runner via package.json",
310
+ "package README.md"
311
+ ],
312
+ "compliance_tier": "baseline"
313
+ },
314
+ "section_profiles": {
315
+ "repo": {
316
+ "owns_datastore": false,
317
+ "holds_client_state": true,
318
+ "components_interact": true,
319
+ "domain_data_across_components": false,
320
+ "caches_data": true,
321
+ "observability_convention": true,
322
+ "deploys_to_infra": false,
323
+ "shared_base_libs": false,
324
+ "is_monorepo": false,
325
+ "multi_platform": true,
326
+ "published_package": true,
327
+ "embedded_in_host": false,
328
+ "cross_repo_deps_material": false,
329
+ "security_arch_warranted": false,
330
+ "exposes_commands_or_artifacts": false
331
+ },
332
+ "resolved_by": "claude-code/claude-sonnet-5-5 (host metadata; bootstrap questionnaire)",
333
+ "resolved_at": "2026-10-07T04:04:09Z"
334
+ }
335
+ }
package/AGENTS.md ADDED
@@ -0,0 +1,181 @@
1
+ <!-- sdd-generated-metadata
2
+ doc_kind: agent-entry
3
+ generated_from: agents@0.3.0
4
+ generated_by: claude-code
5
+ approved_by: riag@cisco.com
6
+ updated_at: 2026-10-07T15:08:52Z
7
+ validation_status: pass
8
+ -->
9
+
10
+ # AI Agent Instructions
11
+
12
+ Instructions for AI coding assistants working in `@webex/internal-plugin-device`, a package of the Webex JS SDK
13
+ monorepo. The monorepo root has its own `AGENTS.md`; this file adds the package-specific rules and does not replace it.
14
+
15
+ ## Working Method
16
+
17
+ - Read the relevant repository files before editing. Do not edit blind.
18
+ - Understand the task and affected surfaces before writing code.
19
+ - Prefer focused edits over rewriting whole files.
20
+ - Do not invent commands, paths, exports, or behavior. Verify them from repository-local source.
21
+ - Test or validate before declaring done.
22
+ - Keep output concise. If something is uncertain, say so instead of guessing.
23
+
24
+ ## Canonical Repository Documentation
25
+
26
+ Before changing code or documentation, start with:
27
+
28
+ - [`docs/index.md`](docs/index.md) for repository documentation navigation;
29
+ - [`docs/architecture.md`](docs/architecture.md) for repository boundaries and interactions;
30
+ - [`docs/specs/README.md`](docs/specs/README.md) for the manifest-backed module and contract registry;
31
+ - the affected module's manifest-routed spec, [`src/docs/README.md`](src/docs/README.md); and
32
+ - [`docs/adr/index.md`](docs/adr/index.md) plus applicable concrete ADRs for durable decisions.
33
+
34
+ Follow `.sdd/manifest.json` for each contract's publication state and canonical source. This package owns no
35
+ HTTP API: its published surface is the npm package declared in `package.json`, and its other contracts are
36
+ internal. The manifest remains authoritative for canonical paths and artifact decisions.
37
+
38
+ ## 1. Commands (Run First)
39
+
40
+ Use only documented commands. Do not invent alternatives when a command is missing. Run them from the monorepo root.
41
+
42
+ | Task | Command |
43
+ | ---------------------- | ---------------------------------------------------------- |
44
+ | Install dependencies | Not defined in this package; installed by the monorepo root workspace |
45
+ | Start dev environment | Not applicable: a library with no process to start |
46
+ | Run tests | `yarn workspace @webex/internal-plugin-device test:unit` |
47
+ | Run linters | `yarn workspace @webex/internal-plugin-device test:style` |
48
+ | Build/release artifact | `yarn workspace @webex/internal-plugin-device build:src` |
49
+ | Format code | Not defined in this package (Prettier is a dev dependency without a script) |
50
+
51
+ If a required command is unknown, stop and ask for the exact command.
52
+
53
+ ## 2. Agent Persona and Scope
54
+
55
+ You are the Webex JS SDK engineering assistant for `@webex/internal-plugin-device`.
56
+
57
+ Primary outcomes:
58
+
59
+ - Deliver production-safe changes with passing tests.
60
+ - Preserve existing behavior unless a change request explicitly requires a behavior change.
61
+ - Keep docs and configuration aligned with code changes.
62
+
63
+ Definition of done:
64
+
65
+ 1. Requested change is implemented.
66
+ 2. Relevant tests/lint/build checks pass locally.
67
+ 3. Updated docs/config cover new behavior, including the module spec when a requirement, invariant, or failure mode changes.
68
+ 4. PR summary includes risks and rollback notes.
69
+
70
+ ## 3. Repository Knowledge
71
+
72
+ ### Tech Stack
73
+
74
+ | Area | Tooling | Version |
75
+ | ---------------- | ----------------------------------------------- | ---------------------------------------------------- |
76
+ | Language runtime | Node.js, browser | `>=18` (`engines` in `package.json`) |
77
+ | Build tool | `@webex/legacy-tools` (`webex-legacy-tools build`) | Workspace-pinned |
78
+ | Test framework | Jest (unit), Mocha through Karma (integration), Sinon, Chai | Jest workspace-pinned; Sinon `^9.2.4`; Chai `^4.3.4` |
79
+ | Lint/format | ESLint, Prettier | `^8.24.0`, `^2.7.1` |
80
+
81
+ ### Project Map
82
+
83
+ - `src/`: plugin source (`device.js`, `index.js`, `config.js`, `constants.js`, `types.ts`, `ipNetworkDetector.ts`)
84
+ - `src/features/`: feature toggle models
85
+ - `src/interceptors/`: the `cisco-device-url` request interceptor
86
+ - `src/docs/README.md`: the canonical module specification
87
+ - `test/unit/spec/` and `test/integration/spec/`: unit and integration tests
88
+ - `docs/`: package architecture, getting started, registry, and ADRs
89
+ - `.sdd/manifest.json`: machine-readable SDD manifest; `.repo-context.json`: operational context for agents
90
+
91
+ ### Critical Constraints
92
+
93
+ - Other SDK packages read `webex.internal.device` property and event names directly; renaming one is a breaking change.
94
+ - Never attach `cisco-device-url` to `idbroker`, `oauth`, or `saml` requests, and never store `services` or `serviceHostMap` on the device.
95
+ - The package is an internal plugin: semantic versioning is not strictly followed, but dependent packages in the monorepo still break on API changes.
96
+
97
+ ## 4. Testing Workflow
98
+
99
+ Run checks in this order:
100
+
101
+ 1. `yarn workspace @webex/internal-plugin-device test:unit`
102
+ 2. `yarn workspace @webex/internal-plugin-device test:style`
103
+ 3. `yarn workspace @webex/internal-plugin-device test:browser` when integration behavior changes (needs provisioned Webex test users)
104
+
105
+ Testing rules:
106
+
107
+ - Add or update tests for every behavior change.
108
+ - Cover failure paths and edge cases, not only happy paths.
109
+ - Do not remove tests to make CI pass.
110
+
111
+ ## 5. Code Style and Patterns
112
+
113
+ Coding expectations:
114
+
115
+ - Follow repository style rules and static analysis output.
116
+ - Prefer small, composable functions over large procedural blocks.
117
+ - Make error handling explicit at system boundaries.
118
+ - Keep public interfaces stable unless a breaking change is requested.
119
+ - Before adding a literal path, filename, command, workflow identifier, status,
120
+ or other policy value, search the repository for exact and semantically
121
+ equivalent uses. When repeated production values represent one shared
122
+ contract, move them to the narrowest owning shared module or catalog as one
123
+ canonical named constant, enum, or type and update consumers. Keep incidental
124
+ similarities, one-off implementation details, and independent test fixtures
125
+ local.
126
+ - Do not import a default, named, object, or namespace binding and immediately
127
+ re-export it. Consumers should import from the owning module; package barrels
128
+ should use direct named re-exports.
129
+ - Do not write inline runtime `typeof` checks outside descriptively named guard
130
+ implementations. Import and reuse the owning guard instead; TypeScript
131
+ type-position `typeof` queries remain allowed.
132
+ - Write Ampersand `derived` functions as methods, not arrow functions, and keep `@waitForValue('@')` on methods that need loaded persisted state.
133
+
134
+ Pattern example:
135
+
136
+ ```text
137
+ Preferred:
138
+ - Validate external input close to the boundary.
139
+ - Return typed/structured results.
140
+ - Include actionable error messages.
141
+
142
+ Avoid:
143
+ - Passing unvalidated payloads deep into the system.
144
+ - Swallowing exceptions or returning ambiguous null values.
145
+ ```
146
+
147
+ ## 6. Git Workflow
148
+
149
+ - Branch naming: follow the monorepo root conventions; this package defines none of its own.
150
+ - Commit format: conventional commits (`feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`), as enforced by the monorepo root commit lint configuration.
151
+ - Keep commits focused and reversible.
152
+ - Rebase on the target branch before opening PR.
153
+
154
+ PR checklist:
155
+
156
+ - What changed and why.
157
+ - Tests run and results.
158
+ - Risk/impact areas.
159
+ - Rollback approach.
160
+
161
+ ## 7. Boundaries and Escalation
162
+
163
+ ### Always
164
+
165
+ - Prefer existing patterns over introducing new architecture.
166
+ - Keep changes minimal for the requested scope.
167
+ - Call out assumptions and unknowns explicitly.
168
+
169
+ ### Ask First
170
+
171
+ - Adding new dependencies or external services.
172
+ - Large refactors or schema migrations.
173
+ - Security-sensitive changes (auth, encryption, secrets handling).
174
+ - Any destructive data or infrastructure operation.
175
+
176
+ ### Never
177
+
178
+ - Commit secrets, keys, or credentials.
179
+ - Bypass required checks by disabling tests or linters.
180
+ - Rewrite history on shared branches.
181
+ - Change unrelated files "while here" without clear need.
package/dist/device.js CHANGED
@@ -951,7 +951,7 @@ var Device = _webexCore.WebexPlugin.extend((_dec = (0, _webexCore.waitForValue)(
951
951
  _this10.resetLogoutTimer();
952
952
  });
953
953
  } /* eslint-enable require-jsdoc */,
954
- version: "3.12.0-next.54"
954
+ version: "3.12.0-next.55"
955
955
  }, (0, _applyDecoratedDescriptor2.default)(_obj, "refresh", [_common.oneFlight, _dec], (0, _getOwnPropertyDescriptor.default)(_obj, "refresh"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "register", [_dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "register"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "_registerInternal", [_common.oneFlight, _dec3], (0, _getOwnPropertyDescriptor.default)(_obj, "_registerInternal"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "unregister", [_common.oneFlight, _dec4], (0, _getOwnPropertyDescriptor.default)(_obj, "unregister"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "markUrlFailedAndGetNew", [_dec5], (0, _getOwnPropertyDescriptor.default)(_obj, "markUrlFailedAndGetNew"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "initialize", [_dec6], (0, _getOwnPropertyDescriptor.default)(_obj, "initialize"), _obj), _obj));
956
956
  var _default = exports.default = Device;
957
957
  //# sourceMappingURL=device.js.map
@@ -225,7 +225,7 @@ var IpNetworkDetector = _webexCore.WebexPlugin.extend({
225
225
  }, _callee2, null, [[2,, 4, 5]]);
226
226
  }))();
227
227
  },
228
- version: "3.12.0-next.54"
228
+ version: "3.12.0-next.55"
229
229
  });
230
230
  var _default = exports.default = IpNetworkDetector;
231
231
  //# sourceMappingURL=ipNetworkDetector.js.map
@@ -0,0 +1,28 @@
1
+ <!-- sdd-generated-metadata
2
+ doc_kind: standing-doc
3
+ generated_from: adr-index@0.3.0
4
+ generated_by: claude-code
5
+ approved_by: riag@cisco.com
6
+ updated_at: 2026-10-07T15:08:52Z
7
+ validation_status: pass
8
+ -->
9
+
10
+ # Architectural decision records
11
+
12
+ Numbered, append-only records of structural decisions affecting this package
13
+ and its documentation. Add a concrete ADR (for example, `0001-cache-policy.md`) when a decision
14
+ is non-obvious, hard to reverse, or worth explaining to a future contributor.
15
+ Do not edit an accepted decision in place when its outcome changes; supersede it
16
+ with a new ADR and link both records.
17
+
18
+ ## Index
19
+
20
+ No architectural decisions are registered yet. Decisions that the code implies but no record explains (for
21
+ example, the cleanup-then-retry policy for excessive registrations) need their rationale confirmed by the package
22
+ owners before an ADR is written; this generation deliberately did not invent one.
23
+
24
+ Add new entries as ADRs are accepted. Keep this list in numeric order.
25
+
26
+ Each ADR should state its context, decision, alternatives, consequences, and
27
+ the condition that would cause the team to revisit it. Record the deciders,
28
+ any superseded decision, and the constraint future changes must preserve.