@htechcs/harness-kit 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,48 +1,49 @@
1
- # Long-running — việc kéo dài quá một session (Mức 4)
1
+ # Long-running — work that spans more than one session (Level 4)
2
2
 
3
- Mức 4 giữ agent làm việc *đáng tin* trên thứ dài hơi: refactor nhiều ngày, migration lớn,
4
- agent chạy nền hàng giờ. Việc dài chết 3 thứmỗi file đây chặn một thứ.
3
+ Level 4 keeps the agent working *reliably* on long-horizon work: multi-day refactors, big migrations,
4
+ an agent running in the background for hours. Long work dies from 3 thingseach file here blocks one.
5
5
 
6
- ## 3 file, 3 vấn đề
6
+ ## 3 files, 3 problems
7
7
 
8
- | File | Chặn cái chết nào |
9
- |------|-------------------|
10
- | [`setup.sh`](../setup.sh) | Không về được trạng thái chạy-được (clone/agent mới không biết cài ) |
11
- | [`TASK.md`](./TASK.md) | Mất trạng thái qua session / sau `/clear` |
12
- | [`new-worktree.sh`](../new-worktree.sh) | Nhiều task song song giẫm chân nhau |
8
+ | File | Which death it blocks |
9
+ |------|-----------------------|
10
+ | [`setup.sh`](../setup.sh) | Can't get back to a runnable state (a fresh clone/agent doesn't know what to install) |
11
+ | [`TASK.md`](./TASK.md) | State lost across sessions / after `/clear` |
12
+ | [`new-worktree.sh`](../new-worktree.sh) | Parallel tasks step on each other |
13
13
 
14
- ## Cài đặt
14
+ ## Install
15
15
 
16
16
  ```bash
17
- cp setup.sh new-worktree.sh . # vào root repo
17
+ cp setup.sh new-worktree.sh . # into the repo root
18
18
  chmod +x setup.sh new-worktree.sh
19
- cp long-running/TASK.md . # khi bắt đầu một việc dài cụ thể
19
+ cp long-running/TASK.md . # when you start a specific long task
20
20
  ```
21
21
 
22
- Rồi **trỏ `CLAUDE.md`** vào chúng để agent biết dùng:
22
+ Then **point `CLAUDE.md`** at them so the agent knows to use them:
23
23
 
24
24
  ```md
25
25
  ## Build / Test / Run
26
- - Dựng môi trường: ./setup.sh (idempotent — chạy lại an toàn)
26
+ - Set up the environment: ./setup.sh (idempotent — safe to re-run)
27
27
 
28
28
  ## Long-running
29
- - Việc dài đang chạy ghi TASK.md — đọc trước khi bắt đầu, cập nhật khi tới mốc.
29
+ - An in-flight long task is tracked in TASK.md — read it before starting, update it at milestones.
30
30
  ```
31
31
 
32
- ## Khi nào dùng cái nào (đây phần discipline)
32
+ ## When to use which (this is the discipline part)
33
33
 
34
- File chỉ công cụbiết *khi nào* rút ra mới kỹ năng:
34
+ The files are just toolsknowing *when* to reach for them is the skill:
35
35
 
36
- - **`setup.sh`** — chạy ngay khi vào checkout mới, bất cứ khi nào nghi môi trường lệch.
37
- Giữ **idempotent + fail-fast**: agent nền phải dựng lại được không cần hỏi.
38
- - **`TASK.md`** — mở ra khi việc *sẽ vắt qua nhiều session* hoặc bạn sắp `/clear`. Cập nhật ở
39
- **mốc** (xong một phần, chốt một quyết định), không phải mỗi dòng code. thứ agent kế
40
- tiếp đọc để tiếp tục viết cho "người lạ" hiểu, không viết tốc cho riêng mình.
41
- - **`new-worktree.sh`** tách worktree khi chạy **≥2 hướng song song**, hoặc khi một task dài
42
- cần lập khỏi nhánh chính. Một task = một worktree. Xong: `git worktree remove <dir>`.
36
+ - **`setup.sh`** — run it the moment you enter a fresh checkout, and whenever you suspect the
37
+ environment drifted. Keep it **idempotent + fail-fast**: a background agent must be able to rebuild
38
+ it without asking.
39
+ - **`TASK.md`** open it when the work *will span multiple sessions* or you're about to `/clear`.
40
+ Update it at **milestones** (a part done, a decision locked), not every line of code. It's what the
41
+ next agent reads to continue write it so a "stranger" understands, not as shorthand for yourself.
42
+ - **`new-worktree.sh`** split off a worktree when running **2+ directions in parallel**, or when a
43
+ long task needs isolation from the main branch. One task = one worktree. Done: `git worktree remove <dir>`.
43
44
 
44
- ## Chạy nền & quay lại kiểm
45
+ ## Running in the background & checking back
45
46
 
46
- Việc thật dài thể chạy background rồi quay lại xem (không ngồi canh). Nguyên tắc:
47
- khúc việc phải **resume được** — nếu đứt giữa chừng, `TASK.md` + `setup.sh` đủ để bắt lại từ
48
- mốc gần nhất, không phải làm lại từ đầu. Đó do hai file kia tồn tại.
47
+ Genuinely long work can run in the background while you check back (no babysitting). The principle:
48
+ a chunk of work must be **resumable**if it's cut off mid-way, `TASK.md` + `setup.sh` are enough to
49
+ pick up from the latest milestone instead of starting over. That's why those two files exist.
@@ -1,33 +1,33 @@
1
1
  <!--
2
- TASK.md — bộ nhớ sống sót của một việc dài (Mức 4).
2
+ TASK.md — the memory that survives a long task (Level 4).
3
3
 
4
- Việc kéo dài quá một session sẽ mất trạng thái khi `/clear` hoặc khi mở session mới.
5
- File này nơi agent ( agent kế tiếp) đọc để TIẾP TỤC, thay dựng lại từ đầu.
4
+ Work that spans more than one session loses its state on `/clear` or when a new session opens.
5
+ This file is where the agent (and the next agent) reads to CONTINUE, instead of rebuilding from scratch.
6
6
 
7
- Cách dùng:
8
- - Đặt root repo hoặc thư mục task. Cập nhật KHI mốc đáng nhớ, không cập nhật mỗi dòng.
9
- - Trỏ CLAUDE.md tới nó: "Việc dài đang chạy ghi TASK.md — đọc trước khi bắt đầu."
10
- - Xong việc thì xoá / archive, đừng để TASK.md làm nhiễu.
11
- Xoá phần comment này khi bắt đầu dùng thật.
7
+ How to use:
8
+ - Put it at the repo root or the task folder. Update it AT milestones, not every line.
9
+ - Point CLAUDE.md at it: "An in-flight long task is tracked in TASK.md — read it before starting."
10
+ - When the work is done, delete / archive it; don't let a stale TASK.md add noise.
11
+ Delete this comment when you start using it for real.
12
12
  -->
13
13
 
14
- # Task: <một dòngđang làm gì>
14
+ # Task: <one linewhat you're doing>
15
15
 
16
- ## Mục tiêu
17
- <Định nghĩa "xong" đo được. Việc này coi hoàn thành khi nào?>
16
+ ## Goal
17
+ <A measurable definition of "done". When is this task complete?>
18
18
 
19
- ## Đang đâu (cập nhật mỗi mốc)
20
- <Trạng thái hiện tại trong 2–4 gạch đầu dòng. Cái đã chạy được, cái chưa.>
19
+ ## Where things stand (update at each milestone)
20
+ <Current state in 2–4 bullets. What already works, what doesn't yet.>
21
21
  -
22
22
 
23
- ## Bước tiếp theo
24
- <Hành động cụ thể kế tiếp, đủ để bắt tay ngay mà không phải nghĩ lại.>
23
+ ## Next steps
24
+ <The concrete next action, clear enough to start immediately without re-thinking.>
25
25
  - [ ]
26
26
 
27
- ## Quyết định đã chốt (đừng mở lại)
28
- <Lựa chọn đã quyết + DO ngắn. Để agent sau không bàn lại từ đầu.>
27
+ ## Decisions locked (don't reopen)
28
+ <Choices already made + a short WHY. So the next agent doesn't re-litigate from scratch.>
29
29
  -
30
30
 
31
- ## Cạm bẫy đã gặp
32
- <Thứ đã thử mà hỏng, ngõ cụtđể khỏi đâm lại.>
31
+ ## Pitfalls hit
32
+ <Things tried that failed, dead endsso you don't walk into them again.>
33
33
  -
@@ -1,26 +1,26 @@
1
- # MCP hygiene — checklist dọn tool thừa (Mức 2)
1
+ # MCP hygiene — a checklist for pruning surplus tools (Level 2)
2
2
 
3
- Mỗi MCP server bạn cắm sẽ **bơm toàn bộ định nghĩa tool của vào context MỌI lượt** —
4
- lượt đó không dùng tới. 5 server ít dùng thể ngốn hàng nghìn token mỗi lượt và làm
5
- model "rối tay" khi chọn tool. Đây **thuế context vĩnh viễn**, không phải vấn đề an toàn
6
- (an toàn Mức 3).
3
+ Every MCP server you plug in **injects all of its tool definitions into context on EVERY turn** —
4
+ even turns that don't use it. Five rarely-used servers can eat thousands of tokens per turn and
5
+ make the model "fumble" when choosing a tool. This is a **permanent context tax**, not a safety
6
+ issue (safety is Level 3).
7
7
 
8
- ## Cách xem đang cắm những gì
8
+ ## See what's plugged in
9
9
 
10
10
  ```bash
11
- claude mcp list # liệt MCP server đang cấu hình
11
+ claude mcp list # list the configured MCP servers
12
12
  ```
13
13
 
14
- ## Với MỖI server, hỏi 3 câu
14
+ ## For EACH server, ask 3 questions
15
15
 
16
- - [ ] **Tháng qua thực sự gọi tool của không?** Khônggỡ.
17
- - [ ] ** thêm bao nhiêu tool vào mỗi lượt, bạn chỉ dùng 1–2?** Thừa nhiềugỡ hoặc tìm bản gọn hơn.
18
- - [ ] ** thể thay bằng CLI sẵn có không?** (vd `gh` thay MCP GitHub cho việc đơn giản) → ưu tiên CLI, gỡ MCP.
16
+ - [ ] **Did you actually call its tools in the past month?** Noremove it.
17
+ - [ ] **How many tools does it add per turn when you only use 1–2?** Lots of surplus remove it or find a leaner build.
18
+ - [ ] **Can an existing CLI replace it?** (e.g. `gh` instead of a GitHub MCP for simple things) → prefer the CLI, drop the MCP.
19
19
 
20
- ## Nguyên tắc
20
+ ## Principle
21
21
 
22
- > **Tool ít > nhiều tool chồng chéo.** Giữ đúng cái bạn dùng hằng tuần.
23
- > Cắm thêm khi *thật sự* cần một nguồn/khả năng mới, không cắm "để sẵn cho chắc".
22
+ > **Few clear tools > many overlapping ones.** Keep exactly what you use weekly.
23
+ > Add more only when you *genuinely* need a new source/capability, not "just in case".
24
24
 
25
- Cắm MCP "để sẵn cho chắc" cái bẫy phổ biến nhất ở Mức 2: âm thầm làm mọi session
26
- đắt hơn kém chính xác hơn, không ai để ý.
25
+ Plugging in an MCP "just in case" is the most common Level 2 trap: it quietly makes every session
26
+ more expensive and less accurate, without anyone noticing.
@@ -1,35 +1,35 @@
1
1
  #!/usr/bin/env bash
2
- # new-worktree.sh — tạo một git worktree + branch riêng cho một task song song/dài.
2
+ # new-worktree.sh — create a git worktree + its own branch for a parallel/long task.
3
3
  #
4
- # Mức 4 (long-running): mỗi task nặng nên cây làm việc RIÊNG, để chạy song song
5
- # không giẫm chân (không stash/switch liên tục, không sửa đè lên nhau).
4
+ # Level 4 (long-running): each heavy task should have its OWN working tree, so parallel runs
5
+ # don't step on each other (no constant stash/switch, no overwriting each other's edits).
6
6
  #
7
- # Dùng: ./new-worktree.sh <tên-task>
8
- # Vd: ./new-worktree.sh refactor-auth
9
- # -> tạo branch 'refactor-auth' + thư mục ../<repo>-refactor-auth (cạnh repo, KHÔNG lồng trong).
7
+ # Usage: ./new-worktree.sh <task-name>
8
+ # E.g.: ./new-worktree.sh refactor-auth
9
+ # -> creates branch 'refactor-auth' + dir ../<repo>-refactor-auth (NEXT TO the repo, not nested).
10
10
 
11
11
  set -euo pipefail
12
12
 
13
13
  name="${1:-}"
14
- [ -n "$name" ] || { echo "dùng: $0 <tên-task> (vd: refactor-auth)"; exit 1; }
14
+ [ -n "$name" ] || { echo "usage: $0 <task-name> (e.g. refactor-auth)"; exit 1; }
15
15
 
16
- # Phải đứng trong một git repo.
17
- git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo " không phải git repo"; exit 1; }
16
+ # Must be inside a git repo.
17
+ git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "not a git repo"; exit 1; }
18
18
 
19
19
  root="$(git rev-parse --show-toplevel)"
20
20
  repo="$(basename "$root")"
21
- dir="$root/../${repo}-${name}" # đặt CẠNH repo, không lồng -> git status không nhiễu
21
+ dir="$root/../${repo}-${name}" # place it NEXT TO the repo, not nested -> git status stays clean
22
22
 
23
- [ -e "$dir" ] && { echo " đã tồn tại: $dir"; exit 1; } # fail-fast, không ghi đè
23
+ [ -e "$dir" ] && { echo "already exists: $dir"; exit 1; } # fail-fast, don't overwrite
24
24
 
25
- # Tách từ base mới nhất. Đổi 'main' nếu repo bạn dùng tên khác.
25
+ # Branch from the latest base. Change 'main' if your repo uses a different name.
26
26
  base="$(git symbolic-ref --quiet --short HEAD || echo main)"
27
27
 
28
28
  if git show-ref --verify --quiet "refs/heads/${name}"; then
29
- git worktree add "$dir" "$name" # branch đã -> checkout vào worktree mới
29
+ git worktree add "$dir" "$name" # branch exists -> check it out into the new worktree
30
30
  else
31
- git worktree add -b "$name" "$dir" "$base" # branch mới tách từ base hiện tại
31
+ git worktree add -b "$name" "$dir" "$base" # new branch from the current base
32
32
  fi
33
33
 
34
- echo "worktree: $dir (branch: $name)"
35
- echo " cd \"$dir\" để bắt đầu. Xong việc: git worktree remove \"$dir\""
34
+ echo "worktree: $dir (branch: $name)"
35
+ echo " cd \"$dir\" to start. When done: git worktree remove \"$dir\""
@@ -1,51 +1,51 @@
1
1
  #!/usr/bin/env bash
2
- # setup.sh — bootstrap môi trường: "một lệnh repo chạy được".
2
+ # setup.sh — environment bootstrap: "one command makes the repo runnable".
3
3
  #
4
- # Mức 4 (long-running): agent chạy nền/lặp KHÔNG thể dừng hỏi "cài giờ".
5
- # Script này phải đưa một checkout sạch về trạng thái chạy-được, không cần tương tác.
4
+ # Level 4 (long-running): a background/looping agent CANNOT stop to ask "what do I install now".
5
+ # This script must bring a clean checkout to a runnable state, non-interactively.
6
6
  #
7
- # 2 nguyên tắc bắt buộc:
8
- # - IDEMPOTENT: chạy lại nhiều lần vẫn an toàn (không nhân đôi, không hỏng state).
9
- # - FAIL-FAST: thiếu thứ báo NGAY rồi dừng, đừng chạy tiếp trong trạng thái mù.
7
+ # 2 mandatory principles:
8
+ # - IDEMPOTENT: safe to run many times (no duplication, no broken state).
9
+ # - FAIL-FAST: if something is missing, report it NOW and stop; don't continue blind.
10
10
  #
11
- # ĐÂY SKELETON — mỗi repo cài thứ khác nhau. Điền phần TODO cho repo của bạn,
12
- # rồi trỏ CLAUDE.md tới đây ("Build / Test / Run: chạy ./setup.sh trước").
11
+ # THIS IS A SKELETON — every repo installs different things. Fill in the TODOs for your repo,
12
+ # then point CLAUDE.md here ("Build / Test / Run: run ./setup.sh first").
13
13
 
14
- set -euo pipefail # lỗi -> dừng; biến chưa set -> dừng; lỗi giữa pipe -> dừng
14
+ set -euo pipefail # error -> stop; unset var -> stop; mid-pipe error -> stop
15
15
 
16
16
  cd "$(dirname "$0")"
17
17
 
18
- # --- 1. Kiểm điều kiện cần (fail-fast) -------------------------------------
19
- # Thiếu tool nền báo ngay, đừng để lỗi hồ bước sau.
18
+ # --- 1. Check prerequisites (fail-fast) ------------------------------------
19
+ # Missing base tools are reported immediately; don't let a vague error surface later.
20
20
  require() {
21
- command -v "$1" >/dev/null 2>&1 || { echo " thiếu '$1' — cài rồi chạy lại"; exit 1; }
21
+ command -v "$1" >/dev/null 2>&1 || { echo "missing '$1' — install it then re-run"; exit 1; }
22
22
  }
23
- # TODO: liệt tool repo bạn cần
23
+ # TODO: list the tools your repo needs
24
24
  require git
25
25
  # require node
26
26
  # require python3
27
27
 
28
- # --- 2. Cài dependencies (idempotent) --------------------------------------
29
- # Hầu hết package manager đã idempotent sẵn chạy lại chỉ no-op.
30
- # TODO: thay bằng lệnh của repo bạn
28
+ # --- 2. Install dependencies (idempotent) ----------------------------------
29
+ # Most package managers are already idempotent — re-running is a no-op.
30
+ # TODO: replace with your repo's commands
31
31
  # npm ci
32
32
  # uv sync
33
33
  # go mod download
34
34
 
35
- # --- 3. Cấu hình / secrets (fail-fast, KHÔNG tự tạo bừa) --------------------
36
- # .env.example chưa .env -> báo cho người chạy tự điền, đừng đoán giá trị.
35
+ # --- 3. Config / secrets (fail-fast, do NOT invent values) -----------------
36
+ # If .env.example exists but .env doesn't -> tell the runner to fill it in; don't guess values.
37
37
  # if [ -f .env.example ] && [ ! -f .env ]; then
38
- # echo " chưa có .env — copy .env.example rồi điền secrets"; exit 1
38
+ # echo "no .env yet — copy .env.example and fill in the secrets"; exit 1
39
39
  # fi
40
40
 
41
- # --- 4. Dịch vụ phụ trợ (idempotent) ---------------------------------------
42
- # TODO: DB/queue... — dùng lệnh chỉ-tạo-nếu-chưa-
41
+ # --- 4. Supporting services (idempotent) -----------------------------------
42
+ # TODO: DB/queue... — use create-only-if-missing commands
43
43
  # docker compose up -d
44
44
 
45
- # --- 5. Verify: chứng minh môi trường thật sự chạy được --------------------
46
- # Đừng kết thúc bằng "xong" chạy một check rẻ để chắc chắn.
47
- # TODO: lệnh smoke-test nhanh nhất của repo
45
+ # --- 5. Verify: prove the environment actually runs ------------------------
46
+ # Don't end with a blind "done" — run one cheap check to be sure.
47
+ # TODO: your repo's fastest smoke test
48
48
  # npm run build --silent
49
49
  # python -c "import yourpkg"
50
50
 
51
- echo " môi trường sẵn sàng"
51
+ echo "environment ready"
@@ -1,40 +1,40 @@
1
1
  <!--
2
- FEATURE.md — spec một feature TRƯỚC khi viết code (spec-driven development).
2
+ FEATURE.md — spec one feature BEFORE writing code (spec-driven development).
3
3
 
4
- Đây nửa "Specs" của trụ cột "Repo-local instructions & Specs": CLAUDE.md (Mức 1) lo luật bền
5
- xuyên MỌI task; FEATURE.md lo định nghĩa MỘT feature cụ thể trước khi bắt tay. Spec → agent
6
- chạy đúng hướng, ít lạc; acceptance criteria cái để eval (Mức 5) chấm đậu/rớt.
4
+ This is the "Specs" half of the "Repo-local instructions & Specs" pillar: CLAUDE.md (Level 1) covers
5
+ durable rules across EVERY task; FEATURE.md defines ONE specific feature before you start. A clear spec
6
+ the agent runs in the right direction; clear acceptance criteria → something a Level 5 eval can grade.
7
7
 
8
- Cách dùng: copy cho mỗi feature đáng-kể (vd docs/specs/<feature>.md). Việc nhỏ thì bỏ qua —
9
- đừng nghi thức hoá. Điền đủ phần, xoá comment này khi dùng thật.
8
+ How to use: copy it per significant feature (e.g. docs/specs/<feature>.md). Skip small jobs don't
9
+ ritualize it. Fill in the sections, delete this comment when you use it for real.
10
10
  -->
11
11
 
12
- # Feature: <tên ngắn gọn>
12
+ # Feature: <short name>
13
13
 
14
- ## Vấn đề / vì sao
15
- <Giải quyết cái cho ai. 1–3 câu. Nếu không nói được "vì sao", khoan code.>
14
+ ## Problem / why
15
+ <What it solves and for whom. 1–3 sentences. If you can't state the "why", don't code yet.>
16
16
 
17
- ## Phạm vi
17
+ ## Scope
18
18
 
19
- ### Trong phạm vi
19
+ ### In scope
20
20
  -
21
21
 
22
- ### NGOÀI phạm vi (quan trọng chặn scope creep)
22
+ ### OUT of scope (importantblocks scope creep)
23
23
  -
24
24
 
25
- ## Ràng buộc
26
- <Bắt buộc kỹ thuật/nghiệp vụ: API phải giữ nguyên, không thêm dependency, giới hạn hiệu năng…>
25
+ ## Constraints
26
+ <Technical/business musts: API must stay stable, no new dependencies, performance limits…>
27
27
  -
28
28
 
29
- ## Acceptance criteria (đo được đậu/rớt rõ ràng)
30
- <Cái PHẢI đúng thì feature mới coi xong. Đây cũng nguồn cho golden task ở Mức 5.>
29
+ ## Acceptance criteria (measurableclear pass/fail)
30
+ <What MUST be true for the feature to count as done. This also feeds the Level 5 golden task.>
31
31
  - [ ]
32
32
  - [ ]
33
33
 
34
34
  ## Test hooks
35
- <Sẽ kiểm bằng test nào / lệnh nào. Ưu tiên tự động hoá được.>
35
+ <Which tests / commands will check it. Prefer things that can be automated.>
36
36
  -
37
37
 
38
- ## Ghi chú thiết kế & quyết định đã chốt
39
- <Hướng tiếp cận + do ngắn. Để người sau ( agent) không bàn lại từ đầu.>
38
+ ## Design notes & decisions locked
39
+ <Approach + a short why. So the next person (and the agent) don't re-litigate from scratch.>
40
40
  -
@@ -1,34 +1,34 @@
1
- # Specs — spec-driven development (nửa còn lại của Trụ cột 2)
1
+ # Specs — spec-driven development (the other half of Pillar 2)
2
2
 
3
- Trụ cột 2 **"Repo-local instructions & Specs"**. Mức 1 (`/init-harness` → `CLAUDE.md`) lo nửa
4
- **instructions**: luật bền, đúng xuyên *mọi* task. `FEATURE.md` lo nửa **specs**: định nghĩa **một
5
- feature cụ thể TRƯỚC khi code**. Spec → agent ít lạc hướng; acceptance criteria rõ → có sẵn cái
6
- cho eval Mức 5 chấm đậu/rớt.
3
+ Pillar 2 is **"Repo-local instructions & Specs"**. Level 1 (`/init-harness` → `CLAUDE.md`) covers the
4
+ **instructions** half: durable rules that hold across *every* task. `FEATURE.md` covers the **specs**
5
+ half: defining **one specific feature BEFORE you code it**. A clear spec the agent strays less; clear
6
+ acceptance criteria you already have what a Level 5 eval grades pass/fail.
7
7
 
8
- ## Khi nào dùng
8
+ ## When to use it
9
9
 
10
- - Feature **đủ lớn để dễ lạc** / nhiều bước / nhiều người viết spec trước.
11
- - Việc nhỏ, một-phát-xong → **bỏ qua**. Đừng biến spec thành nghi thức.
10
+ - A feature **big enough to get lost in** / multi-step / multi-personwrite a spec first.
11
+ - A small, one-shot job → **skip it**. Don't turn specs into ritual.
12
12
 
13
- ## `FEATURE.md` vs `TASK.md` (đừng nhầmchúng bổ sung nhau)
13
+ ## `FEATURE.md` vs `TASK.md` (don't confuse them they complement each other)
14
14
 
15
- | | `FEATURE.md` (ở đây) | `TASK.md` (Mức 4) |
15
+ | | `FEATURE.md` (here) | `TASK.md` (Level 4) |
16
16
  |---|---|---|
17
- | Mục đích | **plan TRƯỚC khi code**: cái + tiêu chí đậu | **trạng thái sống còn QUA session** |
18
- | Vòng đời | viết 1 lần đầu feature, ít đổi | cập nhật liên tục mỗi mốc |
19
- | Trả lời | "feature này * gì*, xong khi nào" | "*đang* làm tới đâu, bước kế" |
17
+ | Purpose | **plan BEFORE coding**: what + pass criteria | **state that survives ACROSS sessions** |
18
+ | Lifecycle | written once at the feature's start, changes little | updated continuously at each milestone |
19
+ | Answers | "what *is* this feature, when is it done" | "where am I *right now*, what's next" |
20
20
 
21
- Feature lớn thường dùng **cả hai**: `FEATURE.md` chốt đích, `TASK.md` theo dõi đường đi.
21
+ A big feature usually uses **both**: `FEATURE.md` fixes the target, `TASK.md` tracks the path.
22
22
 
23
- ## Cài
23
+ ## Install
24
24
 
25
25
  ```bash
26
26
  mkdir -p docs/specs
27
- cp FEATURE.md docs/specs/<tên-feature>.md
27
+ cp FEATURE.md docs/specs/<feature-name>.md
28
28
  ```
29
29
 
30
- ## Nâng cao
30
+ ## Advanced
31
31
 
32
- Feature lớn / cả team → dùng framework chuyên: **GitHub Spec Kit**, **12-Factor Agents** (link
33
- trong `docs/harness-engineering-tutorial.md`). `FEATURE.md` chỉ bản tối giản để bắt đầu — đủ
34
- để spec, không bắt bạn nuốt cả framework.
32
+ Big feature / whole team → use a dedicated framework: **GitHub Spec Kit**, **12-Factor Agents** (links
33
+ in `docs/harness-engineering-tutorial.md`). `FEATURE.md` is just a minimal starting point enough to
34
+ have a spec, without forcing you to adopt a whole framework.