system-prompts-and-models-o.../salesflow-saas/backend/app/api/v1/golden_path.py
Claude 28e57ab2b5
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
2026-04-17 05:59:32 +00:00

69 lines
2.3 KiB
Python

"""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,
)