codex-harness-engineering 0.1.5 → 0.1.6
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.
- package/AGENTS.md +18 -6
- package/LICENSE +21 -0
- package/README.md +69 -6
- package/docs/harness-engineering/implementation-playbook.md +232 -286
- package/docs/harness-engineering/index.md +7 -4
- package/docs/harness-engineering/research-note.md +294 -274
- package/docs/harness-engineering/sources.md +166 -72
- package/package.json +5 -4
- package/scripts/install-skills.mjs +73 -15
- package/scripts/publish.sh +2 -2
- package/scripts/verify-harness.mjs +61 -4
- package/skills/acceptance-contract/SKILL.md +39 -49
- package/skills/acceptance-contract/agents/openai.yaml +2 -2
- package/skills/cleanup-harness/SKILL.md +48 -59
- package/skills/cleanup-harness/agents/openai.yaml +2 -2
- package/skills/creator-harness/SKILL.md +79 -95
- package/skills/creator-harness/agents/openai.yaml +2 -2
- package/skills/creator-harness/references/harness-artifacts.md +63 -62
- package/skills/lessons-harness/SKILL.md +68 -0
- package/skills/lessons-harness/agents/openai.yaml +4 -0
- package/templates/harness/AGENTS.md +77 -0
- package/templates/harness/feature_list.json +16 -0
- package/templates/harness/init.sh +15 -0
- package/templates/harness/lessons.md +18 -0
- package/templates/harness/memory/README.md +22 -0
- package/templates/harness/progress.md +33 -0
- package/templates/harness/rotate-state.mjs +131 -0
- package/templates/harness/verify-state.mjs +117 -0
- package/templates/team/roles/evaluator.md +43 -0
- package/templates/team/roles/implementer.md +29 -0
- package/templates/team/roles/planner.md +28 -0
- package/templates/team/sprint-template.md +36 -0
- package/templates/team/verify-team.mjs +71 -0
- package/templates/team/workflow.md +62 -0
|
@@ -1,370 +1,316 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Harness Implementation Playbook
|
|
2
2
|
|
|
3
|
-
Playbook này chuyển
|
|
4
|
-
|
|
3
|
+
Playbook này chuyển white paper thành quy trình triển khai thực tế trong một
|
|
4
|
+
repository phần mềm.
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## Mục tiêu
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- "Done" nghĩa là có bằng chứng kiểm chứng được.
|
|
11
|
-
- Con người đặt mục tiêu, ràng buộc, và tiêu chí; agent thực thi trong môi
|
|
12
|
-
trường có state, tool, feedback, và guardrail.
|
|
8
|
+
Mục tiêu không phải là dựng một hệ thống agent phức tạp ngay từ đầu. Mục tiêu
|
|
9
|
+
là tạo được baseline đủ nhỏ để:
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
- session mới khởi động được;
|
|
12
|
+
- agent biết việc nào đang mở;
|
|
13
|
+
- trạng thái không bị mất giữa các session;
|
|
14
|
+
- verify command chặn done sớm;
|
|
15
|
+
- runtime có thể quan sát khi cần [S1], [S2], [S3], [S4], [S5].
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
## Nguyên tắc khởi đầu
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
| Prompt mơ hồ hoặc app nhiều luồng | Planner + sprint contract + generator/evaluator | [S4] |
|
|
26
|
-
| Throughput tạo drift kiến trúc | Lint, structural test, CI rule, cleanup định kỳ | [S1] |
|
|
27
|
-
| Ràng buộc quá phức tạp để code thủ công | AutoHarness (yêu cầu LLM sinh wrapper bọc thực thi tự động) | [S5] |
|
|
28
|
-
| Hành vi agent drift/cần tối ưu hóa vết chạy | Trajectory evaluation + LLM-as-a-judge + Meta-Evaluation (VeRO) | [S5] |
|
|
19
|
+
1. Bắt đầu bằng harness nhỏ nhất có thể.
|
|
20
|
+
2. Đưa state ra khỏi chat history.
|
|
21
|
+
3. Chỉ thêm tool khi có failure mode thật.
|
|
22
|
+
4. Biến rule lặp lại thành check chạy được.
|
|
23
|
+
5. Ưu tiên dependency và abstraction mà agent có thể inspect, validate, và
|
|
24
|
+
modify trực tiếp; tránh phụ thuộc opaque ở upstream [S1].
|
|
25
|
+
6. Giữ artifact ngắn, rõ vai, và dễ quét trong session mới [S1], [S2], [S3].
|
|
29
26
|
|
|
30
|
-
|
|
27
|
+
## Rollout theo pha
|
|
31
28
|
|
|
32
|
-
|
|
29
|
+
### Pha 0: Audit hiện trạng
|
|
33
30
|
|
|
34
|
-
|
|
31
|
+
Kiểm kê:
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| Task runner | Lệnh chuẩn cho setup/test/lint/build/smoke | [S2], [S3] |
|
|
45
|
-
| Test hoặc smoke test | Bằng chứng tối thiểu trước và sau sửa | [S2], [S3] |
|
|
33
|
+
- setup command hiện có;
|
|
34
|
+
- test command;
|
|
35
|
+
- CI;
|
|
36
|
+
- docs;
|
|
37
|
+
- failure mode đang gặp;
|
|
38
|
+
- artifact nào đã giữ state;
|
|
39
|
+
- artifact nào đang phình hoặc drift;
|
|
40
|
+
- dependency nào opaque làm agent khó inspect, validate, hoặc modify [S1], [S2].
|
|
46
41
|
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
Kết quả của pha này là một danh sách ngắn các điểm cần chặn trước khi thêm
|
|
43
|
+
harness.
|
|
49
44
|
|
|
50
|
-
|
|
51
|
-
tiên dạng như `feature_list.json`: session mới dễ chọn một feature, giữ trạng
|
|
52
|
-
thái pass/fail nhất quán, và tránh suy diễn lại từ ghi chú tự do [S2].
|
|
45
|
+
### Pha 1: Minimum viable harness
|
|
53
46
|
|
|
54
|
-
|
|
47
|
+
Tạo các file tối thiểu:
|
|
55
48
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
- `AGENTS.md`
|
|
50
|
+
- `README.md`
|
|
51
|
+
- `init.sh`
|
|
52
|
+
- `feature_list.json`
|
|
53
|
+
- `progress.md`
|
|
54
|
+
- `lessons.md`
|
|
55
|
+
- `memory/README.md`
|
|
60
56
|
|
|
61
|
-
|
|
57
|
+
Contract tối thiểu:
|
|
62
58
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Đây là diễn giải triển khai từ repository-local knowledge và mechanical
|
|
73
|
-
guardrail của [S1], kết hợp state handoff và quy trình verify-before-status của
|
|
74
|
-
[S2]. Với task nhỏ không thay đổi hành vi hay guardrail, project có thể chỉ
|
|
75
|
-
dùng acceptance criteria và lệnh verify rõ theo nguyên tắc bắt đầu đơn giản
|
|
76
|
-
của [S3].
|
|
77
|
-
|
|
78
|
-
### Contract cập nhật state
|
|
79
|
-
|
|
80
|
-
Một project áp dụng harness nên định nghĩa **behavior artifact** là file làm
|
|
81
|
-
thay đổi cách sản phẩm, package, test, guardrail, skill hoặc agent hoạt động.
|
|
82
|
-
Ví dụ thường gặp: source code, `scripts/`, `tests/`, `skills/`, manifest
|
|
83
|
-
package, workflow verify, và `AGENTS.md`.
|
|
84
|
-
|
|
85
|
-
Khi task chạm behavior artifact:
|
|
86
|
-
|
|
87
|
-
1. Chạy baseline trước sửa và ghi lại trạng thái ban đầu nếu task có rủi ro
|
|
88
|
-
hồi quy.
|
|
89
|
-
2. Nêu acceptance criteria và command kiểm chứng trước khi chuyển trạng thái.
|
|
90
|
-
3. Sau khi verify pass, cập nhật feature state với evidence cụ thể.
|
|
91
|
-
4. Thêm entry mới nhất vào progress, liệt kê behavior artifact đã đổi, command
|
|
92
|
-
đã chạy, kết quả, và bước tiếp theo.
|
|
93
|
-
5. Chỉ tuyên bố hoàn tất hoặc commit checkpoint sau khi gate state và lệnh
|
|
94
|
-
verify đều pass.
|
|
95
|
-
|
|
96
|
-
Contract này ngăn hai failure mode: session sau mất dấu thay đổi đã làm và
|
|
97
|
-
agent kết thúc sớm chỉ vì code/test cục bộ đã xanh trong khi state handoff chưa
|
|
98
|
-
được cập nhật [S2]. Khi omission lặp lại, quy tắc này nên được mã hóa thành
|
|
99
|
-
check chạy được thay vì phụ thuộc vào nhắc nhở prose [S1].
|
|
100
|
-
|
|
101
|
-
### Gate cơ học tối thiểu
|
|
102
|
-
|
|
103
|
-
Project có thay đổi hành vi qua nhiều session nên đưa các invariant sau vào
|
|
104
|
-
`verify` hoặc CI:
|
|
105
|
-
|
|
106
|
-
| Invariant | Gate đề xuất |
|
|
107
|
-
| --- | --- |
|
|
108
|
-
| Artifact bắt buộc không bị mất | Fail khi thiếu `AGENTS.md`, state file, bootstrap hoặc docs map cần thiết |
|
|
109
|
-
| Thay đổi hành vi không thiếu handoff | Nếu diff chạm behavior artifact, fail khi không có cập nhật feature state và progress |
|
|
110
|
-
| Progress không dùng bằng chứng cũ | Entry progress mới nhất phải nêu behavior artifact đang đổi và command verify vừa chạy |
|
|
111
|
-
| Feature không được đánh dấu sớm | Chỉ chấp nhận trạng thái verified khi có evidence gắn với verify command |
|
|
112
|
-
| Quy tắc kiến trúc lặp lại | Dùng lint hoặc structural test thay cho review comment lặp lại |
|
|
113
|
-
|
|
114
|
-
Phạm vi so sánh diff phải khớp workflow của project: nếu agent verify trước
|
|
115
|
-
commit, có thể so với `HEAD`; nếu CI kiểm sau commit, phải so với base branch
|
|
116
|
-
hoặc pull request base. Không chọn baseline diff mơ hồ vì gate sẽ cho qua đúng
|
|
117
|
-
failure mode mà nó cần chặn.
|
|
118
|
-
|
|
119
|
-
### Checklist bootstrap
|
|
59
|
+
- `AGENTS.md` là bản đồ vào repo theo progressive disclosure: lớp ngoài ngắn,
|
|
60
|
+
trỏ tới chi tiết sâu hơn, không phải manual dài [S1].
|
|
61
|
+
- `init.sh` khởi động lại môi trường hoặc smoke test rẻ nhất [S2].
|
|
62
|
+
- `feature_list.json` mô tả capability, acceptance, verify command, status,
|
|
63
|
+
evidence [S2].
|
|
64
|
+
- `progress.md` ghi việc đang làm, artifact liên quan, verify vừa chạy, và bước
|
|
65
|
+
tiếp theo [S2].
|
|
66
|
+
- `lessons.md` ghi mistake, root cause, rule, status [S1], [S2].
|
|
67
|
+
- `memory/README.md` mô tả lớp lạnh, layout archive, và nhịp rotate [S1], [S2].
|
|
120
68
|
|
|
121
|
-
|
|
69
|
+
### Pha 2: Verify-before-status
|
|
70
|
+
|
|
71
|
+
Thêm gate để chặn done sớm:
|
|
72
|
+
|
|
73
|
+
- chỉ đánh dấu `verified` sau khi command verify pass;
|
|
74
|
+
- entry progress mới nhất phải nêu behavior artifact đã đổi;
|
|
75
|
+
- state change phải có evidence gắn với command vừa chạy;
|
|
76
|
+
- diff chạm behavior artifact thì không được thiếu progress/feature update
|
|
77
|
+
[S1], [S2].
|
|
78
|
+
|
|
79
|
+
### Pha 3: Runtime observability
|
|
80
|
+
|
|
81
|
+
Chỉ thêm khi code pass nhưng behavior fail hoặc agent không thấy runtime:
|
|
82
|
+
|
|
83
|
+
- browser automation;
|
|
84
|
+
- API checks;
|
|
85
|
+
- log, metric, trace;
|
|
86
|
+
- database state checks [S1], [S2], [S4].
|
|
122
87
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
automation khi chưa có lỗi tương ứng.
|
|
126
|
-
3. Viết một feature đầu tiên mô tả chính harness và command verify của nó.
|
|
127
|
-
4. Tạo smoke test rẻ nhất cho `init.sh` hoặc lệnh bootstrap tương đương.
|
|
128
|
-
5. Tạo ít nhất một negative test chứng minh gate fail khi bỏ state update hoặc
|
|
129
|
-
phá invariant quan trọng.
|
|
130
|
-
6. Chạy verify, ghi evidence vào feature state và progress, rồi mới dùng
|
|
131
|
-
harness cho task sản phẩm.
|
|
88
|
+
Mỗi tool thêm vào nên được mô tả như interface rõ ràng — tham số, ranh giới, và
|
|
89
|
+
ví dụ sử dụng — để agent gọi đúng [S3].
|
|
132
90
|
|
|
133
|
-
|
|
134
|
-
chưa chứng minh nó chặn được lỗi quy trình cần kiểm soát. Đây là cách thực thi
|
|
135
|
-
nguyên tắc biến feedback lặp lại thành guardrail cơ học [S1], đồng thời giữ
|
|
136
|
-
state handoff kiểm chứng được giữa các session [S2].
|
|
91
|
+
### Pha 4: Evaluation separation
|
|
137
92
|
|
|
138
|
-
|
|
93
|
+
Chỉ thêm khi self-review hoặc chất lượng chủ quan là failure mode:
|
|
139
94
|
|
|
140
|
-
|
|
95
|
+
- generator riêng;
|
|
96
|
+
- evaluator riêng;
|
|
97
|
+
- rubric rõ;
|
|
98
|
+
- sprint contract nêu rõ phạm vi, tiêu chí done, và phương thức QA;
|
|
99
|
+
- evidence rõ cho evaluator [S4].
|
|
141
100
|
|
|
142
|
-
|
|
143
|
-
| --- | --- | --- | --- |
|
|
144
|
-
| `AGENTS.md` | Bản đồ vào repo: đọc gì trước, lệnh nào chuẩn, điều gì bị cấm | Toàn bộ lịch sử dự án hoặc manual quá dài | [S1] |
|
|
145
|
-
| `README.md` | Mục tiêu dự án, cấu trúc chính, cách chạy cơ bản | Task state ngắn hạn theo từng session | [S1] |
|
|
146
|
-
| `feature_list.json` hoặc tương đương | Scope công việc và trạng thái pass/fail theo feature | Rule kiến trúc chung của repo | [S2] |
|
|
147
|
-
| `progress.md` | Verify đã chạy, lỗi đang mở, bước kế tiếp | Chính sách bền vững lặp lại cho mọi task | [S2] |
|
|
148
|
-
| Test, lint, structural check | Invariant cần cưỡng chế bằng máy | Giải thích dài dòng thay cho check chạy được | [S1] |
|
|
101
|
+
### Pha 5: Mechanical guardrails
|
|
149
102
|
|
|
150
|
-
|
|
151
|
-
artifact của nó; nếu chỉ nằm trong chat, session mới khó khôi phục đáng tin
|
|
152
|
-
cậy [S1], [S2].
|
|
103
|
+
Chỉ thêm khi quy tắc kiến trúc hoặc quy tắc quy trình lặp lại:
|
|
153
104
|
|
|
154
|
-
|
|
105
|
+
- lint;
|
|
106
|
+
- structural test;
|
|
107
|
+
- CI rule;
|
|
108
|
+
- cleanup cadence;
|
|
109
|
+
- doc freshness hoặc cross-link checks [S1].
|
|
155
110
|
|
|
156
|
-
|
|
157
|
-
nên ưu tiên progressive disclosure và thêm check cơ học cho freshness,
|
|
158
|
-
cross-link, hoặc độ khớp giữa map tài liệu và cấu trúc repo thực tế [S1].
|
|
111
|
+
### Pha 6: Wrapper synthesis
|
|
159
112
|
|
|
160
|
-
|
|
113
|
+
Chỉ thêm khi rule quá phức tạp để viết tay hoặc chi phí runtime là vấn đề:
|
|
161
114
|
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
- review thường xuyên phát hiện policy trong prose nhưng không được cập nhật.
|
|
115
|
+
- wrapper code sinh tự động;
|
|
116
|
+
- policy thành code tĩnh;
|
|
117
|
+
- verify chặt trước khi chấp nhận [S5].
|
|
166
118
|
|
|
167
|
-
|
|
168
|
-
|
|
119
|
+
Bằng chứng từ AutoHarness cho thấy harness sinh tự động có thể giúp một model
|
|
120
|
+
nhỏ hơn vượt model lớn hơn trên các môi trường thử nghiệm, nên đây là cách bù
|
|
121
|
+
năng lực mô hình chứ không chỉ là tối ưu chi phí runtime [S5].
|
|
169
122
|
|
|
170
|
-
##
|
|
123
|
+
## Quyết định can thiệp
|
|
171
124
|
|
|
172
|
-
|
|
125
|
+
| Tín hiệu | Can thiệp tối thiểu | Khi nào dừng |
|
|
126
|
+
| --- | --- | --- |
|
|
127
|
+
| Task nhỏ, test rõ | Agent đơn lẻ + acceptance criteria + verify command | Khi pass test và state đã cập nhật [S3] |
|
|
128
|
+
| Vượt một session | Feature list + progress + git history + init.sh | Khi session mới có thể tiếp tục không cần chat history [S2] |
|
|
129
|
+
| Không biết chạy app | Setup script idempotent + smoke test | Khi session mới bootstrap được [S2] |
|
|
130
|
+
| Runtime fail | Browser/API/log/metric/trace | Khi hành vi thật đã quan sát được [S1], [S2], [S4] |
|
|
131
|
+
| Self-review yếu | Evaluator riêng | Khi rubric và evidence rõ [S4] |
|
|
132
|
+
| Scope mơ hồ | Planner + sprint contract | Khi generator và evaluator đồng thuận scope [S4] |
|
|
133
|
+
| Drift kiến trúc | Lint + structural test + cleanup | Khi rule được cưỡng chế bằng máy [S1] |
|
|
134
|
+
| Rule quá phức tạp | AutoHarness / synthesized wrapper | Khi wrapper chặn được hành vi sai trước runtime [S5] |
|
|
135
|
+
|
|
136
|
+
## Session loop chuẩn
|
|
137
|
+
|
|
138
|
+
Mỗi session dài hạn nên chạy theo vòng này:
|
|
173
139
|
|
|
174
140
|
1. Đọc `AGENTS.md`.
|
|
175
141
|
2. Đọc `progress.md`.
|
|
176
|
-
3. Đọc `feature_list.json
|
|
177
|
-
4. Xem git history gần
|
|
178
|
-
5. Chạy `init.sh
|
|
179
|
-
6. Chạy smoke test rẻ nhất
|
|
142
|
+
3. Đọc `feature_list.json`.
|
|
143
|
+
4. Xem git history gần nhất.
|
|
144
|
+
5. Chạy `init.sh`.
|
|
145
|
+
6. Chạy smoke test rẻ nhất.
|
|
180
146
|
7. Chọn một feature/fix chưa verify.
|
|
181
147
|
8. Viết acceptance criteria ngắn.
|
|
182
|
-
9.
|
|
148
|
+
9. Thực hiện thay đổi nhỏ nhất.
|
|
183
149
|
10. Verify bằng lệnh hoặc quan sát đã nêu.
|
|
184
|
-
11. Chỉ đổi trạng thái
|
|
185
|
-
12.
|
|
150
|
+
11. Chỉ đổi trạng thái sau khi verify pass.
|
|
151
|
+
12. Nếu lỗi do agent gây ra, ghi lesson trước khi sửa tiếp.
|
|
152
|
+
13. Ghi progress và commit checkpoint nếu workflow yêu cầu [S1], [S2].
|
|
186
153
|
|
|
187
|
-
|
|
188
|
-
thử đầu-cuối [S2].
|
|
154
|
+
Hai lưu ý về checkpoint và reset:
|
|
189
155
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
156
|
+
- Commit mô tả rõ và progress update không chỉ để audit; chúng tạo checkpoint
|
|
157
|
+
để revert thay đổi xấu và khôi phục working state sạch hơn [S2].
|
|
158
|
+
- Nếu state handoff đủ tốt, context reset giữa session là chủ đích chứ không
|
|
159
|
+
phải mất mát: reset giúp model bám task thay vì trượt theo context anxiety
|
|
160
|
+
[S4].
|
|
194
161
|
|
|
195
|
-
|
|
162
|
+
## Artifact contract chi tiết
|
|
196
163
|
|
|
197
|
-
|
|
198
|
-
- nếu `progress.md` lặp lại policy chung, chuyển policy đó sang artifact bền
|
|
199
|
-
vững hơn;
|
|
200
|
-
- nếu feature list không nói rõ thế nào là pass, thêm bước verify cụ thể trước
|
|
201
|
-
khi triển khai.
|
|
164
|
+
### `AGENTS.md`
|
|
202
165
|
|
|
203
|
-
|
|
166
|
+
Nên chứa:
|
|
204
167
|
|
|
205
|
-
|
|
168
|
+
- thứ tự đọc;
|
|
169
|
+
- lệnh khởi động;
|
|
170
|
+
- lệnh verify;
|
|
171
|
+
- quy tắc cập nhật state;
|
|
172
|
+
- giới hạn local;
|
|
173
|
+
- đường dẫn tới docs sâu hơn.
|
|
206
174
|
|
|
207
|
-
|
|
208
|
-
# Acceptance Contract
|
|
175
|
+
Không nên chứa:
|
|
209
176
|
|
|
210
|
-
|
|
211
|
-
-
|
|
212
|
-
-
|
|
213
|
-
- Likely files:
|
|
177
|
+
- lịch sử dài;
|
|
178
|
+
- policy trùng lặp;
|
|
179
|
+
- hướng dẫn lan man [S1].
|
|
214
180
|
|
|
215
|
-
|
|
216
|
-
- [ ] ...
|
|
217
|
-
- [ ] ...
|
|
181
|
+
### `feature_list.json`
|
|
218
182
|
|
|
219
|
-
|
|
220
|
-
- Unit:
|
|
221
|
-
- Integration:
|
|
222
|
-
- Browser/API:
|
|
223
|
-
- Log/metric/trace:
|
|
183
|
+
Nên có:
|
|
224
184
|
|
|
225
|
-
|
|
226
|
-
-
|
|
227
|
-
|
|
185
|
+
- `id`;
|
|
186
|
+
- `title`;
|
|
187
|
+
- `status`;
|
|
188
|
+
- `acceptance`;
|
|
189
|
+
- `verify`;
|
|
190
|
+
- `evidence`.
|
|
228
191
|
|
|
229
|
-
|
|
192
|
+
Chuyển `status` sang verified chỉ khi evidence gắn với verify command [S2].
|
|
230
193
|
|
|
231
|
-
|
|
194
|
+
### `progress.md`
|
|
232
195
|
|
|
233
|
-
|
|
196
|
+
Nên có:
|
|
234
197
|
|
|
235
|
-
|
|
236
|
-
|
|
198
|
+
- context;
|
|
199
|
+
- relevant files;
|
|
200
|
+
- done;
|
|
201
|
+
- verification;
|
|
202
|
+
- next.
|
|
237
203
|
|
|
238
|
-
|
|
239
|
-
- Feature:
|
|
240
|
-
- User path:
|
|
241
|
-
- API/data path:
|
|
242
|
-
- Likely files/modules:
|
|
204
|
+
Entry mới nhất phải nhắc đúng behavior artifact đang đổi [S2].
|
|
243
205
|
|
|
244
|
-
|
|
245
|
-
- [ ] User can ...
|
|
246
|
-
- [ ] API/data reflects ...
|
|
247
|
-
- [ ] Error state handles ...
|
|
248
|
-
- [ ] No regression in ...
|
|
206
|
+
### `lessons.md`
|
|
249
207
|
|
|
250
|
-
|
|
251
|
-
- Unit:
|
|
252
|
-
- Integration:
|
|
253
|
-
- Browser/API:
|
|
254
|
-
- Log/metric/trace:
|
|
208
|
+
Nên dùng cho mistake do agent gây ra.
|
|
255
209
|
|
|
256
|
-
|
|
257
|
-
- Runtime behavior:
|
|
258
|
-
- Negative cases:
|
|
259
|
-
- UX/quality concerns:
|
|
210
|
+
Format tối thiểu:
|
|
260
211
|
|
|
261
|
-
|
|
262
|
-
-
|
|
263
|
-
|
|
212
|
+
- Mistake
|
|
213
|
+
- Root cause
|
|
214
|
+
- Rule
|
|
215
|
+
- Status
|
|
264
216
|
|
|
265
|
-
|
|
266
|
-
|
|
217
|
+
Khi cùng một rule lặp lại, promote nó vào `AGENTS.md` hoặc một gate [S1],
|
|
218
|
+
[S2].
|
|
267
219
|
|
|
268
|
-
|
|
220
|
+
### `memory/README.md`
|
|
269
221
|
|
|
270
|
-
|
|
222
|
+
Nên chứa:
|
|
271
223
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
| Evaluator | Kiểm thử runtime và báo lỗi cụ thể | Chỉ đọc diff rồi khen đạt |
|
|
224
|
+
- contract của lớp lạnh;
|
|
225
|
+
- layout archive;
|
|
226
|
+
- khi nào rotate;
|
|
227
|
+
- file nào là hot và file nào là cold.
|
|
277
228
|
|
|
278
|
-
|
|
279
|
-
state, log, trace, hoặc command output. Feedback nên nói tiêu chí nào fail và
|
|
280
|
-
bước sửa tiếp theo là gì [S4].
|
|
229
|
+
Không nên chứa:
|
|
281
230
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
**LLM-as-a-judge** tự động để chấm điểm hiệu năng thực tế. Có thể dùng **VeRO (Meta-Evaluation)**
|
|
285
|
-
để chạy một vòng lặp tối ưu hóa tự động cấu trúc prompt/tool dựa trên các vết chạy lỗi [S5].
|
|
231
|
+
- state tác vụ đang mở;
|
|
232
|
+
- ghi chú ngắn hạn theo session.
|
|
286
233
|
|
|
287
|
-
##
|
|
234
|
+
## Bootstrap checklist
|
|
288
235
|
|
|
289
|
-
Khi
|
|
236
|
+
Khi tạo harness cho repository mới:
|
|
290
237
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
238
|
+
1. Kiểm kê setup, test, CI, docs, và failure mode.
|
|
239
|
+
2. Tạo artifact tối thiểu.
|
|
240
|
+
3. Viết feature đầu tiên mô tả chính harness.
|
|
241
|
+
4. Tạo smoke test rẻ nhất cho `init.sh`.
|
|
242
|
+
5. Tạo negative test cho thiếu state update hoặc phá invariant.
|
|
243
|
+
6. Chạy verify, ghi evidence, rồi mới dùng harness cho task sản phẩm [S1],
|
|
244
|
+
[S2].
|
|
245
|
+
|
|
246
|
+
## Gate tối thiểu
|
|
247
|
+
|
|
248
|
+
Nên fail khi:
|
|
249
|
+
|
|
250
|
+
- thiếu artifact bắt buộc;
|
|
251
|
+
- diff chạm behavior artifact nhưng thiếu update state;
|
|
252
|
+
- progress mới nhất không nêu behavior artifact và verify command;
|
|
253
|
+
- feature bị đánh dấu sớm;
|
|
254
|
+
- rule kiến trúc lặp lại nhưng chưa bị mã hóa thành gate [S1], [S2].
|
|
299
255
|
|
|
300
|
-
|
|
301
|
-
thêm log tùy tiện [S1].
|
|
256
|
+
## Khi nào chưa nên thêm lớp mới
|
|
302
257
|
|
|
303
|
-
|
|
304
|
-
đương về yêu cầu sản phẩm, ưu tiên giải pháp có API ổn định, hành vi dễ kiểm
|
|
305
|
-
chứng, và phần quan trọng nằm trong repo thay vì ẩn sau upstream khó quan sát.
|
|
306
|
-
Khi agent thường xuyên kẹt ở một thư viện opaque, đó là tín hiệu xem lại
|
|
307
|
-
abstraction chứ không chỉ siết prompt [S1].
|
|
258
|
+
Chưa thêm planner, evaluator, telemetry stack, hoặc automation nếu:
|
|
308
259
|
|
|
309
|
-
|
|
260
|
+
- task nhỏ;
|
|
261
|
+
- đường đi rõ;
|
|
262
|
+
- failure mode chưa xuất hiện;
|
|
263
|
+
- state handoff hiện tại đã đủ [S3].
|
|
310
264
|
|
|
311
|
-
Khi
|
|
265
|
+
## Khi nào phải xem lại harness
|
|
312
266
|
|
|
313
|
-
|
|
267
|
+
Xem lại harness khi:
|
|
314
268
|
|
|
315
|
-
-
|
|
316
|
-
-
|
|
317
|
-
-
|
|
318
|
-
-
|
|
319
|
-
- chặn update feature status nếu verify chưa pass;
|
|
320
|
-
- chạy smoke test trước merge;
|
|
321
|
-
- dùng AutoHarness để tự động sinh lớp bọc thực thi (code harness) khi môi trường có quá nhiều luật phức tạp hoặc khó kiểm soát bằng linter tĩnh [S5]. Lớp bọc này lọc và chặn các hành vi vi phạm trước khi thực thi [S5];
|
|
322
|
-
- biên dịch chính sách quyết định thành code tĩnh (Harness-as-Policy) để thực thi nhanh và tiết kiệm token ở runtime [S5].
|
|
269
|
+
- model mới làm orchestration cũ không còn load-bearing;
|
|
270
|
+
- docs và code drift nhau;
|
|
271
|
+
- session mới phải đoán quá nhiều;
|
|
272
|
+
- cleanup không còn theo kịp throughput [S1], [S4].
|
|
323
273
|
|
|
324
|
-
|
|
325
|
-
tối ưu quanh check thay vì quanh mục tiêu [S1], [S3].
|
|
274
|
+
## Mẫu rollout thực tế
|
|
326
275
|
|
|
327
|
-
|
|
276
|
+
### Tuần 1
|
|
328
277
|
|
|
329
|
-
|
|
278
|
+
- dựng minimum viable harness;
|
|
279
|
+
- thêm smoke test;
|
|
280
|
+
- thêm feature đầu tiên;
|
|
281
|
+
- thêm state update contract [S1], [S2].
|
|
330
282
|
|
|
331
|
-
|
|
283
|
+
### Tuần 2
|
|
332
284
|
|
|
333
|
-
-
|
|
334
|
-
-
|
|
335
|
-
-
|
|
336
|
-
-
|
|
337
|
-
- code mới tạo workaround thay vì sửa nguyên nhân.
|
|
285
|
+
- thêm verify gate;
|
|
286
|
+
- thêm negative test;
|
|
287
|
+
- chuẩn hóa progress entry;
|
|
288
|
+
- chuẩn hóa evidence [S1], [S2].
|
|
338
289
|
|
|
339
|
-
|
|
340
|
-
Đây là garbage collection cho codebase agent-first [S1].
|
|
290
|
+
### Tuần 3
|
|
341
291
|
|
|
342
|
-
|
|
292
|
+
- thêm runtime observability nếu cần;
|
|
293
|
+
- thêm evaluator nếu self-review yếu;
|
|
294
|
+
- thêm cleanup rule nếu drift bắt đầu xuất hiện [S1], [S4].
|
|
343
295
|
|
|
344
|
-
|
|
296
|
+
### Tuần 4+
|
|
345
297
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
| Progress log | Nếu bỏ, session mới có mất context không? |
|
|
350
|
-
| `init.sh` | Nếu bỏ, agent có mất thời gian đoán setup không? |
|
|
351
|
-
| Browser/API check | Nếu bỏ, runtime defect có tăng không? |
|
|
352
|
-
| Evaluator | Nếu gộp vào generator, chất lượng có giảm không? |
|
|
353
|
-
| Planner | Nếu bỏ planner, scope có drift không? |
|
|
354
|
-
| Guardrail | Nếu tắt rule, vi phạm có xuất hiện lại không? |
|
|
355
|
-
| AutoHarness | Nếu dùng code tĩnh thay vì gọi LLM ở runtime, latency và cost có giảm đáng kể mà vẫn giữ được chất lượng không? [S5] |
|
|
356
|
-
| Trajectory Eval | Nếu không chấm vết chạy mà chỉ chấm kết quả tĩnh, ta có bỏ sót các lỗi tiềm ẩn trong suy luận của agent không? [S5] |
|
|
298
|
+
- promote lessons lặp lại thành guardrail;
|
|
299
|
+
- re-check docs freshness;
|
|
300
|
+
- loại bỏ lớp harness không còn giá trị [S1], [S4].
|
|
357
301
|
|
|
358
|
-
|
|
359
|
-
tốt hơn [S4].
|
|
302
|
+
## Anti-patterns
|
|
360
303
|
|
|
361
|
-
|
|
304
|
+
- Đưa quá nhiều policy vào `AGENTS.md`.
|
|
305
|
+
- Dùng prose thay cho gate.
|
|
306
|
+
- Mark verified trước verify.
|
|
307
|
+
- Để state trong chat thay vì file.
|
|
308
|
+
- Thêm evaluator trước khi có failure mode rõ.
|
|
309
|
+
- Giữ wrapper cũ dù model mới không còn cần nó [S1], [S2], [S4], [S5].
|
|
362
310
|
|
|
363
|
-
|
|
311
|
+
## Kết luận triển khai
|
|
364
312
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
- tài liệu chỉ cite `[S1]-[S5]`;
|
|
370
|
-
- không còn placeholder hoặc nguồn ngoài phạm vi.
|
|
313
|
+
Nếu áp dụng đúng thứ tự, harness tốt nhất thường là harness nhỏ nhất có thể
|
|
314
|
+
giữ được state, verify, và observability. Mọi lớp thêm vào đều phải trả lời
|
|
315
|
+
được một failure mode thật. Nếu không, nó chỉ làm hệ thống nặng hơn mà không
|
|
316
|
+
làm agent đáng tin hơn [S1], [S2], [S3], [S4], [S5].
|