152 lines
5.9 KiB
JSON
152 lines
5.9 KiB
JSON
{
|
|
"schemaVersion": "1.0",
|
|
"id": "product-core",
|
|
"title": "Product Core CRM SaaS",
|
|
"classification": "core",
|
|
"status": "active",
|
|
"owner": "product-core",
|
|
"description": "Versioned Product Core contract for the default CRM SaaS showcase and retained product modules.",
|
|
"rationale": [
|
|
"The default product is a CRM SaaS rather than an empty minimal shell.",
|
|
"Product modules are governed by versioned blueprints and entitlement gates instead of undocumented plugin-candidate assumptions.",
|
|
"Runtime access must resolve through blueprint, plan, custom plan, tenant override, and tenant-owned role permissions."
|
|
],
|
|
"codeAreas": [
|
|
"packages/entitlements/src/blueprints.ts",
|
|
"packages/entitlements/src/product-access.ts",
|
|
"packages/entitlements/src/plans.ts",
|
|
"apps/web/app/modules/crm",
|
|
"apps/web/app/modules/emailMarketing",
|
|
"apps/web/app/modules/knowledgeBase",
|
|
"apps/web/app/modules/helpDesk",
|
|
"apps/web/app/modules/workflowEngine",
|
|
"apps/web/app/modules/ai-gen",
|
|
"apps/web/app/modules/mcp",
|
|
"apps/web/app/modules/templates/defaultEntityTemplates.ts"
|
|
],
|
|
"dependencies": [
|
|
"core",
|
|
"auth-tenancy",
|
|
"billing",
|
|
"transactional-mail",
|
|
"rows-entities-runtime"
|
|
],
|
|
"consumers": [
|
|
"admin-app-shell",
|
|
"billing"
|
|
],
|
|
"integration": {
|
|
"ownership": "hybrid",
|
|
"surfaces": {
|
|
"adminRoutes": [
|
|
"Admin Center remains the operator toolbox for Product Core configuration and diagnostics."
|
|
],
|
|
"tenantRoutes": [
|
|
"Tenant CRM, support, KB, marketing, workflow and customization surfaces are enabled only through the CRM SaaS blueprint and entitlement decision."
|
|
],
|
|
"publicRoutes": [
|
|
"Public Product Core surfaces are limited to documented knowledge-base reads and auth/billing entrypoints."
|
|
],
|
|
"apiRoutes": [
|
|
"/v1/usage",
|
|
"/v1/support/inbound-email",
|
|
"Product Core API routes must evaluate blueprint and plan gates before tenant data access."
|
|
]
|
|
},
|
|
"configuration": {
|
|
"admin": [
|
|
"Blueprint version selection, custom plans, tenant overrides, provider diagnostics and plan catalog."
|
|
],
|
|
"tenant": [
|
|
"Tenant-owned role permissions, tenant toggles where the blueprint allows them, tenant workflow and KB settings."
|
|
],
|
|
"environment": [
|
|
"APP_BASE_DOMAIN",
|
|
"WEB_APP_HOST",
|
|
"ADMIN_APP_HOST",
|
|
"API_HOST",
|
|
"BULLMQ_REDIS_URL",
|
|
"CRYPTO_SECRET",
|
|
"MAILJET_WEBHOOK_SECRET",
|
|
"STORAGE_PROVIDER",
|
|
"STORAGE_ENDPOINT",
|
|
"STORAGE_REGION",
|
|
"STORAGE_BUCKET",
|
|
"STORAGE_ACCESS_KEY_ID",
|
|
"STORAGE_SECRET_ACCESS_KEY",
|
|
"STORAGE_LOCAL_ROOT"
|
|
],
|
|
"secrets": [
|
|
"Provider credentials remain platform/admin-owned unless a blueprint explicitly declares tenant-owned credentials."
|
|
]
|
|
},
|
|
"workers": {
|
|
"required": false,
|
|
"queues": [],
|
|
"jobs": [],
|
|
"notes": [
|
|
"Product Core owns entitlement and blueprint access decisions, while workflow, AI, mail, and plugin runtime queue execution is owned by the corresponding feature manifests and worker groups.",
|
|
"Workflow and AI jobs stay behind queue/worker boundaries when the corresponding blueprint and plan gates allow access.",
|
|
"Workflow outbound HTTP blocks must use the shared server-side outbound request guard for URL validation, redirects, timeouts and response-size limits."
|
|
]
|
|
},
|
|
"externalProviders": [
|
|
"stripe",
|
|
"deployment-region-ai-provider",
|
|
"s3-compatible-storage"
|
|
],
|
|
"permissions": [
|
|
"app.dashboard.view",
|
|
"app.settings.roles.set",
|
|
"app.settings.apiKeys.create",
|
|
"admin.pricing.*"
|
|
],
|
|
"auditEvents": [
|
|
"product_core.blueprint.enabled",
|
|
"product_core.tenant_override.updated",
|
|
"product_core.access.denied"
|
|
],
|
|
"billingImpacts": [
|
|
"Starter, Pro and Business plans expose strict CRM SaaS feature limits.",
|
|
"Custom hidden plans and tenant overrides can change effective entitlement decisions without making the plan public."
|
|
],
|
|
"uat": [
|
|
"Starter can use CRM basics, support tickets and KB reads but cannot use API, email marketing, workflow engine or MCP.",
|
|
"Pro can use email marketing, imported lists, CRM-based lists, onboarding, API and AI credits but cannot use workflow engine or MCP.",
|
|
"Business can use workflow engine, advanced builder, high import/export limits and tenant MCP only when the blueprint enables MCP.",
|
|
"A tenant user without the required tenant-owned role permission is denied even when blueprint and plan allow the feature."
|
|
]
|
|
},
|
|
"boundaries": {
|
|
"mustKeep": [
|
|
"Blueprint definitions are versioned code and manifest contracts.",
|
|
"Entitlement decisions compose blueprint, plan, tenant override and tenant-owned role checks.",
|
|
"Admin Center remains operator-owned for configuration and diagnostics."
|
|
],
|
|
"mayMoveToPlugin": [
|
|
"Provider-specific implementation adapters can become plugins after Product Core gates remain intact."
|
|
],
|
|
"mustNotTouch": [
|
|
"Client/UI code must not read secrets or bypass server/package boundaries.",
|
|
"Worker-backed features must not run synchronously in UI request handlers."
|
|
]
|
|
},
|
|
"pruning": {
|
|
"phase": "product-core",
|
|
"action": "keep",
|
|
"notes": [
|
|
"This manifest supersedes the earlier assumption that CRM SaaS product modules are merely plugin candidates for the default product.",
|
|
"Forms, Surveys and Public Forms are excluded from Product Core and covered by the removal manifest."
|
|
]
|
|
},
|
|
"validation": {
|
|
"source": [
|
|
"packages/entitlements/src/blueprints.ts",
|
|
"packages/entitlements/src/product-access.ts",
|
|
"docs/feature-manifests/core.json",
|
|
"docs/feature-manifests/remove-candidates.json"
|
|
],
|
|
"lastReviewed": "2026-05-27"
|
|
}
|
|
}
|