inapp-framework

Maintains the In-App Learning framework integration for Revenue Cloud Foundations builds.

5|3|Updated Sep 9, 2026
One-click install
npx skills add https://github.com/SalesforceLabs/revenue-cloud-foundations --skill inapp-framework-salesforcelabs
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: inapp-framework
Source: https://github.com/SalesforceLabs/revenue-cloud-foundations/tree/main/.cursor/skills/inapp-framework
Command: npx skills add https://github.com/SalesforceLabs/revenue-cloud-foundations --skill inapp-framework-salesforcelabs

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Maintaining the In-App Learning integration in Revenue Cloud Foundations requires coordinating a legacy SQL-to-SFDMU converter, per-release content remaps, strict RLM_Learning_* naming conventions, and deploy/reload/verify workflows, where mistakes like hand-editing CSVs or trusting SPA HTTP statuses silently corrupt data. ## Core Features & Use Cases - Converter-driven data pipeline: Edit convert_from_legacy.py and regenerate SFDMU v5 CSVs instead of hand-editing RLM_Learning_*.csv files, keeping the converter as the single source of truth. - Per-release content updates: Remap Help, dev-guide, release-notes, and Trailhead IDs grounded against docs/salesforce/{release}/ snapshots, with reliable link verification beyond curl status codes. - Deploy, reload, and verify workflow: Run prepare_inapp or deploy plus load_inapp_dataset, then confirm the SectionBlockController returns resolved data and the Learning Home renders in a browser. - Use Case: When bumping learning content to a new Salesforce release, add renamed article IDs to the remap dicts, regenerate the dataset, validate with the SFDMU v5 scripts, reload a scratch org, and render-check the Learning Home. ## Quick Start Ask the agent to update the inapp learning content for the new release by editing the converter remap dicts, regenerating the dataset, validating it, and verifying the Learning Home on a scratch org.

Frequently Asked Questions about inapp-framework

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I update In-App Learning content for a new Salesforce release?

Add renamed Help, dev-guide, and release-notes IDs to the converter's HELP_ID_REMAP, DEVGUIDE_ID_REMAP, and RN_ID_REMAP dicts, verifying each target exists in docs/salesforce/{release}/. Then regenerate the CSVs, validate the dataset, reload the org, and render-check the Learning Home.

How do I regenerate the SFDMU learning dataset after changes?

Edit datasets/sfdmu/inapp/convert_from_legacy.py and re-run it to regenerate the RLM_Learning_*.csv files; never hand-edit the CSVs. Re-running is idempotent, and you must then pass the SFDMU v5 validation and plan-README consistency scripts.

Why does the SectionBlock junction use Insert instead of Upsert in SFDMU?

The junction's composite-traversal externalId never matches on re-Upsert due to an SFDMU bug, so Upsert silently doubles junction records. It uses operation Insert with deleteOldData: true, which keeps reloads idempotent.

Can I validate Salesforce Help and Trailhead links with curl status codes?

No. Help, dev-guide, Trailhead, and YouTube are SPAs that return HTTP 200 for dead pages, so curl status is unreliable. Cross-check IDs against the local docs snapshot, render the page title, or use YouTube oembed instead.

Why did deleting an unused-looking LWC break the Learning framework?

QuickActions reference LWCs via lightningWebComponent tags, which flexipage and import-graph reachability checks miss. Grep quickActions for lightningWebComponent references before deleting any LWC.

What naming convention does the In-App Learning integration use?

Objects, fields, tabs, flexipages, the app, permset, and Apex use the RLM_Learning_* prefix, while LWCs use rlmLearning* camelCase. The CCI flag and task names stay as inapp, and static images use block-name slugs.