> For the complete documentation index, see [llms.txt](https://getsquish.gitbook.io/squish/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://getsquish.gitbook.io/squish/th/reference/stability.md).

# ความเสถียรและการกำหนดเวอร์ชัน

พื้นผิวที่เครื่องอ่านได้ของ Squish ถูกกำหนดเวอร์ชันด้วยสตริงสัญญาแบบชัดเจน **สตริงสัญญา**, ประทับไว้ในทุกเพย์โหลดเป็น `สัญญา` ฟิลด์ ผู้ใช้งานจะอ่านสตริงนี้ — ถ้าตรงกันพอดี แปลว่ารูปแบบคือแบบที่เอกสารนี้ระบุไว้; ถ้าเป็นสตริงที่ไม่คุ้นเคย แปลว่ามีการเปลี่ยนแปลงแบบทำให้ใช้งานต่อไม่ได้เกิดขึ้น และผู้ใช้งานไม่ควรสมมติว่ารูปแบบเดิมยังใช้ได้

## สัญญาทั้ง 3 แบบ

| สตริงสัญญา       | พื้นผิวที่ครอบคลุม                                                           | บันทึกไว้ใน                                                     |
| ---------------- | ---------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `squish-cli-v0`  | อ็อบเจ็กต์ stdout ของ CLI `--json` เพย์โหลด JSON ที่เครื่องมือ MCP ส่งกลับมา | [เอกสารอ้างอิง CLI](/squish/th/reference/cli.md#--json-output)  |
| `squish-mcp-v0`  | (ฟิลด์ของ CLI รวมถึง `squish_video` (ฟิลด์ของ CLI รวมถึง `timecodes[][]`)    | [เอกสารอ้างอิง MCP](/squish/th/reference/mcp.md#result-payload) |
| `squish-http-v0` | การตอบกลับ JSON ของ API ที่โฮสต์ไว้ และ `/healthz` เนื้อหา                   | [เอกสารอ้างอิงของ Hosted API](/squish/th/reference/http-api.md) |

เพย์โหลด MCP จะมีสตริงของตัวเอง — ไม่ใช่ของ CLI — เพราะรูปแบบของมันต่างกัน (`โค้ดเวลา` มีอยู่เฉพาะตรงนั้น) แต่ละพื้นผิวถูกกำหนดเวอร์ชันแยกกัน

## กฎแบบเพิ่มอย่างเดียว

ภายในเวอร์ชันของสัญญาหนึ่ง ๆ การเปลี่ยนแปลงเป็นแบบ **เพิ่มอย่างเดียว**:

* ฟิลด์ใหม่อาจ **ถูกเพิ่ม**.
* ฟิลด์เดิมจะไม่ถูก **เปลี่ยนชื่อ**, **ลบ**, หรือ **เปลี่ยนชนิดข้อมูล**.
* สิ่งใดก็ตามที่ละเมิดข้อข้างต้นถือเป็นการเปลี่ยนแปลงแบบทำให้ใช้งานต่อไม่ได้ และ **จะเพิ่มเวอร์ชันสตริงสัญญา** (เช่น `squish-cli-v0` → `squish-cli-v1`).

สำหรับผู้ใช้งาน หมายความว่า: ให้ละเว้นฟิลด์ที่ไม่รู้จัก และให้ยึด `สัญญา` ค่า เป็นตัวกำหนดการแยกวิเคราะห์ — การจับคู่นี้เข้ากันได้กับทุกรีลีสที่ไม่ทำให้ใช้งานต่อไม่ได้ อย่าเดาโครงสร้างจากหน้าตา ให้แยกวิเคราะห์ `สัญญา`.

## สิ่งที่ถูกตรึง

นอกเหนือจากชุดคีย์ JSON ของสัญญาทั้ง 3 แบบแล้ว พื้นผิวเหล่านี้ถูกตรึงและจะปฏิบัติตามวินัยแบบเพิ่มอย่างเดียวเช่นเดียวกัน:

* **ชื่อเครื่องมือ MCP `squish_video`** — ไคลเอนต์และสกิลของเอเจนต์ผูกกับมันด้วยชื่อ
* **คีย์ JSON** ของแต่ละสัญญา รวมถึงลำดับคีย์ในเพย์โหลดของ CLI/MCP และกฎการมีอยู่แบบมีเงื่อนไขสำหรับ `window` (มีเฉพาะเมื่อมีการขอ window เท่านั้น)
* **รูปแบบชื่อไฟล์** `<basename>.sheet-N.jpg` — ดู [สัญญาชื่อไฟล์](/squish/th/reference/sheet-format.md#filename-contract).
* **ไวยากรณ์ของโค้ดเวลา** — รูปแบบที่ส่งออก `m:ss` / `m:ss.d` / `m:ss.dd` / `m:ss.ddd`, นาทีไม่จำกัด, ปัดลง; และไวยากรณ์อินพุตที่ยอมรับพร้อม [คุณสมบัติการไปกลับ](/squish/th/reference/sheet-format.md#round-trip-property) (ทุกอย่างที่ชีตแสดงถือเป็น `start`/`end` อินพุตที่ถูกต้อง).
* **ความหมายของโค้ดเวลาแบบสัมบูรณ์** — โค้ดเวลาอ้างอิงนาฬิกาของวิดีโอต้นฉบับที่ทุกระดับการซูม; การรันแบบมี window จะไม่กำหนดฐานใหม่ให้มัน
* **ขีดขั้นต่ำที่ระบุแอดเดรสได้ 2 มิลลิวินาทีต่อช่อง** — window ที่ต่ำกว่านั้นจะถูกปฏิเสธด้วยข้อผิดพลาดเชิงสอน ไม่ได้ถูกสร้างออกมาเงียบ ๆ พร้อมแอดเดรสซ้ำ (ดู [ความละเอียดแบบปรับอัตโนมัติ](/squish/th/reference/sheet-format.md#adaptive-precision)).

## สิ่งที่ไม่ครอบคลุม

ไม่มีคำมั่นเรื่องความคงที่สำหรับ:

* **รูปแบบภาพของชีต** — สี ฟอนต์ รูปร่างของป้ายโค้ดเวลา แบรนด์ส่วนท้าย ส่วนหัว/ขอบหน้า ขนาดพิกเซล การตั้งค่าเอนโค้ดเดอร์ JPEG แอดเดรสของชีตเป็นข้อผูกพันตามสัญญา; ส่วน *แอดเดรส* เป็นข้อผูกพันตามสัญญา; ส่วน *หน้าตา* ไม่ใช่
* **ผลลัพธ์ที่มนุษย์อ่านได้ของ CLI** (รันโดยไม่มี `--json`) — ให้แยกวิเคราะห์ JSON ไม่ใช่ข้อความธรรมดา
* **ถ้อยคำของข้อความแสดงข้อผิดพลาด** — เงื่อนไขของข้อผิดพลาด *เงื่อนไข* และหมวดหมู่ของมันถูกบันทึกไว้ใน [CLI](/squish/th/reference/cli.md#usage-errors) และ [MCP](/squish/th/reference/mcp.md#error-behavior) เอกสารอ้างอิง แต่ถ้อยคำที่แน่นอนอาจปรับปรุงได้เมื่อเวลาผ่านไป
* **การทำงานภายใน** — ภายในของเอนจิน โค้ดเรนเดอร์ รายละเอียดการเรียก ffmpeg โครงสร้างไฟล์ชั่วคราว สิ่งใดก็ตามที่ไม่ถูกประทับด้วยสตริงสัญญาหรือไม่ได้อยู่ในรายการข้างต้น ถือเป็นการทำงานภายใน ไม่ใช่อินเทอร์เฟซ

## จะประกาศการเปลี่ยนแปลงแบบทำให้ใช้งานต่อไม่ได้อย่างไร

1. พื้นผิวที่ได้รับผลกระทบจะได้ **สตริงสัญญาใหม่** (`…-v1`); สตริงเดิมจะไม่ถูกนำมาใช้ซ้ำสำหรับรูปแบบที่ต่างออกไป
2. การเปลี่ยนแปลงจะบันทึกไว้ใน [บันทึกการเปลี่ยนแปลง](/squish/th/resources/changelog.md).

ไม่มีอะไรในเพย์โหลดที่กำลังรันจะเปลี่ยนแบบเงียบ ๆ: ถ้า parser ของคุณตรวจสอบ `สัญญา` และยังอ่านได้ว่า `squish-cli-v0` / `squish-mcp-v0` / `squish-http-v0`, ทุกการรับประกันในหน้านี้และใน [สเปกของรูปแบบชีต](/squish/th/reference/sheet-format.md) ยังคงมีผล


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://getsquish.gitbook.io/squish/th/reference/stability.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
