mobile-platform-offline-validate
forcedotcom/sf-skills
Static analyzer for Lightning Web Component mobile offline compatibility and Komaci priming validation.
What is mobile-platform-offline-validate?
Validates Lightning Web Components for offline compatibility with Salesforce Mobile App Plus and Field Service Mobile App using the Komaci static analyzer. Detects violations in inline GraphQL queries, conditional rendering directives, and ESLint rule compliance, then produces actionable code-level fixes.
- Analyzes inline GraphQL queries in @wire configurations for offline priming compliance
- Validates lwc:if/lwc:elseif/lwc:else directives against mobile offline rendering requirements
- Runs Komaci ESLint analyzer to detect private wire properties, non-local reactive references, and getter side-effects
- Produces structured findings with exact line/column locations and code snippets
- Generates remediation guidance citing specific reviewer references
- Groups violations by category (GraphQL, conditionals, ESLint rules) with actionable fixes
How to install mobile-platform-offline-validate
npx skills add https://github.com/forcedotcom/sf-skills --skill mobile-platform-offline-validate- Component path (LWC bundle under modules/)
- Access to component JS/TS and HTML template files
- Local Node.js and npm installation
- @salesforce/eslint-plugin-lwc-graph-analyzer plugin installed and resolvable
How to use mobile-platform-offline-validate
- 1.Identify the target LWC bundle (.html, .js/.ts files)
- 2.Read the Mobile Offline Grounding and per-reviewer references (Inline GraphQL, lwc:if, Komaci ESLint)
- 3.Walk HTML templates and apply lwc:if/lwc:elseif/lwc:else rules, emitting findings with exact if:true/if:false rewrites
- 4.Scan JS/TS files for @wire directives with inline gql template literals and extract to getters
- 5.Run the Komaci ESLint analyzer using scripts/run-komaci.sh or manual npx eslint invocation
- 6.Group ESLint findings by ruleId and look up remediations in the Komaci ESLint Reviewer reference
- 7.Produce a structured report with findings grouped by reviewer, including file location, description, intent analysis, and suggested actions
- 8.Apply fixes directly or defer conflicts with non-offline behavior to the deferred list
Use cases
- Pre-flight validation before shipping an LWC to Salesforce Mobile App Plus offline mode
- Investigating offline priming failures reported by the mobile platform analyzer
- Auditing existing components for Komaci compliance before Field Service Mobile App deployment
- Extracting inline GraphQL queries to getters to enable offline data graph priming
- Converting lwc:if conditional logic to if:true/if:false for offline compatibility
- Salesforce developers building components for mobile offline scenarios
- Mobile app architects validating component readiness for Field Service Mobile App
- Teams shipping Lightning Web Components to Salesforce Mobile App Plus
- Developers remediating offline priming audit failures
mobile-platform-offline-validate FAQ
Use this skill only for mobile offline compatibility and Komaci priming validation. For generic LWC code review, security, RTL, or accessibility concerns, use the appropriate domain-specific skill.
Install @salesforce/eslint-plugin-lwc-graph-analyzer in your workspace, or provide a pinned local install path. The plugin is the canonical source of Komaci rules and must be resolvable for the analyzer to run.
The lwc:if Reviewer reference provides exact nesting patterns to preserve lwc:elseif and lwc:else semantics when rewriting to if:true/if:false. Follow those patterns exactly in your remediation.
Surface the conflict in the deferred list with a reason rather than silently rewriting. This allows the developer to decide whether to prioritize offline compatibility or preserve existing behavior.
The processor uses HTML templates to resolve the offline data graph and detect violations that span both templates and JS. Ensure matching HTML files are discoverable next to the JS file being analyzed.
Full instructions (SKILL.md)
Source of truth, from forcedotcom/sf-skills.
name: mobile-platform-offline-validate
description: "Review a Lightning Web Component for mobile offline compatibility — the Komaci offline static analyzer that pre-primes the data graph for Salesforce Mobile App Plus and Field Service Mobile App. Produces a finding list with code-level fixes covering inline GraphQL queries in @wire configurations, modern lwc:if / lwc:elseif / lwc:else directives, and Komaci ESLint rule violations (private wire properties, non-local reactive references, getter side-effects). Use when the user asks for a "mobile offline review", "Komaci check", "offline priming audit", "offline priming failure", or "offline data graph error", or to validate an LWC against the @salesforce/eslint-plugin-lwc-graph-analyzer recommended ruleset. Do not use for generic LWC code review (use an appropriate domain review skill) or for building LWCs with native mobile capabilities (use mobile-platform-native-capabilities-integrate)."
metadata:
version: "1.0"
domains: ["Mobile"]
relatedSkills:
- "mobile-platform-native-capabilities-integrate"
cliTools:
- tool: ["eslint"]
semver: ">=8.0.0"
- tool: ["npm"]
semver: ">=9.0.0"
- tool: ["npx"]
semver: ">=9.0.0"
Reviewing LWC Mobile Offline
Run a structured offline-priming compliance pass over a Lightning Web Component, producing a report of issues found and code-level fixes to bring the component into compliance with Komaci's static analysis requirements for the Salesforce Mobile App Plus and Field Service Mobile App.
When to Use
- The user asks for a "mobile offline review", "Komaci check", or "offline priming audit" on a specific LWC.
- Preparing a component to ship in Salesforce Mobile App Plus or Field Service Mobile App offline mode.
- Investigating priming failures reported by the offline analyzer.
Do NOT use this skill for:
- Building an LWC that uses native mobile capabilities (barcode scanner,
biometrics, location, etc.) — use
mobile-platform-native-capabilities-integrate. - Generic LWC code review — use the appropriate domain skill
(
reviewing-lws-security,reviewing-lwc-rtl,accessibility-code-review).
Prerequisites
- Component path (LWC bundle under
modules/…). - Access to the component's JS/TS and HTML templates.
- Local Node + npm; ability to run
npx eslintwith the@salesforce/eslint-plugin-lwc-graph-analyzerplugin.
Knowledge Base
Mobile Offline Grounding explains the three violation categories and why each blocks offline priming. Read it before judging. The per-reviewer references below are the source of truth for the rules and remediations:
- Inline GraphQL wire configuration: Inline GraphQL Reviewer
lwc:ifconditional rendering compatibility: lwc:if Reviewer- Komaci ESLint static analysis: Komaci ESLint Reviewer
Workflow
Step 1 — Scope the review
Identify the component bundle: .html, .js/.ts. CSS and meta files are
not in scope for offline priming. If the bundle has multiple HTML
templates, all are reviewed.
Step 2 — Read the grounding and per-reviewer references
Read Mobile Offline Grounding and the three per-reviewer references end-to-end before judging. Cite the specific reviewer when emitting each finding so the report is auditable.
Step 3 — lwc:if / lwc:elseif / lwc:else (HTML)
Walk every .html file in the bundle and apply the rules in
lwc:if Reviewer. For each occurrence of
lwc:if={…}, lwc:elseif={…}, or lwc:else, emit a finding with the
exact if:true / if:false rewrite — including the nesting required to
preserve lwc:elseif and lwc:else semantics.
Step 4 — Inline GraphQL in @wire (JS)
Walk every .js/.ts file in the bundle and apply the rules in
Inline GraphQL Reviewer. For each @wire
that references a gql template literal directly (or via a top-level
constant), emit a finding that names a concrete getter and shows the
rewritten @wire configuration.
Step 5 — Komaci ESLint pass (JS)
Run the Komaci ESLint analyzer over the bundle's JS file using the
bundled script. It applies the
@salesforce/eslint-plugin-lwc-graph-analyzer recommended ruleset with
the bundleAnalyzer processor enabled.
scripts/run-komaci.sh path/to/component.js
The script requires @salesforce/eslint-plugin-lwc-graph-analyzer to
be resolvable from the working directory, and the component's sibling
HTML templates must live next to the JS file (the plugin's
bundleAnalyzer processor uses them to resolve the offline data
graph). Output is ESLint --format json on stdout.
For each messages[*] entry in the output, group by ruleId and look
up the per-rule remediation in
Komaci ESLint Reviewer. Emit a finding
per (rule, line) pair with the exact remediation text from the
reference; do not invent new advice. See the reference for the manual
npx eslint ... invocation if the script is unavailable in the runtime
environment.
Step 6 — Produce the report
Emit a report in this shape:
## Mobile Offline (Komaci priming)
- <reviewer> — <file>:<startLine>:<startColumn>-<endLine>:<endColumn> — <type>
Description: <verbatim from the reviewer reference>
Intent analysis: <verbatim from the reviewer reference>
Suggested action: <verbatim from the reviewer reference>
Code: |
<source snippet from startLine through endLine, optional but
recommended when the violation spans multiple lines>
Applied: yes/no
## Summary
- <n> issues found; <m> fixed; <k> deferred (with reason)
For Komaci ESLint findings, take startLine/startColumn/endLine/
endColumn from the ESLint message's line/column/endLine/endColumn.
For Inline GraphQL and lwc:if findings, supply the line/column range you
observed in the source. If endLine/endColumn are not available for a
finding, fall back to <file>:<startLine> and omit the trailing range.
Cite the reviewer (Inline GraphQL / lwc:if / Komaci ESLint rule id) on every finding.
Step 7 — Apply fixes
Apply the remediations directly when the user asked for fixes. If a
remediation conflicts with the component's behavior outside offline (e.g.
the developer relies on lwc:elseif for readability and the user is not
yet shipping to mobile offline), surface the conflict in the deferred list
rather than silently rewriting.
Verification Checklist
- Every
lwc:if/lwc:elseif/lwc:elseflagged or absent. - Every
@wirereferencinggqlchecked; inline queries extracted to a getter. - Komaci ESLint analyzer was actually run; findings cite real rule ids, not invented ones.
- Each finding cites the originating reviewer or rule id.
- No remediation outside the three categories above (other concerns belong to other skills).
Troubleshooting
npx eslintcannot find the plugin — install@salesforce/eslint-plugin-lwc-graph-analyzerin the workspace, or use a pinned local install path. The plugin is the canonical source of Komaci rules.bundleAnalyzerrelated errors — the recommended config drives the bundle processor; do not strip it. The processor expects sibling HTML files to be discoverable. If running on a stripped-down JS file, supply the matching HTML in the temp directory.- No findings for a component you expect to fail — confirm the
recommended ruleset is applied (not just
bundleAnalyzerwith empty rules). Some rules require the HTML to be present alongside the JS. - Findings duplicate
lwc:iffrom the dedicated reviewer — the Komaci plugin does not check templates; thelwc:ifcheck is HTML-only and comes from Step 3. Findings from Step 5 are JS-only.
Related skills
More from forcedotcom/sf-skills and the wider catalog.

modeling-omnistudio-epc-catalog
Model Salesforce Industries EPC product bundles, attributes, and offer metadata with DataPack JSON templates.

observing-agentforce
Analyze production Agentforce agent behavior using session traces and Data Cloud.

omnistudio-callable-apex-generate
Generate and review System.Callable Apex for Salesforce Industries OmniStudio extensions with 120-point validation.

omnistudio-datamapper-generate
Create and validate OmniStudio Data Mappers (Extract, Transform, Load, Turbo Extract) with 100-point scoring.

omnistudio-datapacks-deploy
Automate Salesforce OmniStudio DataPack deployment, validation, and retry workflows using Vlocity Build.

omnistudio-dependencies-analyze
Analyze OmniStudio dependencies, detect namespaces, and visualize component impact across your org.