# NexusCRM HubSpot Acceptance Guide

This repository is the single source of truth for PingCAP NexusCRM HubSpot
acceptance cases and their runner. It is a QA/release-evidence boundary outside
the L0/L1/L2 runtime release topology.

## Authority

- `config/cases/hubspot/**`, `config/roles.json`, runner behavior, catalog
  validation, and reports belong here.
- `pingcap-inc/nexuscrm-pingcap-pack` owns L2 metadata, source contracts,
  deployment topology, target preparation, signed release/BOM identity, and
  live environment secrets.
- `NEXUSCRM_L2_ROOT` is the only supported source-backed dependency path.

## Test contract

- Pull requests run only unit, catalog, and dry-run checks.
- Live HubSpot calls must be manually selected and limited to the declared
  `staging`, `test1`, `test2`, or `test3` target.
- Before any HubSpot mutation, verify `accountType=SANDBOX` and the exact
  expected portal ID. Fail closed when the identity is absent or mismatched.
- Zero executed live cases is a failure. Optional/BLOCKED cases remain distinct
  from PASS and FAIL.
- Preserve `report.json` and `report.md`; every report must carry target,
  repository SHA, catalog digest, suite selection, and terminal counts.

## Required checks

```bash
npm test --prefix runner
node scripts/validate-catalog.mjs
```

Run a full provider-free discovery for every target before publishing a change
that touches target selection, roles, cases, or runner defaults.
