|
<!doctype html> |
|
<html lang="zh-Hant"> |
|
<head> |
|
<meta charset="utf-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|
<title>PLS Dispatcher Preflight Contract</title> |
|
<style> |
|
body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#f8fafc;color:#152033;line-height:1.5} |
|
header{background:#101828;color:white;padding:30px clamp(18px,4vw,50px)} |
|
main{padding:24px clamp(16px,4vw,50px) 46px} |
|
h1,h2,h3{margin:0;line-height:1.2} h1{font-size:clamp(28px,5vw,48px);max-width:1100px} h2{font-size:22px;margin-bottom:12px} |
|
header p{max-width:1050px;color:#d9e2ef;margin:10px 0 0} |
|
.grid{display:grid;grid-template-columns:repeat(12,1fr);gap:14px;margin-bottom:22px} |
|
.card{background:white;border:1px solid #d8e0e8;border-radius:8px;padding:16px;box-shadow:0 1px 2px rgba(16,24,40,.04)} |
|
.span-3{grid-column:span 3}.span-4{grid-column:span 4}.span-6{grid-column:span 6}.span-8{grid-column:span 8}.span-12{grid-column:span 12} |
|
.metric{font-size:31px;font-weight:760;margin:5px 0 2px}.muted{color:#617080} |
|
table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 8px;border-bottom:1px solid #d8e0e8;vertical-align:top}th{font-size:12px;color:#617080;text-transform:uppercase} |
|
.tag{display:inline-flex;min-height:24px;align-items:center;padding:2px 8px;border-radius:999px;border:1px solid currentColor;font-size:12px;font-weight:720;margin:2px 4px 2px 0}.green{color:#0f766e}.blue{color:#1d4ed8}.amber{color:#9a5b00}.red{color:#b42318} |
|
code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}pre{background:#eef3f7;border-radius:8px;padding:12px;overflow:auto} |
|
.line-draft{white-space:pre-wrap;background:#eff6ff;border:1px solid #bfd7ff;border-radius:8px;padding:14px} |
|
@media(max-width:960px){.span-3,.span-4,.span-6,.span-8{grid-column:span 12}} |
|
</style> |
|
</head> |
|
<body> |
|
<header> |
|
<h1>PLS Dispatcher Preflight Contract</h1> |
|
<p>針對「產出第一版客戶拜訪腳本」反覆被 dispatch 的問題,本成果定義 dispatcher 在建立 production job 前必跑的 preflight contract。它把同一 signal 從「重複生成」改成「查 registry、判 gate、派缺口」。</p> |
|
</header> |
|
<main> |
|
<section class="grid"> |
|
<div class="card span-3"><h3>D1</h3><div class="metric green">Preflight</div><p class="muted">同 action 先查 registry。</p></div> |
|
<div class="card span-3"><h3>D7</h3><div class="metric blue">Route</div><p class="muted">缺什麼派什麼。</p></div> |
|
<div class="card span-3"><h3>D14</h3><div class="metric amber">Close</div><p class="muted">達 gate 才關閉並派提案。</p></div> |
|
<div class="card span-3"><h3>D30</h3><div class="metric">Score</div><p class="muted">追 duplicate_job_rate。</p></div> |
|
</section> |
|
<section class="grid"> |
|
<div class="card span-8"> |
|
<h2>Routing Contract</h2> |
|
<table> |
|
<thead><tr><th>Preflight Result</th><th>條件</th><th>下一步</th></tr></thead> |
|
<tbody> |
|
<tr><td><span class="tag green">close_ready</span></td><td>usable artifact + accept + >=2 visit events + case safe</td><td>不要建 production job;標 close_ready/completed,派 proposal module。</td></tr> |
|
<tr><td><span class="tag amber">need_adoption_review</span></td><td>有 artifacts,但沒有 accept/revise/evidence_gap</td><td>派產品負責人回覆,due 2026-05-25 18:00。</td></tr> |
|
<tr><td><span class="tag blue">need_visit_evidence</span></td><td>accept 但 visit events 少於 2</td><td>派客成補 2 筆 mock/real visit evidence。</td></tr> |
|
<tr><td><span class="tag red">case_blocked</span></td><td>外部案例權限 unknown/blocked</td><td>派案例授權;外部 proposal blocked。</td></tr> |
|
<tr><td><span class="tag red">allowed_build</span></td><td>registry 沒有 usable script/closure/adoption artifact</td><td>才允許建立 production build job。</td></tr> |
|
</tbody> |
|
</table> |
|
</div> |
|
<div class="card span-4"> |
|
<h2>Purpose-to-Purpose E2E</h2> |
|
<p>原始目的:客戶拜訪腳本被採用並提升提案轉換。產出物:dispatcher preflight。人採用:PLS 先判 gate;產品/客成只處理缺口。指標改善:duplicate_job_rate 降為 0、close latency 降低、proposal module 更快產出。</p> |
|
</div> |
|
</section> |
|
<section class="grid"> |
|
<div class="card span-6"> |
|
<h2>Preflight Payload</h2> |
|
<pre>{ |
|
"project_id": "b3138a2e-6641-4cc1-859d-8b1d0abf2d3b", |
|
"action_item_id": "76890f66-704c-4bc5-a9e6-e22b0c98da97", |
|
"signal": "action_overdue", |
|
"required_registry_kinds": ["script", "closure_gate", "adoption_ledger", "loop_breaker"], |
|
"gate": { |
|
"adoption_review": "accept|revise|evidence_gap|none", |
|
"visit_event_count": 0, |
|
"case_scope": "safe|blocked|unknown" |
|
} |
|
}</pre> |
|
</div> |
|
<div class="card span-6"> |
|
<h2>people_sync</h2> |
|
<div class="line-draft">LINE 草稿: |
|
PLS 已補上客戶拜訪腳本 dispatcher preflight。下一次同一 overdue signal 進來時,不會先建立 production job,而會先查 registry 與 gate: |
|
accept+2證據+case safe → 關閉並派提案; |
|
缺 review → 追產品; |
|
缺 evidence → 追客成; |
|
case blocked → 追授權; |
|
真的沒有 usable artifact 才重建。</div> |
|
</div> |
|
</section> |
|
</main> |
|
</body> |
|
</html> |