Runbook
Troubleshooting extension publishing, tokens, and asset delivery.
Publishing Issues
400 on Publish
Symptoms: Publish request rejected
Cause: Invalid slug, version, file path, or bundle size
Resolution:
# Run with dry-run to see validation errors
scrm extension publish --tenant acme-corp --dry-runCommon issues:
- Slug contains special characters (use
a-z0-9-only) - Version not semver (use
1.0.0format) - Bundle exceeds size limit
409 on Publish
Symptoms: Version already exists error
Cause: Extension versions are immutable
Resolution:
# Publish new version
scrm extension publish --tenant acme-corp --version 1.0.1Checksum Mismatch
Symptoms: Upload fails with checksum error
Cause: Bundle contents changed after checksum computed
Resolution:
# Rebuild and re-publish
pnpm build
scrm extension publish --tenant acme-corpAsset Issues
404 on Assets
Symptoms: Extension loads but assets fail to load
Diagnosis:
- Check GCS object exists
- Verify installation is active
- Confirm path matches
Resolution:
# List objects in GCS bucket
gsutil ls gs://{bucket}/org_123/dashboard/1.0.0/403 on Assets
Symptoms: Permission denied on assets
Cause: GCS permissions or service account issue
Resolution:
- Verify service account has bucket access
- Check bucket policy
Token Issues
Token Request Fails
Symptoms: Extension cannot get token
Cause:
EXTENSION_TOKEN_SECRETmismatch- No active installation
Diagnosis:
# Check server logs
grep "ExtensionToken" server.logResolution:
- Verify
EXTENSION_TOKEN_SECRETmatches between services - Confirm extension is installed and active
Signature Invalid
Symptoms: "Signature Invalid" error
Cause: Secret mismatch
Resolution:
# Verify secrets match
echo $EXTENSION_TOKEN_SECRET # Should match in all servicesProduction Issues
Works Locally, Not Production
Symptoms: Extension works in dev but not prod
Cause: GCS credentials misconfigured
Resolution:
# Verify environment
echo $EXTENSION_GCS_BUCKET
echo $EXTENSION_GCS_PROJECT_ID
echo $EXTENSION_GCS_KEY_FILEDebug Commands
# List extensions for org
GET /api/extensions?org=acme-corp
# Check installation status
GET /api/extensions/{slug}/installation?org=acme-corp
# View audit logs
GET /api/audit-logs?type=EXTENSION_PUBLISH