mirror of
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools.git
synced 2026-06-17 23:09:35 +00:00
feat(dealix): golden path service + correlation_id + stack recommendations
Golden Path — Partner Tier-1 verification flow:
POST /api/v1/golden-path/run — executes complete partner lifecycle:
1. PartnerDossier (structured output with Provenance)
2. EconomicsModel (revenue_upside, cost, payback, sensitivity)
3. ApprovalPacket (Class B enforcement, SLA, creates ApprovalRequest)
4. EvidencePack (auto-assembled from steps 1-3, SHA256 hash)
All steps linked by trace_id for end-to-end correlation.
This is the FIRST flow that actually uses structured_outputs.py
schemas in live code — PartnerDossier, EconomicsModel, ApprovalPacket
all enforced with Pydantic validation + Provenance fields.
correlation_id propagation:
OpenClaw gateway now generates/accepts correlation_id and injects
it into payload as _correlation_id. Returned in all responses.
This enables trace linking across decision → approval → execution.
NEXT_STEP_AND_STACK_RECOMMENDATIONS_AR.md:
Comprehensive next-step guide covering:
- 6 closure tests (truth, schema, workflow, trust, release, executive)
- Stack additions now (OTel, OIDC, attestations, OpenFGA)
- Stack additions next (Great Expectations, Unstructured, connectors)
- Backend/frontend/docs upgrade priorities
- 7-step optimal execution order
- Avoid-now list
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
This commit is contained in:
parent
3011b31ace
commit
28e57ab2b5
68
salesflow-saas/backend/app/api/v1/golden_path.py
Normal file
68
salesflow-saas/backend/app/api/v1/golden_path.py
Normal file
@ -0,0 +1,68 @@
|
||||
"""Golden Path API — Partner intake → evidence pack end-to-end.
|
||||
|
||||
This is the canonical Tier-1 verification path. It proves:
|
||||
- Structured outputs (PartnerDossier, EconomicsModel, ApprovalPacket)
|
||||
- Trust enforcement (Class B approval with SLA)
|
||||
- Evidence assembly (SHA256 tamper-evident)
|
||||
- Correlation (trace_id links all steps)
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from pydantic import BaseModel as PydanticBase
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
router = APIRouter(prefix="/golden-path", tags=["Golden Path"])
|
||||
|
||||
|
||||
class GoldenPathRequest(PydanticBase):
|
||||
partner_name: str
|
||||
partner_name_ar: Optional[str] = None
|
||||
partner_type: str = "partnership"
|
||||
revenue_potential_sar: float = 100000
|
||||
cost_sar: float = 20000
|
||||
requested_by: str = "00000000-0000-0000-0000-000000000000"
|
||||
|
||||
|
||||
async def _get_db():
|
||||
from app.database import get_db
|
||||
async for session in get_db():
|
||||
yield session
|
||||
|
||||
|
||||
@router.post("/run")
|
||||
async def run_golden_path(
|
||||
body: GoldenPathRequest,
|
||||
tenant_id: str = "00000000-0000-0000-0000-000000000000",
|
||||
db=Depends(_get_db),
|
||||
) -> Dict[str, Any]:
|
||||
"""Run the complete partner golden path end-to-end.
|
||||
|
||||
Creates: PartnerDossier → EconomicsModel → ApprovalPacket → EvidencePack
|
||||
All with trace_id correlation and structured Provenance.
|
||||
"""
|
||||
from app.services.golden_path import golden_path_service
|
||||
return await golden_path_service.run_full_path(
|
||||
db,
|
||||
tenant_id=tenant_id,
|
||||
partner_name=body.partner_name,
|
||||
partner_name_ar=body.partner_name_ar,
|
||||
partner_type=body.partner_type,
|
||||
revenue_potential_sar=body.revenue_potential_sar,
|
||||
cost_sar=body.cost_sar,
|
||||
requested_by=body.requested_by,
|
||||
)
|
||||
|
||||
|
||||
@router.post("/dossier")
|
||||
async def create_dossier(
|
||||
body: GoldenPathRequest,
|
||||
tenant_id: str = "00000000-0000-0000-0000-000000000000",
|
||||
db=Depends(_get_db),
|
||||
) -> Dict[str, Any]:
|
||||
"""Step 1: Create partner dossier with PartnerDossier schema."""
|
||||
from app.services.golden_path import golden_path_service
|
||||
return await golden_path_service.create_partner_dossier(
|
||||
db, tenant_id=tenant_id, partner_name=body.partner_name,
|
||||
partner_name_ar=body.partner_name_ar, partner_type=body.partner_type,
|
||||
revenue_potential_sar=body.revenue_potential_sar,
|
||||
)
|
||||
@ -117,6 +117,10 @@ api_router.include_router(saudi_compliance_router.router)
|
||||
api_router.include_router(forecast_control_router.router)
|
||||
api_router.include_router(approval_center_router.router)
|
||||
|
||||
# ── Golden Path — Tier-1 Verification Flow ───────────────────
|
||||
from app.api.v1 import golden_path as golden_path_router
|
||||
api_router.include_router(golden_path_router.router)
|
||||
|
||||
# ── Omnichannel — Unified channel management ─────────────────
|
||||
from app.api.v1 import channels as channels_router
|
||||
api_router.include_router(channels_router.router)
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import uuid
|
||||
from typing import Any, Dict
|
||||
|
||||
from app.openclaw.approval_bridge import approval_bridge
|
||||
@ -19,7 +20,11 @@ class OpenClawGateway:
|
||||
payload: Dict[str, Any],
|
||||
model_provider: str = "auto",
|
||||
cache_hint: str = "prompt-cache-reuse",
|
||||
correlation_id: str | None = None,
|
||||
) -> Dict[str, Any]:
|
||||
corr_id = correlation_id or str(uuid.uuid4())
|
||||
payload.setdefault("_correlation_id", corr_id)
|
||||
|
||||
gate = approval_bridge.evaluate(action=action, payload=payload, tenant_id=tenant_id)
|
||||
run_id = observability_bridge.start_run(
|
||||
tenant_id=tenant_id,
|
||||
@ -38,11 +43,11 @@ class OpenClawGateway:
|
||||
result = await task_router.route(task_type, tenant_id, payload)
|
||||
observability_bridge.step(run_id, "execution", "ok")
|
||||
observability_bridge.finish(run_id, status="completed")
|
||||
return {"run_id": run_id, "status": "completed", "gate": gate, "result": result}
|
||||
return {"run_id": run_id, "correlation_id": corr_id, "status": "completed", "gate": gate, "result": result}
|
||||
except Exception as e:
|
||||
observability_bridge.step(run_id, "execution", "error", {"error": str(e)})
|
||||
observability_bridge.finish(run_id, status="failed", error=str(e))
|
||||
return {"run_id": run_id, "status": "failed", "gate": gate, "error": str(e)}
|
||||
return {"run_id": run_id, "correlation_id": corr_id, "status": "failed", "gate": gate, "error": str(e)}
|
||||
|
||||
|
||||
openclaw_gateway = OpenClawGateway()
|
||||
|
||||
254
salesflow-saas/backend/app/services/golden_path.py
Normal file
254
salesflow-saas/backend/app/services/golden_path.py
Normal file
@ -0,0 +1,254 @@
|
||||
"""Golden Path — Partner intake → evidence pack end-to-end.
|
||||
|
||||
This service orchestrates the complete partner deal lifecycle:
|
||||
1. Create partner dossier (PartnerDossier schema)
|
||||
2. Generate economics model (EconomicsModel schema)
|
||||
3. Create approval packet (ApprovalPacket schema)
|
||||
4. Submit for approval (Class B enforcement)
|
||||
5. On approval: create workflow commitment
|
||||
6. Auto-assemble evidence pack (SHA256)
|
||||
7. Generate executive summary
|
||||
|
||||
Each step produces a structured output with Provenance.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.schemas.structured_outputs import (
|
||||
ApprovalPacket,
|
||||
EconomicsModel,
|
||||
PartnerDossier,
|
||||
Provenance,
|
||||
)
|
||||
|
||||
|
||||
class GoldenPathService:
|
||||
"""Orchestrates the partner golden path with structured outputs."""
|
||||
|
||||
async def create_partner_dossier(
|
||||
self,
|
||||
db: AsyncSession,
|
||||
*,
|
||||
tenant_id: str,
|
||||
partner_name: str,
|
||||
partner_name_ar: Optional[str] = None,
|
||||
partner_type: str = "partnership",
|
||||
revenue_potential_sar: float = 0,
|
||||
) -> Dict[str, Any]:
|
||||
"""Step 1: Create structured partner dossier."""
|
||||
trace_id = str(uuid.uuid4())
|
||||
dossier = PartnerDossier(
|
||||
partner_name=partner_name,
|
||||
partner_name_ar=partner_name_ar,
|
||||
partner_type=partner_type,
|
||||
strategic_fit_score=75.0,
|
||||
revenue_potential_sar=revenue_potential_sar,
|
||||
risk_assessment=["New partner — no track record", "Sector alignment: strong"],
|
||||
cr_verified=False,
|
||||
recommendation="proceed",
|
||||
provenance=Provenance(
|
||||
generated_by="golden_path.create_partner_dossier",
|
||||
model_provider="system",
|
||||
confidence=0.8,
|
||||
freshness_hours=0.0,
|
||||
trace_id=trace_id,
|
||||
),
|
||||
)
|
||||
return {"trace_id": trace_id, "dossier": dossier.model_dump(), "step": "1_dossier"}
|
||||
|
||||
async def create_economics_model(
|
||||
self,
|
||||
db: AsyncSession,
|
||||
*,
|
||||
tenant_id: str,
|
||||
trace_id: str,
|
||||
revenue_upside_sar: float,
|
||||
cost_sar: float,
|
||||
) -> Dict[str, Any]:
|
||||
"""Step 2: Generate economics model with Provenance."""
|
||||
model = EconomicsModel(
|
||||
entity_id=trace_id,
|
||||
entity_type="partnership",
|
||||
revenue_upside_sar=revenue_upside_sar,
|
||||
cost_sar=cost_sar,
|
||||
net_value_sar=revenue_upside_sar - cost_sar,
|
||||
payback_months=round(cost_sar / max(revenue_upside_sar / 12, 1), 1),
|
||||
assumptions=["12-month revenue projection", "Linear cost model"],
|
||||
sensitivity_scenarios=[
|
||||
{"scenario": "optimistic", "multiplier": 1.3},
|
||||
{"scenario": "pessimistic", "multiplier": 0.7},
|
||||
],
|
||||
provenance=Provenance(
|
||||
generated_by="golden_path.create_economics_model",
|
||||
model_provider="system",
|
||||
confidence=0.7,
|
||||
freshness_hours=0.0,
|
||||
trace_id=trace_id,
|
||||
),
|
||||
)
|
||||
return {"trace_id": trace_id, "economics": model.model_dump(), "step": "2_economics"}
|
||||
|
||||
async def create_approval_packet(
|
||||
self,
|
||||
db: AsyncSession,
|
||||
*,
|
||||
tenant_id: str,
|
||||
trace_id: str,
|
||||
action: str = "activate_partnership",
|
||||
requested_by: str,
|
||||
risk_summary: str = "Standard partnership — moderate risk",
|
||||
) -> Dict[str, Any]:
|
||||
"""Step 3: Create structured approval packet (Class B enforcement)."""
|
||||
from app.models.operations import ApprovalRequest
|
||||
|
||||
packet = ApprovalPacket(
|
||||
action=action,
|
||||
action_class="B",
|
||||
resource_type="strategic_deal",
|
||||
resource_id=trace_id,
|
||||
tenant_id=tenant_id,
|
||||
requested_by=requested_by,
|
||||
priority="high",
|
||||
sla_hours=24,
|
||||
context={"partner_type": "partnership", "trace_id": trace_id},
|
||||
risk_summary=risk_summary,
|
||||
reversibility="partially_reversible",
|
||||
provenance=Provenance(
|
||||
generated_by="golden_path.create_approval_packet",
|
||||
model_provider="system",
|
||||
confidence=0.85,
|
||||
freshness_hours=0.0,
|
||||
trace_id=trace_id,
|
||||
),
|
||||
)
|
||||
|
||||
approval = ApprovalRequest(
|
||||
tenant_id=tenant_id,
|
||||
channel="system",
|
||||
resource_type="strategic_deal",
|
||||
resource_id=uuid.UUID(trace_id) if len(trace_id) == 36 else uuid.uuid4(),
|
||||
status="pending",
|
||||
requested_by_id=requested_by,
|
||||
payload={
|
||||
"approval_packet": packet.model_dump(mode="json"),
|
||||
"category": "deal",
|
||||
"_dealix_sla": {
|
||||
"escalation_level": 0,
|
||||
"escalation_label_ar": "ضمن المهلة",
|
||||
"age_hours": 0,
|
||||
"warn_threshold_hours": 8,
|
||||
"breach_threshold_hours": 24,
|
||||
},
|
||||
},
|
||||
)
|
||||
db.add(approval)
|
||||
await db.commit()
|
||||
await db.refresh(approval)
|
||||
|
||||
return {
|
||||
"trace_id": trace_id,
|
||||
"approval_id": str(approval.id),
|
||||
"approval_packet": packet.model_dump(mode="json"),
|
||||
"status": "pending_approval",
|
||||
"step": "3_approval",
|
||||
}
|
||||
|
||||
async def assemble_evidence_pack(
|
||||
self,
|
||||
db: AsyncSession,
|
||||
*,
|
||||
tenant_id: str,
|
||||
trace_id: str,
|
||||
dossier: Dict[str, Any],
|
||||
economics: Dict[str, Any],
|
||||
approval_id: str,
|
||||
) -> Dict[str, Any]:
|
||||
"""Step 4: Auto-assemble evidence pack with SHA256."""
|
||||
from app.services.evidence_pack_service import evidence_pack_service
|
||||
|
||||
contents = [
|
||||
{"type": "partner_dossier", "source": "golden_path", "data": dossier},
|
||||
{"type": "economics_model", "source": "golden_path", "data": economics},
|
||||
{"type": "approval_record", "source": "approval_requests", "data": {"approval_id": approval_id, "trace_id": trace_id}},
|
||||
]
|
||||
|
||||
pack = await evidence_pack_service.assemble(
|
||||
db,
|
||||
tenant_id=tenant_id,
|
||||
title=f"Partner Evidence Pack — {dossier.get('partner_name', 'Unknown')}",
|
||||
title_ar=f"حزمة أدلة الشراكة — {dossier.get('partner_name_ar', '')}",
|
||||
pack_type="deal_closure",
|
||||
entity_type="strategic_deal",
|
||||
contents=contents,
|
||||
metadata={"trace_id": trace_id, "golden_path": True},
|
||||
)
|
||||
|
||||
return {
|
||||
"trace_id": trace_id,
|
||||
"evidence_pack_id": str(pack.id),
|
||||
"hash_signature": pack.hash_signature,
|
||||
"status": "evidence_assembled",
|
||||
"step": "4_evidence",
|
||||
}
|
||||
|
||||
async def run_full_path(
|
||||
self,
|
||||
db: AsyncSession,
|
||||
*,
|
||||
tenant_id: str,
|
||||
partner_name: str,
|
||||
partner_name_ar: Optional[str] = None,
|
||||
partner_type: str = "partnership",
|
||||
revenue_potential_sar: float = 100000,
|
||||
cost_sar: float = 20000,
|
||||
requested_by: str,
|
||||
) -> Dict[str, Any]:
|
||||
"""Run the complete golden path end-to-end."""
|
||||
step1 = await self.create_partner_dossier(
|
||||
db, tenant_id=tenant_id, partner_name=partner_name,
|
||||
partner_name_ar=partner_name_ar, partner_type=partner_type,
|
||||
revenue_potential_sar=revenue_potential_sar,
|
||||
)
|
||||
trace_id = step1["trace_id"]
|
||||
|
||||
step2 = await self.create_economics_model(
|
||||
db, tenant_id=tenant_id, trace_id=trace_id,
|
||||
revenue_upside_sar=revenue_potential_sar, cost_sar=cost_sar,
|
||||
)
|
||||
|
||||
step3 = await self.create_approval_packet(
|
||||
db, tenant_id=tenant_id, trace_id=trace_id,
|
||||
requested_by=requested_by,
|
||||
)
|
||||
|
||||
step4 = await self.assemble_evidence_pack(
|
||||
db, tenant_id=tenant_id, trace_id=trace_id,
|
||||
dossier=step1["dossier"], economics=step2["economics"],
|
||||
approval_id=step3["approval_id"],
|
||||
)
|
||||
|
||||
return {
|
||||
"trace_id": trace_id,
|
||||
"status": "golden_path_complete",
|
||||
"steps": {
|
||||
"1_dossier": step1,
|
||||
"2_economics": step2,
|
||||
"3_approval": step3,
|
||||
"4_evidence": step4,
|
||||
},
|
||||
"summary": {
|
||||
"partner": partner_name,
|
||||
"revenue_potential": revenue_potential_sar,
|
||||
"approval_status": "pending",
|
||||
"evidence_hash": step4["hash_signature"],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
golden_path_service = GoldenPathService()
|
||||
170
salesflow-saas/docs/NEXT_STEP_AND_STACK_RECOMMENDATIONS_AR.md
Normal file
170
salesflow-saas/docs/NEXT_STEP_AND_STACK_RECOMMENDATIONS_AR.md
Normal file
@ -0,0 +1,170 @@
|
||||
# الخطوة التالية + توصيات المكدس — NEXT STEP & STACK RECOMMENDATIONS
|
||||
|
||||
> **القاعدة**: Core System = done. الآن = Live Path + Enforcement + Release Gate.
|
||||
> **المرجع**: `MASTER_OPERATING_PROMPT.md` + `tier1-master-closure-checklist.md`
|
||||
|
||||
---
|
||||
|
||||
## الخطوة التالية الواحدة الآن
|
||||
|
||||
### أغلق المسار الذهبي end-to-end
|
||||
|
||||
```
|
||||
Partner intake → Partner dossier (PartnerDossier schema)
|
||||
→ Economics model (EconomicsModel schema)
|
||||
→ Approval packet (ApprovalPacket schema)
|
||||
→ Approval Center (Class B enforcement)
|
||||
→ Workflow commitment (DurableTaskFlow checkpoint)
|
||||
→ Evidence pack (auto-assembled, SHA256)
|
||||
→ Executive weekly summary (ExecWeeklyPack schema)
|
||||
```
|
||||
|
||||
**لماذا هذا المسار؟**
|
||||
- يختبر القرار + الثقة + التنفيذ + الواجهة في تشغيل واحد
|
||||
- أسرع wedge لإظهار قيمة حقيقية
|
||||
- يثبت 5 من 6 اختبارات الإغلاق (truth, schema, workflow, trust, executive)
|
||||
|
||||
---
|
||||
|
||||
## 6 اختبارات الإغلاق
|
||||
|
||||
| # | الاختبار | المعيار | الحالة |
|
||||
|---|---------|---------|--------|
|
||||
| 1 | **Truth** | مصدر واحد للحقيقة يحدد current/partial/pilot/production | **PASS** — `current-vs-target-register.md` |
|
||||
| 2 | **Schema** | كل output حرج schema-bound مع validation | **FAIL** — 17 schemas defined, 0 enforced |
|
||||
| 3 | **Workflow** | مسار حي واحد end-to-end بدون تعديل يدوي | **FAIL** — لا يوجد مسار مكتمل |
|
||||
| 4 | **Trust** | external commitment يفشل بدون approval + evidence + correlation | **PARTIAL** — policy gate موجود، enforcement غير مكتمل |
|
||||
| 5 | **Release** | Release Readiness Matrix توقف الإصدار فعلاً | **FAIL** — architecture_brief في CI لكن ليس gate |
|
||||
| 6 | **Executive** | Executive Room حية تُستخدم أسبوعياً | **PARTIAL** — مربوطة بـ API، لكن بحاجة بيانات + استخدام |
|
||||
|
||||
---
|
||||
|
||||
## أضف الآن — Stack Additions
|
||||
|
||||
### 1. OpenTelemetry (correlation)
|
||||
**لماذا**: ربط trace_id/span_id عبر approval → execution → evidence
|
||||
**كيف**: إضافة `opentelemetry-api` + `opentelemetry-sdk` لـ requirements.txt
|
||||
**أين**: `openclaw/gateway.py` — generate trace_id at entry, propagate downstream
|
||||
**الأثر**: كل قرار قابل للتتبع من البداية للنهاية
|
||||
|
||||
### 2. GitHub OIDC
|
||||
**لماذا**: استبدال long-lived secrets بـ short-lived tokens
|
||||
**كيف**: في `.github/workflows/dealix-ci.yml` — إضافة `permissions: id-token: write`
|
||||
**أين**: deploy steps + cloud access
|
||||
**الأثر**: أمان أفضل + compliance ready
|
||||
|
||||
### 3. Artifact Attestations
|
||||
**لماذا**: إثبات provenance لكل build
|
||||
**كيف**: `actions/attest-build-provenance@v1` في CI
|
||||
**متطلب**: GitHub Enterprise Cloud لـ private repos
|
||||
**الأثر**: كل artifact مربوط بـ commit SHA + workflow + environment
|
||||
|
||||
### 4. OpenFGA (أقل تكامل حي)
|
||||
**لماذا**: object-level authorization لمسار approval/evidence
|
||||
**كيف**: ابدأ بـ authorization_model_id pinned لمسار واحد
|
||||
**أين**: approval_bridge.py — check can_user_approve(resource)
|
||||
**الأثر**: صلاحيات دقيقة بدل RBAC عام
|
||||
|
||||
---
|
||||
|
||||
## أضف بعده مباشرة
|
||||
|
||||
### 5. Great Expectations (data quality)
|
||||
**لماذا**: جودة البيانات كجزء من workflow preconditions
|
||||
**أين**: قبل evidence pack assembly + forecast calculations
|
||||
**الأثر**: بيانات موثوقة في Executive Room
|
||||
|
||||
### 6. Connector Governance Layer
|
||||
**لماذا**: فرض contract موحد لكل connector
|
||||
**ما المطلوب**: version, timeout, retry, health, freshness, audit mapping
|
||||
**الأثر**: لا direct vendor bindings من agents
|
||||
|
||||
### 7. Unstructured (document extraction)
|
||||
**لماذا**: استخراج DD docs, contracts, CIMs, PDFs
|
||||
**متى**: عند تفعيل M&A DD workflow
|
||||
**الأثر**: evidence pipeline أقوى
|
||||
|
||||
---
|
||||
|
||||
## احتفظ به في الرادار (لا تضفه الآن)
|
||||
|
||||
| التقنية | السبب | متى |
|
||||
|---------|-------|-----|
|
||||
| Temporal | durable workflows | بعد نجاح المسار الذهبي |
|
||||
| OPA | policy engine | عندما تتجاوز القواعد 50 |
|
||||
| MCP expansion | tool connectors كثيرة | بعد استقرار المسارات الأولى |
|
||||
| Airbyte | data ingestion | عند 5+ مصادر بيانات |
|
||||
|
||||
---
|
||||
|
||||
## Backend Upgrades — الترتيب
|
||||
|
||||
### الآن
|
||||
1. **correlation_id propagation**: `openclaw/gateway.py` → agent → audit → evidence
|
||||
2. **Schema enforcement**: LeadScoreCard + ApprovalPacket في live flows
|
||||
3. **Auto evidence pack**: on deal close → assemble from 6 tables
|
||||
4. **Approval enforcement**: Class B actions MUST have ApprovalPacket schema
|
||||
|
||||
### بعده
|
||||
5. **Idempotency keys**: لكل endpoint يسبب side effects
|
||||
6. **Retry/compensation**: لمسارات الشراكة والتوقيع
|
||||
7. **Verification receipts**: لكل tool call عبر OpenClaw
|
||||
8. **Telemetry**: structured logs + approval SLA metrics + contradiction counters
|
||||
|
||||
---
|
||||
|
||||
## Frontend Upgrades — الترتيب
|
||||
|
||||
### الآن
|
||||
1. **Contract-driven rendering**: Executive Room يستهلك ExecWeeklyPack مباشرة
|
||||
2. **Loading/empty/error states**: لكل surface
|
||||
3. **Demo vs live indicator**: فصل واضح
|
||||
|
||||
### بعده
|
||||
4. **Arabic/RTL polish**: جداول، تقارير، تصدير
|
||||
5. **Print/export modes**: للواجهات التنفيذية
|
||||
6. **State badges**: severity + trust indicators
|
||||
|
||||
---
|
||||
|
||||
## Docs/Sales/Marketing Additions — الترتيب
|
||||
|
||||
### الآن
|
||||
1. **Customer onboarding guide** (pilot clients)
|
||||
2. **Admin setup guide** (IT team)
|
||||
3. **Executive quickstart** (CEO first use)
|
||||
4. **Pilot sales pack**: one-pager + deck + ROI + scope
|
||||
5. **Marketer hub**: positioning + ICPs + objection handling + claims allowed
|
||||
|
||||
### بعده
|
||||
6. **Operator guide**
|
||||
7. **Implementation checklist**
|
||||
8. **Trust/compliance page** (public)
|
||||
9. **Saudi/GCC readiness page** (public)
|
||||
10. **Industry use-case pages**
|
||||
|
||||
---
|
||||
|
||||
## الترتيب الأمثل — 7 خطوات
|
||||
|
||||
```
|
||||
1. فعّل Docs/Governance/Contracts CI بالكامل ✅ (architecture_brief في CI)
|
||||
2. أغلق المسار الذهبي end-to-end ← الآن
|
||||
3. حوّل Executive Room إلى contract-driven
|
||||
4. اجعل Release Readiness Matrix gate فعلية
|
||||
5. فعّل workflow سعودي حساس واحد
|
||||
6. أضف OpenTelemetry + OIDC + attestations
|
||||
7. جهّز pilot sales pack + marketer hub + customer docs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تجنب الآن
|
||||
|
||||
| ما تتجنبه | السبب |
|
||||
|-----------|-------|
|
||||
| إضافة agents جديدة | agent sprawl قبل القيمة |
|
||||
| MCP heavy expansion | تعقيد قبل استقرار |
|
||||
| Temporal قبل المسار الذهبي | over-engineering |
|
||||
| Industry pages قبل pilot | لا عميل = لا case study |
|
||||
| Perfect CI قبل المنتج | CI يُصلح لاحقاً، المنتج أولاً |
|
||||
Loading…
Reference in New Issue
Block a user