# Data Cloud Community Plugin Setup

The data360-orchestrate family uses a **community `sf data360` CLI runtime**. sf-skills does not vendor or fork that plugin.

## Why this setup exists

- keeps sf-skills focused on skills, prompts, docs, and templates
- lets the upstream runtime continue to evolve independently
- avoids MCP and keeps execution deterministic

## Prerequisites

- Node.js 18+
- yarn
- Salesforce CLI (`sf`)
- git
- a Data Cloud-enabled org authenticated with `sf org login web -a <alias>`

## Recommended setup path

If you use the Python installer, it can install this optional runtime for you:

```bash
python3 ~/.claude/sf-skills-install.py --with-datacloud-runtime
```

Or use the helper script directly:

```bash
bash ../scripts/bootstrap-plugin.sh
```

By default it clones the plugin into `~/.sf-community-tools/datacloud/sf-cli-plugin-data360`, installs dependencies, compiles it, and links it into the local Salesforce CLI.

## Manual setup

```bash
git clone https://github.com/Jaganpro/sf-cli-plugin-data360.git
cd sf-cli-plugin-data360
yarn install
npx tsc
node ../scripts/generate-manifest.mjs .
sf plugins link .
```

## Verification

```bash
sf data360 man
bash ../scripts/verify-plugin.sh
bash ../scripts/verify-plugin.sh myorg
node ../scripts/diagnose-org.mjs -o myorg --json
```

For newer command families such as `sf data360 query hybrid` and recent pagination fixes, update the community runtime to the latest upstream commit by re-running the bootstrap helper.

`sf data360 doctor` is useful, but it is not the only readiness signal. On partially provisioned orgs it can fail even when other read-only Data Cloud commands still work. The helper script treats `doctor` as advisory and falls back to additional smoke checks.

Use `diagnose-org.mjs` when you need phase-specific readiness classification instead of a simple pass/fail check. It helps distinguish:
- empty-but-enabled modules
- feature-gated modules
- query-plane issues
- runtime/auth failures

## Output-noise tip

When using linked community plugins, stderr can include warning noise. For normal usage, prefer:

```bash
sf data360 dmo list --all -o myorg 2>/dev/null
sf data360 segment list -o myorg 2>/dev/null
```

## Troubleshooting

### ESM auto-transpile warning

If you see `Warning: @gthoppae/sf-cli-plugin-data360 is a linked ESM module and cannot be auto-transpiled`, generate the oclif command manifest:

```bash
node ../scripts/generate-manifest.mjs ~/.sf-community-tools/datacloud/sf-cli-plugin-data360
```

This tells oclif to use pre-compiled output directly instead of attempting auto-transpilation. The `npx oclif manifest` alternative may fail on newer Node.js versions due to `@oclif/core` version mismatches.

### Clone error references `gthoppae/sf-cli-plugin-data360`

If the clone failure mentions `gthoppae/sf-cli-plugin-data360`, your local `~/.claude/sf-skills-install.py` copy is outdated. Refresh the installer first, then retry the optional runtime install:

```bash
python3 ~/.claude/sf-skills-install.py --force-update
python3 ~/.claude/sf-skills-install.py --with-datacloud-runtime
```

Or rerun the latest installer directly from GitHub:

```bash
curl -sSL https://raw.githubusercontent.com/Jaganpro/sf-skills/main/tools/install.py | python3 - --with-datacloud-runtime
```

### Plugin not found after install

If `sf` was installed globally (with `sudo`), the default data directory may be root-owned. Set `SF_DATA_DIR` in your shell profile:

```bash
export SF_DATA_DIR="${HOME}/.local/share/sf"
```

Then re-run `sf plugins link .` from the plugin directory, or re-run the bootstrap script.

## What to do if the plugin is missing

1. run the bootstrap script
2. re-open your shell if `sf` plugin discovery is stale
3. verify with `sf data360 man`
4. only then start live Data Cloud work

## Setup guidance reminder

The runtime can help you **detect** missing capability, but it cannot fully replace Setup for:
- initial Data Cloud provisioning / tenant creation
- license assignment
- every org-wide feature enablement step

When a module is gated, guide users toward the right setup area instead of promising a fully programmatic enablement flow. See [feature-readiness.md](feature-readiness.md).

## Scope reminder

This setup is for the Data Cloud product family:
- `data360-orchestrate`
- `data360-connect`
- `data360-prepare`
- `data360-harmonize`
- `data360-segment`
- `data360-activate`
- `data360-query`

For STDM/session tracing/parquet work, use `agentforce-observe` instead of this plugin-focused family.
