Given fewer than 2 completed visits,
when the Router scores the account,
then next_route=people_sync for 墨宇產品負責人.
Expected evidence: route reason says need_2_completed_visits.
Given fewer than 5 pain-scene records, when scoring runs, then proposal generation is blocked.
Expected evidence: route reason says need_5_pain_scenes.
Given any row has case_boundary=needs_approval,
when proposal generation is requested,
then next_route=ceo_review.
Expected evidence: no external proposal artifact is generated.
Given visit_count >= 2, pain_scene_count >= 5, proof_needed complete, success_metric complete, and case_boundary complete,
when scoring runs,
then readiness_score >= 80 and next_route=proposal_brief.
Expected evidence: PLS can dispatch proposal brief v1.
Given visit-evidence-intake.csv,
when imported through POST /api/proposal-readiness/import,
then invalid rows are rejected with field-level errors and valid rows are scored.
Expected evidence: accepted/rejected row count and route output.
- HTML Router is the primary artifact.
learning-memory.jsonparses as JSON.- Gist URL returns HTTP 200.
- Gist file list includes all required files.
- PLS upload-files returns uploaded count.