poolcoach / app /drills.json
masterdanh's picture
deploy: snapshot for HF Space
78738de
Raw
History Blame Contribute Delete
4.86 kB
{
"note": "Thu vien drill CHUAN HE THONG - file JSON trong repo, KHONG phai bang `drills` trong DB (BRIEF 04/08/2026 buoc 1, khac design FullVision S7 CO CHU DICH): Space khong co Postgres van phai demo duoc F3 (degraded mode la cong dan hang nhat), con bang `drills` do tenant/HLV soan thuoc BRIEF sau khi co auth/roles. API /api/drills doc file nay; FE khong fetch truc tiep.",
"schema": "FullVision S5.3: drill = (layout, goal, scoring). `reps` de top-level theo BRIEF 04/08. Toa do MET, he pooltool (goc goc duoi-trai, y doc chieu dai ban 0.9906 x 1.9812). cue_zone dung dung he toa do ban cua engine.",
"pocket_ids": "goal.pot.pocket = 'any' hoac INDEX lo trong env_h._pockets (quy uoc san co - PocketOut.index cua API): 0 goc duoi-trai, 1 giua-trai, 2 goc tren-trai, 3 goc duoi-phai, 4 giua-phai, 5 goc tren-phai.",
"verified_by": "scripts/verify_drills.py - quet grid 11 ky thuat x luc 2-10 cua engine (v2_specs), dem cu dat tron goal. Curation, KHONG phai eval (tien le 11b ban giao 9). Sua layout/zone la phai quet lai.",
"drills": [
{
"id": "stop_shot_short",
"title": "Stop shot ngắn — lỗ giữa",
"tags": ["stop"],
"reps": 5,
"layout": {
"cue": { "x": 0.252, "y": 0.9906 },
"1": { "x": 0.7091, "y": 0.9906 }
},
"goal": {
"pot": { "ball": "1", "pocket": "any" },
"cue_zone": { "cx": 0.652, "cy": 0.9906, "r": 0.15 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "stop_shot_long",
"title": "Stop shot dài — lỗ góc",
"tags": ["stop"],
"reps": 5,
"layout": {
"cue": { "x": 0.5185, "y": 0.6521 },
"1": { "x": 0.85, "y": 1.55 }
},
"goal": {
"pot": { "ball": "1", "pocket": 5 },
"cue_zone": { "cx": 0.8302, "cy": 1.4964, "r": 0.15 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "follow_1",
"title": "Follow — bi cái theo 0.3 m",
"tags": ["follow"],
"reps": 5,
"layout": {
"cue": { "x": 0.5392, "y": 0.8343 },
"1": { "x": 0.75, "y": 1.35 }
},
"goal": {
"pot": { "ball": "1", "pocket": 5 },
"cue_zone": { "cx": 0.8419, "cy": 1.5748, "r": 0.15 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "draw_1",
"title": "Draw nhẹ — kéo về 0.3 m",
"tags": ["draw", "khó"],
"reps": 5,
"layout": {
"cue": { "x": 0.8572, "y": 0.9906 },
"1": { "x": 0.35, "y": 0.9906 }
},
"goal": {
"pot": { "ball": "1", "pocket": 1 },
"cue_zone": { "cx": 0.7072, "cy": 0.9906, "r": 0.15 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "draw_2",
"title": "Draw sâu — kéo về 0.5 m",
"tags": ["draw"],
"reps": 5,
"layout": {
"cue": { "x": 0.7121, "y": 1.0126 },
"1": { "x": 0.35, "y": 1.5 }
},
"goal": {
"pot": { "ball": "1", "pocket": 2 },
"cue_zone": { "cx": 0.6823, "cy": 1.0528, "r": 0.15 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "cut_30_center",
"title": "Cắt 30° — về giữa bàn",
"tags": ["cut", "position"],
"reps": 5,
"layout": {
"cue": { "x": 0.1088, "y": 1.3295 },
"1": { "x": 0.7, "y": 1.6 }
},
"goal": {
"pot": { "ball": "1", "pocket": 5 },
"cue_zone": { "cx": 0.4953, "cy": 0.9906, "r": 0.2 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "cut_45_center",
"title": "Cắt 45° — về giữa bàn",
"tags": ["cut", "position"],
"reps": 5,
"layout": {
"cue": { "x": 0.7046, "y": 1.2364 },
"1": { "x": 0.62, "y": 0.55 }
},
"goal": {
"pot": { "ball": "1", "pocket": 3 },
"cue_zone": { "cx": 0.4953, "cy": 0.9906, "r": 0.2 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "rail_long",
"title": "Pot dọc băng dài",
"tags": ["rail"],
"reps": 5,
"layout": {
"cue": { "x": 0.8, "y": 1.3 },
"1": { "x": 0.9406, "y": 0.75 }
},
"goal": {
"pot": { "ball": "1", "pocket": 3 },
"cue_zone": { "cx": 0.62, "cy": 0.65, "r": 0.25 }
},
"scoring": { "pass": "pot && cue_zone" }
},
{
"id": "position_1rail",
"title": "Điều bi 1 băng về giữa bàn",
"tags": ["position", "rail", "khó"],
"reps": 5,
"layout": {
"cue": { "x": 0.62, "y": 1.2 },
"1": { "x": 0.25, "y": 1.75 }
},
"goal": {
"pot": { "ball": "1", "pocket": 2 },
"cue_zone": { "cx": 0.4953, "cy": 0.9906, "r": 0.2 }
},
"scoring": { "pass": "pot && cue_zone" }
}
]
}