cairn-ai 0.2.1 → 0.2.2
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/workflows/cairn-plan.md +11 -11
- package/.agents/workflows/cairn-work.md +10 -8
- package/.claude/commands/cairn-plan.md +1 -1
- package/.claude/commands/cairn-work.md +1 -1
- package/.codex-plugin/plugin.json +12 -18
- package/README.de.md +3 -1
- package/README.es.md +3 -1
- package/README.fr.md +3 -1
- package/README.ja.md +3 -1
- package/README.ko.md +5 -3
- package/README.md +5 -3
- package/README.pt.md +3 -1
- package/README.zh.md +3 -1
- package/commands/cairn-plan.md +13 -16
- package/commands/cairn-review.md +1 -1
- package/commands/cairn-work.md +12 -11
- package/docs/model-guidance/README.md +6 -2
- package/docs/model-guidance/codex.md +5 -0
- package/hooks/hooks.json +1 -1
- package/package.json +1 -1
- package/scripts/cairn-goal.mjs +379 -62
- package/scripts/cairn-state.mjs +58 -21
- package/scripts/cairn-state.sh +2 -0
- package/scripts/cairn.mjs +9 -8
- package/skills/cairn-plan/SKILL.md +23 -17
- package/skills/cairn-review/SKILL.md +1 -1
- package/skills/cairn-work/SKILL.md +37 -16
- package/templates/PLAN.md +1 -0
- package/templates/work-plan.md +21 -2
package/scripts/cairn-state.mjs
CHANGED
|
@@ -65,6 +65,7 @@ This file is a short index of active and completed work plans.
|
|
|
65
65
|
## Planning Rules
|
|
66
66
|
|
|
67
67
|
- Every agent must start assigned work by reading the project-root \`MEMORY.md\` for domain knowledge and repository policy.
|
|
68
|
+
- For implementation or continued execution, first write an initial plan with \`triage-plan\` active, synchronize it to native UI plan/goal tools and the repository goal before exploration, then update it after triage.
|
|
68
69
|
- Plans must be decision-complete before implementation.
|
|
69
70
|
- Run complexity triage before applying agent, plugin, or delegated workflow guidance.
|
|
70
71
|
- Record the selected Light Path or Heavy Path and the checked Heavy Path signals in \`docs/plan/<topic>.md\`.
|
|
@@ -96,6 +97,7 @@ const planTemplateKo = `# PLAN
|
|
|
96
97
|
## Planning Rules
|
|
97
98
|
|
|
98
99
|
- 모든 에이전트는 배정된 작업을 시작할 때 도메인 지식과 저장소 정책을 위해 프로젝트 루트 \`MEMORY.md\`를 먼저 읽어야 합니다.
|
|
100
|
+
- 구현 또는 계속 실행 요청은 먼저 \`triage-plan\`이 active인 초기 계획을 쓰고, 탐색 전에 UI plan/goal과 저장소 goal을 동기화한 뒤 트리아지 결과로 계획을 갱신합니다.
|
|
99
101
|
- 계획은 구현 전에 의사결정이 완료된 상태여야 합니다.
|
|
100
102
|
- 에이전트, 플러그인, 위임 워크플로 지침을 적용하기 전에 복잡도 트리아지를 실행합니다.
|
|
101
103
|
- 선택한 Light Path 또는 Heavy Path와 확인한 Heavy Path 신호를 \`docs/plan/<topic>.md\`에 기록합니다.
|
|
@@ -112,6 +114,13 @@ const planTemplateKo = `# PLAN
|
|
|
112
114
|
- 두 번 실패한 뒤에는 blocker를 \`docs/plan/<topic>.md\`에 기록합니다.
|
|
113
115
|
`;
|
|
114
116
|
|
|
117
|
+
const contextLimits = {
|
|
118
|
+
goalTitle: 64,
|
|
119
|
+
taskId: 32,
|
|
120
|
+
taskTitle: 40,
|
|
121
|
+
roadmapWindow: 3,
|
|
122
|
+
};
|
|
123
|
+
|
|
115
124
|
if (isCliEntry()) {
|
|
116
125
|
const event = process.argv[2] ?? "manual";
|
|
117
126
|
const payload = await readHookInput();
|
|
@@ -156,8 +165,8 @@ export async function runStateResult(event = "manual", {
|
|
|
156
165
|
return {
|
|
157
166
|
status: 0,
|
|
158
167
|
message: ko
|
|
159
|
-
? "Cairn 점검: 외부 상태 변경에는 dry-run/check
|
|
160
|
-
: "Cairn check: external-state changes need
|
|
168
|
+
? "Cairn 점검: 외부 상태 변경에는 dry-run/check 증거 기록이 필요합니다. 활성 목표가 있다면 현재 task에 성공 증거를 기록하세요."
|
|
169
|
+
: "Cairn check: external-state changes need dry-run/check evidence. When a goal is active, record successful evidence for its current task.",
|
|
161
170
|
hookOutput: {},
|
|
162
171
|
};
|
|
163
172
|
}
|
|
@@ -200,37 +209,57 @@ async function writeIfMissing(path, content) {
|
|
|
200
209
|
}
|
|
201
210
|
|
|
202
211
|
function contextResult({ ko, state, event }) {
|
|
203
|
-
const base = ko
|
|
204
|
-
|
|
205
|
-
: "Cairn context: read the project-root MEMORY.md before working.";
|
|
206
|
-
const goalPolicy = event === "user-prompt-submit"
|
|
212
|
+
const base = ko ? "Cairn: 루트 MEMORY.md를 읽으세요." : "Cairn: read root MEMORY.md.";
|
|
213
|
+
const idlePolicy = event === "user-prompt-submit"
|
|
207
214
|
? (ko
|
|
208
|
-
? "
|
|
209
|
-
: "
|
|
215
|
+
? " 구현/계속 실행: 초기 트리아지 계획 작성 → update_plan → create_goal → 탐색 전 저장소 goal 시작 → 트리아지 후 계획 확정 → 구현. 상담·설명·계획 전용은 goal 없이 처리하세요."
|
|
216
|
+
: " Implementation/continue: write an initial triage plan; call update_plan, then create_goal; start the repository goal before exploration; finalize the plan after triage, then implement. Skip goals for consultation, explanation, or plan-only requests.")
|
|
210
217
|
: "";
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
218
|
+
if (!state || state.goal.status !== "active") return contextHookResult({ event, message: `${base}${idlePolicy}` });
|
|
219
|
+
const task = state.tasks.find((item) => item.status === "active")
|
|
220
|
+
?? state.tasks.find((item) => item.status === "pending")
|
|
221
|
+
?? state.tasks.find((item) => item.status === "blocked");
|
|
222
|
+
const goalTitle = clipText(state.goal.title, contextLimits.goalTitle);
|
|
223
|
+
const activeHeader = ko
|
|
224
|
+
? `Cairn active: "${goalTitle}". ${base}`
|
|
225
|
+
: `Cairn active: "${goalTitle}". ${base}`;
|
|
214
226
|
if (!task) {
|
|
215
227
|
return contextHookResult({
|
|
216
228
|
event,
|
|
217
|
-
message: [
|
|
229
|
+
message: [activeHeader, taskRoadmap(ko, state), activeGoalCompletionMessage(ko, state)].join("\n"),
|
|
218
230
|
});
|
|
219
231
|
}
|
|
232
|
+
const taskId = clipText(task.id, contextLimits.taskId);
|
|
233
|
+
const taskTitle = clipText(task.title, contextLimits.taskTitle);
|
|
220
234
|
const continuation = ko
|
|
221
|
-
?
|
|
222
|
-
: `
|
|
235
|
+
? `현재: ${taskId} (${taskTitle}). 바인딩된 증거 뒤에만 완료하세요.`
|
|
236
|
+
: `Current: ${taskId} (${taskTitle}). Complete only after bound evidence.`;
|
|
223
237
|
const resume = event === "user-prompt-submit"
|
|
224
238
|
? (ko
|
|
225
|
-
? `곁가지
|
|
226
|
-
: `After
|
|
239
|
+
? `곁가지 질문 뒤 일시정지·중단·전환 요청이 없으면 ${taskId}를 재개하세요.`
|
|
240
|
+
: `After a side question, resume ${taskId} unless asked to pause, stop, or switch.`)
|
|
227
241
|
: "";
|
|
228
|
-
return contextHookResult({ event, message: [
|
|
242
|
+
return contextHookResult({ event, message: [activeHeader, taskRoadmap(ko, state), continuation, resume].filter(Boolean).join("\n") });
|
|
229
243
|
}
|
|
230
244
|
|
|
231
245
|
function taskRoadmap(ko, state) {
|
|
232
|
-
const
|
|
233
|
-
|
|
246
|
+
const formatTask = (task, index) => `${index + 1}. ${clipText(task.id, contextLimits.taskId)} [${task.status}] ${clipText(task.title, contextLimits.taskTitle)}`;
|
|
247
|
+
if (state.tasks.length <= contextLimits.roadmapWindow) {
|
|
248
|
+
return `${ko ? "작업 단계" : "Work steps"}:\n${state.tasks.map(formatTask).join("\n")}`;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const currentIndex = Math.max(0, state.tasks.findIndex((task) => task.status === "active" || task.status === "pending"));
|
|
252
|
+
const maxStart = state.tasks.length - contextLimits.roadmapWindow;
|
|
253
|
+
const start = Math.min(Math.max(0, currentIndex - 1), maxStart);
|
|
254
|
+
const visible = state.tasks.slice(start, start + contextLimits.roadmapWindow);
|
|
255
|
+
const counts = Object.fromEntries([...TASK_STATUS_NAMES].map((status) => [status, state.tasks.filter((task) => task.status === status).length]));
|
|
256
|
+
const countSummary = Object.entries(counts).filter(([, count]) => count > 0).map(([status, count]) => `${status} ${count}`).join(", ");
|
|
257
|
+
const omitted = state.tasks.length - visible.length;
|
|
258
|
+
const header = ko
|
|
259
|
+
? `작업 단계 (${state.tasks.length}개; ${countSummary})`
|
|
260
|
+
: `Work steps (${state.tasks.length}; ${countSummary})`;
|
|
261
|
+
const omission = ko ? `… ${omitted}개 단계 생략` : `… ${omitted} steps omitted`;
|
|
262
|
+
return `${header}:\n${visible.map((task, index) => formatTask(task, start + index)).join("\n")}\n${omission}`;
|
|
234
263
|
}
|
|
235
264
|
|
|
236
265
|
function contextHookResult({ event, message }) {
|
|
@@ -272,9 +301,17 @@ function stopAllowedMessage({ ko, state, event }) {
|
|
|
272
301
|
}
|
|
273
302
|
|
|
274
303
|
function activeGoalCompletionMessage(ko, state) {
|
|
304
|
+
const goalTitle = clipText(state.goal.title, contextLimits.goalTitle);
|
|
275
305
|
return ko
|
|
276
|
-
? `활성 목표 "${
|
|
277
|
-
: `All tasks for active goal "${
|
|
306
|
+
? `활성 목표 "${goalTitle}"의 모든 task가 완료되었습니다. 완료 기준을 확인하고 명시적으로 complete 상태로 전이하세요.`
|
|
307
|
+
: `All tasks for active goal "${goalTitle}" are complete. Verify criteria and explicitly transition the goal to completed.`;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
const TASK_STATUS_NAMES = ["active", "pending", "blocked", "completed"];
|
|
311
|
+
|
|
312
|
+
function clipText(value, maxLength) {
|
|
313
|
+
const text = String(value ?? "");
|
|
314
|
+
return text.length <= maxLength ? text : `${text.slice(0, maxLength - 1)}…`;
|
|
278
315
|
}
|
|
279
316
|
|
|
280
317
|
function resolveRoot(root, payload) {
|
package/scripts/cairn-state.sh
CHANGED
|
@@ -85,6 +85,7 @@ if [ ! -f "$plan" ]; then
|
|
|
85
85
|
## Planning Rules
|
|
86
86
|
|
|
87
87
|
- 모든 에이전트는 배정된 작업을 시작할 때 도메인 지식과 저장소 정책을 위해 프로젝트 루트 `MEMORY.md`를 먼저 읽어야 합니다.
|
|
88
|
+
- 구현 또는 계속 실행 요청은 먼저 `triage-plan`이 active인 초기 계획을 쓰고, 탐색 전에 UI plan/goal과 저장소 goal을 동기화한 뒤 트리아지 결과로 계획을 갱신합니다.
|
|
88
89
|
- 계획은 구현 전에 의사결정이 완료된 상태여야 합니다.
|
|
89
90
|
- 에이전트, 플러그인, 위임 워크플로 지침을 적용하기 전에 복잡도 트리아지를 실행합니다.
|
|
90
91
|
- 선택한 Light Path 또는 Heavy Path와 확인한 Heavy Path 신호를 `docs/plan/<topic>.md`에 기록합니다.
|
|
@@ -117,6 +118,7 @@ This file is a short index of active and completed work plans.
|
|
|
117
118
|
## Planning Rules
|
|
118
119
|
|
|
119
120
|
- Every agent must start assigned work by reading the project-root `MEMORY.md` for domain knowledge and repository policy.
|
|
121
|
+
- For implementation or continued execution, first write an initial plan with `triage-plan` active, synchronize it to native UI plan/goal tools and the repository goal before exploration, then update it after triage.
|
|
120
122
|
- Plans must be decision-complete before implementation.
|
|
121
123
|
- Split implementation into small module tasks.
|
|
122
124
|
- Detect repository stack and required LSP/check tools before implementation.
|
package/scripts/cairn.mjs
CHANGED
|
@@ -67,6 +67,7 @@ function isCliEntry() {
|
|
|
67
67
|
|
|
68
68
|
const planExecutionPolicy = "The user-called/main agent is the orchestrator; implementation edits go to worker subagents whenever subagent tools are available. When the subagent tool provides a progress-reporting channel, subagents report status to the orchestrator when starting work, when deciding or confirming direction, during periodic progress, and when finishing; the orchestrator must immediately relay received status events to the user. If no mid-run reporting channel exists, the orchestrator relays observable events such as assignment, waiting, and final completion. When a delegated subagent finishes, it must provide its final report before leaving; after the orchestrator captures the final report and evidence, the orchestrator must close or release the completed subagent, then review the final report and evidence before marking the work complete. If subagent tools are unavailable, the main agent takes over implementation directly and records that takeover in evidence.";
|
|
69
69
|
const workExecutionPolicy = "The user-called/main agent orchestrates, while worker subagents perform implementation edits whenever subagent tools are available. When the subagent tool provides a progress-reporting channel, subagents report status to the orchestrator when starting work, when deciding or confirming direction, during periodic progress, and when finishing; the orchestrator must immediately relay received status events to the user. If no mid-run reporting channel exists, the orchestrator relays observable events such as assignment, waiting, and final completion. When a delegated subagent finishes, it must provide its final report before leaving; after the orchestrator captures the final report and evidence, the orchestrator must close or release the completed subagent, then review the final report and evidence before marking the work complete. If subagent tools are unavailable, the main agent takes over implementation directly and records that takeover in evidence.";
|
|
70
|
+
const tokenEfficientWorkPolicy = "Use a test contract for requirements, invariants, boundaries, and failure modes before the minimum implementation. The tool exit code is authoritative. Run goal verify -- <argv> and expand only failures. Inspect package lifecycle scripts: content-producing or unknown scripts must never use --ignore-scripts; only absent or proven content-neutral scripts may use it while prior full-check evidence remains fresh.";
|
|
70
71
|
const artifactLocalePolicy = "Write user-visible responses and generated or updated documentation, plans, and memory artifacts in the OS locale unless the user asks for another language.";
|
|
71
72
|
const artifactLocalePolicyKo = "사용자가 다른 언어를 요청하지 않는 한, 사용자에게 보이는 응답과 생성 또는 갱신하는 문서, 계획, 메모리 산출물은 OS locale 언어로 작성합니다.";
|
|
72
73
|
|
|
@@ -74,56 +75,56 @@ const messages = {
|
|
|
74
75
|
en: {
|
|
75
76
|
memory: `Use the cairn-memory skill. Keep MEMORY.md as a short index and write details to docs/memory/<domain>.md. ${artifactLocalePolicy}`,
|
|
76
77
|
plan: `Use the cairn-plan skill before non-trivial implementation. Every agent must first read the project-root MEMORY.md for domain knowledge and repository policy. Understand the whole work first, then classify it into executable tasks and sub-tasks. Keep PLAN.md as an index, write detailed plans to docs/plan/<topic>.md, and record Light/Heavy Path triage before any mutation. ${artifactLocalePolicy} ${planExecutionPolicy}`,
|
|
77
|
-
work: `Use
|
|
78
|
+
work: `Use cairn-work only after a plan exists and every agent reads root MEMORY.md. ${tokenEfficientWorkPolicy} Execute one task through its recorded Light/Heavy Path: ${workExecutionPolicy} ${artifactLocalePolicy} Resume active work after side questions unless asked to pause, stop, or switch.`,
|
|
78
79
|
review: `Use the cairn-review skill. Compare evidence against PLAN.md and MEMORY.md. ${artifactLocalePolicy}`,
|
|
79
80
|
usage: "Usage: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
80
81
|
},
|
|
81
82
|
ko: {
|
|
82
83
|
memory: `cairn-memory 스킬을 사용하세요. MEMORY.md는 짧은 색인으로, 상세 내용은 docs/memory/<domain>.md에 기록합니다. ${artifactLocalePolicyKo}`,
|
|
83
84
|
plan: `중요 구현 전에는 cairn-plan 스킬을 사용하세요. 모든 에이전트는 도메인 지식과 저장소 정책을 위해 프로젝트 루트 MEMORY.md를 먼저 읽어야 합니다. 먼저 전체 작업을 파악한 뒤 실행 가능한 task와 필요한 sub-task로 분류합니다. PLAN.md는 색인으로, 상세 계획은 docs/plan/<topic>.md에 기록하며 파일 변경 전 Light/Heavy Path 트리아지를 남깁니다. ${artifactLocalePolicyKo} ${planExecutionPolicy}`,
|
|
84
|
-
work: `계획이
|
|
85
|
+
work: `계획이 있고 모든 에이전트가 루트 MEMORY.md를 읽은 뒤에만 cairn-work를 사용하세요. ${tokenEfficientWorkPolicy} 기록된 Light/Heavy Path로 한 task를 수행합니다. ${workExecutionPolicy} ${artifactLocalePolicyKo} 곁가지 질문 뒤에는 일시중지·중단·전환 요청이 없으면 active work를 재개합니다.`,
|
|
85
86
|
review: `cairn-review 스킬을 사용하세요. PLAN.md와 MEMORY.md 기준으로 증거를 비교합니다. ${artifactLocalePolicyKo}`,
|
|
86
87
|
usage: "사용법: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
87
88
|
},
|
|
88
89
|
ja: {
|
|
89
90
|
memory: `cairn-memory スキルを使用してください。MEMORY.md は短い索引にし、詳細は docs/memory/<domain>.md に記録します。${artifactLocalePolicy}`,
|
|
90
91
|
plan: `cairn-plan スキルを使用してください。PLAN.md は索引にし、詳細計画は docs/plan/<topic>.md に記録します。${artifactLocalePolicy} ${planExecutionPolicy}`,
|
|
91
|
-
work: `cairn-work スキルを使用してください。1つのモジュールスライスを実行し、モジュール証拠と表面証拠を取得します。${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
92
|
+
work: `cairn-work スキルを使用してください。1つのモジュールスライスを実行し、モジュール証拠と表面証拠を取得します。${tokenEfficientWorkPolicy} ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
92
93
|
review: `cairn-review スキルを使用してください。PLAN.md と MEMORY.md に照らして証拠を比較します。${artifactLocalePolicy}`,
|
|
93
94
|
usage: "使い方: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
94
95
|
},
|
|
95
96
|
zh: {
|
|
96
97
|
memory: `使用 cairn-memory skill。将 MEMORY.md 保持为简短索引,并将详细内容写入 docs/memory/<domain>.md。${artifactLocalePolicy}`,
|
|
97
98
|
plan: `使用 cairn-plan skill。将 PLAN.md 保持为索引,并将详细计划写入 docs/plan/<topic>.md。${artifactLocalePolicy} ${planExecutionPolicy}`,
|
|
98
|
-
work: `使用 cairn-work skill。执行一个模块切片,并收集模块证据。${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
99
|
+
work: `使用 cairn-work skill。执行一个模块切片,并收集模块证据。${tokenEfficientWorkPolicy} ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
99
100
|
review: `使用 cairn-review skill。根据 PLAN.md 和 MEMORY.md 对比证据。${artifactLocalePolicy}`,
|
|
100
101
|
usage: "用法: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
101
102
|
},
|
|
102
103
|
es: {
|
|
103
104
|
memory: `Usa la skill cairn-memory. Mantén MEMORY.md como un índice breve y escribe los detalles en docs/memory/<domain>.md. ${artifactLocalePolicy}`,
|
|
104
105
|
plan: `Usa la skill cairn-plan. Mantén PLAN.md como índice y escribe los planes detallados en docs/plan/<topic>.md. ${artifactLocalePolicy} ${planExecutionPolicy}`,
|
|
105
|
-
work: `Usa la skill cairn-work. Ejecuta un solo segmento de módulo y captura evidencia de módulo y de superficie. ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
106
|
+
work: `Usa la skill cairn-work. Ejecuta un solo segmento de módulo y captura evidencia de módulo y de superficie. ${tokenEfficientWorkPolicy} ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
106
107
|
review: `Usa la skill cairn-review. Compara la evidencia con PLAN.md y MEMORY.md. ${artifactLocalePolicy}`,
|
|
107
108
|
usage: "Uso: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
108
109
|
},
|
|
109
110
|
fr: {
|
|
110
111
|
memory: `Utilisez la skill cairn-memory. Gardez MEMORY.md comme index court et écrivez les détails dans docs/memory/<domain>.md. ${artifactLocalePolicy}`,
|
|
111
112
|
plan: `Utilisez la skill cairn-plan. Gardez MEMORY.md comme index et écrivez les plans détaillés dans docs/plan/<topic>.md. ${artifactLocalePolicy} ${planExecutionPolicy}`,
|
|
112
|
-
work: `Utilisez la skill cairn-work. Exécutez une tranche de module et capturez les preuves de module et de surface. ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
113
|
+
work: `Utilisez la skill cairn-work. Exécutez une tranche de module et capturez les preuves de module et de surface. ${tokenEfficientWorkPolicy} ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
113
114
|
review: `Utilisez la skill cairn-review. Comparez les preuves avec PLAN.md et MEMORY.md. ${artifactLocalePolicy}`,
|
|
114
115
|
usage: "Utilisation: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
115
116
|
},
|
|
116
117
|
de: {
|
|
117
118
|
memory: `Verwenden Sie die Skill cairn-memory. Halten Sie MEMORY.md als kurzen Index und schreiben Sie Details nach docs/memory/<domain>.md. ${artifactLocalePolicy}`,
|
|
118
119
|
plan: `Verwenden Sie die Skill cairn-plan. Halten Sie MEMORY.md als Index und schreiben Sie Detailpläne nach docs/plan/<topic>.md. ${artifactLocalePolicy} ${planExecutionPolicy}`,
|
|
119
|
-
work: `Verwenden Sie die Skill cairn-work. Führen Sie einen Modulabschnitt aus und erfassen Sie Modul- und Oberflächenbelege. ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
120
|
+
work: `Verwenden Sie die Skill cairn-work. Führen Sie einen Modulabschnitt aus und erfassen Sie Modul- und Oberflächenbelege. ${tokenEfficientWorkPolicy} ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
120
121
|
review: `Verwenden Sie die Skill cairn-review. Vergleichen Sie Belege mit PLAN.md und MEMORY.md. ${artifactLocalePolicy}`,
|
|
121
122
|
usage: "Verwendung: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
122
123
|
},
|
|
123
124
|
pt: {
|
|
124
125
|
memory: `Use a skill cairn-memory. Mantenha MEMORY.md como um índice curto e escreva detalhes em docs/memory/<domain>.md. ${artifactLocalePolicy}`,
|
|
125
126
|
plan: `Use a skill cairn-plan. Mantenha MEMORY.md como índice e escreva planos detalhados em docs/plan/<topic>.md. ${artifactLocalePolicy} ${planExecutionPolicy}`,
|
|
126
|
-
work: `Use a skill cairn-work. Execute uma fatia de módulo e capture evidências de módulo e de superfície. ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
127
|
+
work: `Use a skill cairn-work. Execute uma fatia de módulo e capture evidências de módulo e de superfície. ${tokenEfficientWorkPolicy} ${workExecutionPolicy} ${artifactLocalePolicy}`,
|
|
127
128
|
review: `Use a skill cairn-review. Compare evidências com PLAN.md e MEMORY.md. ${artifactLocalePolicy}`,
|
|
128
129
|
usage: "Uso: cairn install|upgrade|doctor|uninstall|init|memory|plan|work|review|toolcheck|goal|task",
|
|
129
130
|
},
|
|
@@ -23,27 +23,33 @@ Resolve Cairn's read-only runtime from `references/cairn-runtime.json` next to t
|
|
|
23
23
|
|
|
24
24
|
Use logical resource IDs such as `cairn://templates/work-plan.md` and `cairn://docs/model-guidance/codex.md` in repository plans. Resolve those IDs through `pluginRoot` only while executing. Keep `repoRoot` separate and pass it explicitly as `--root <repoRoot>`.
|
|
25
25
|
|
|
26
|
-
For an implementation or continued-execution request, treat the request itself as authorization to
|
|
26
|
+
For an implementation or continued-execution request, treat the request itself as authorization to create an initial two-phase plan and activate its roadmap, even when the user does not mention a goal. The initial plan is decision-complete for the `triage-plan` task but is not implementation-ready. After writing it and its `PLAN.md` index entry, synchronize the same ordered steps to Codex UI tools when available (`update_plan` first, then `create_goal`) and start the repository goal before exploration, toolcheck, complexity triage, or a non-blocking user question:
|
|
27
27
|
|
|
28
28
|
```sh
|
|
29
|
-
node "<pluginRoot>/scripts/cairn.mjs" goal start --root "<repoRoot>" --goal "<objective>" --plan "docs/plan/<topic>.md" --tasks '[{"id":"
|
|
29
|
+
node "<pluginRoot>/scripts/cairn.mjs" goal start --root "<repoRoot>" --goal "<objective>" --plan "docs/plan/<topic>.md" --tasks '[{"id":"triage-plan","title":"Run planned triage and finalize the plan","requiredEvidence":["planArtifact","triageDecision"]},{"id":"implement","title":"Implement the finalized plan"},{"id":"verify","title":"Verify and review the result"}]' --criteria "<completion criterion>" --session "<current session_id>"
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Use the current Codex hook `session_id` when it is available. If the surface does not expose a stable session ID, omit `--session` and record that the goal is repository-scoped.
|
|
32
|
+
Use the current Codex hook `session_id` when it is available. If the surface does not expose a stable session ID, omit `--session` and record that the goal is repository-scoped. If Codex UI plan/goal tools are unavailable, record that limitation and continue with the repository plan and goal; never claim UI synchronization that did not occur.
|
|
33
33
|
|
|
34
34
|
## Procedure
|
|
35
35
|
|
|
36
36
|
1. Run `node "<pluginRoot>/scripts/cairn.mjs" init --root "<repoRoot>"` through the resolved runtime. If the runtime is unavailable, ensure `MEMORY.md`, `PLAN.md`, `docs/memory`, and `docs/plan` directly and report that `cairn doctor` or `cairn upgrade` is required.
|
|
37
37
|
2. Read the project-root `MEMORY.md` before repository exploration, tool selection, or delegation.
|
|
38
|
-
3.
|
|
39
|
-
4.
|
|
40
|
-
|
|
38
|
+
3. Classify the request as implementation/continued execution versus consultation/explanation/plan-only. For implementation/continued execution, immediately create an initial `docs/plan/<topic>.md` from `cairn://templates/work-plan.md` and add its `PLAN.md` index entry. Based only on the request and `MEMORY.md`, describe the observable outcome, anticipated affected surfaces, and stable top-level roadmap. Make `triage-plan` the first active task and specify its memory inputs, investigation scope, toolcheck, Heavy Path criteria, and exact condition for updating the plan. Mark the plan `initial: decision-complete for triage; not implementation-ready`.
|
|
39
|
+
4. Before reading detailed memory, toolcheck, repository exploration, complexity triage, delegation, or any non-blocking user question, synchronize the initial roadmap:
|
|
40
|
+
- Call Codex `update_plan` first when available so the UI displays the ordered tasks with `triage-plan` in progress.
|
|
41
|
+
- Call Codex `create_goal` next when available so the UI displays the active objective. The implementation request plus this developer-level skill instruction is authorization; do not use it for consultation, explanation, or plan-only requests.
|
|
42
|
+
- Start or attach the repository Cairn goal with the same objective, plan ID, stable task IDs, and current session ID.
|
|
43
|
+
- If a UI tool is unavailable, record the limitation in the plan and continue with repository state.
|
|
44
|
+
5. Execute the planned `triage-plan` task: read only the relevant `docs/memory/*.md`, read applicable installed model guidance, run toolcheck, and explore the repository with focused search and LSP/symbol tools.
|
|
41
45
|
6. Treat tool installation as a separate external-state change. Do not install during planning without explicit user approval. After approval, use `toolcheck --install --yes --root "<repoRoot>"` only for pinned/supported installers, or the approved repository-native command. Otherwise record the missing tool and proposed command as a blocker.
|
|
42
|
-
7.
|
|
43
|
-
8.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
7. Summarize the whole work and affected surfaces, classify it into small executable tasks/sub-tasks, identify dry-run/check modes, and run complexity triage before applying workflow guidance from agents, plugins, or delegated roles.
|
|
47
|
+
8. Update the same repository plan with the selected route, all checked Heavy Path signals, concrete file scope, tool readiness, delegation, verification commands, and fail-closed evidence. Mark it `decision-complete for implementation`, then call Codex `update_plan` again so the UI matches the finalized roadmap.
|
|
48
|
+
- Spend planning tokens on executable test design: requirements, invariants, boundaries, failure modes, expected initial failure, and authoritative tool result.
|
|
49
|
+
- Give implementation a bounded test contract and exact file scope; require the minimum passing change rather than renewed broad discovery.
|
|
50
|
+
- Plan focused tests first, one final full check, and a package dry-run when no change occurred after the full check. Require lifecycle inspection, normal script execution for content-producing or unknown scripts, and `--ignore-scripts` only for absent or proven content-neutral scripts. Mark evidence stale after relevant mutation.
|
|
51
|
+
9. Only after step 8, record bound `planArtifact` and `triageDecision` evidence records, complete the `triage-plan` task, and advance to implementation.
|
|
52
|
+
10. Delegate according to the selected path and model guidance instead of asking the user.
|
|
47
53
|
- Use `explorer` for independent read-only codebase discovery, impact analysis, pattern searches, and read-only verification that can run in parallel when the current tool list supports it.
|
|
48
54
|
- Treat the user-called/main agent as the orchestrator: it plans, assigns, verifies, and records evidence.
|
|
49
55
|
- Use `worker` for actual implementation edits with clear file ownership whenever subagent tools are available, on both Light Path and Heavy Path.
|
|
@@ -53,10 +59,9 @@ Use the current Codex hook `session_id` when it is available. If the surface doe
|
|
|
53
59
|
- If subagent tools are unavailable, the main agent takes over implementation directly and records that takeover in evidence; do not stop before local implementation solely because subagent tools are unavailable.
|
|
54
60
|
- Keep urgent non-implementation blocking work local when the next step depends immediately on the result.
|
|
55
61
|
- Tell every delegated agent and child subagent to read the project-root `MEMORY.md` before work, keep scope, and tell workers they are not alone in the codebase and must not revert others' edits.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
15. Write user-visible responses and generated or updated documentation, plans, and memory artifacts in the OS locale unless the user asks for another language.
|
|
62
|
+
11. Give every plan and ordered task step a stable ID and declare task-level and goal-level required evidence. The task order must be sufficient for both Codex UI and hook context to show the roadmap and restore the current task after side questions.
|
|
63
|
+
12. Advance a Codex UI step only after the matching repository Cairn task transition succeeds with all required bound evidence records. The repository state is the fail-closed transition authority; UI state is its synchronized projection.
|
|
64
|
+
13. Write user-visible responses and generated or updated documentation, plans, and memory artifacts in the OS locale unless the user asks for another language.
|
|
60
65
|
|
|
61
66
|
## Complexity Triage
|
|
62
67
|
|
|
@@ -116,7 +121,8 @@ Heavy Path flow: plan -> pre-implementation review -> bounded `worker` implement
|
|
|
116
121
|
|
|
117
122
|
## Planning Rules
|
|
118
123
|
|
|
119
|
-
- Every plan must be decision-complete.
|
|
124
|
+
- Every initial plan must be decision-complete for its triage task and explicitly not implementation-ready; the post-triage revision must be decision-complete for implementation.
|
|
125
|
+
- Every implementation or continued-execution plan must be shown through Codex `update_plan` and `create_goal` before triage when those tools are available, then synchronized again after triage. Repository plan/goal persistence remains required on every surface.
|
|
120
126
|
- Every plan must describe the whole work first, then classify it into executable tasks and any needed sub-tasks.
|
|
121
127
|
- Every plan must treat the user-called/main agent as the orchestrator and assign actual implementation edits to `worker` whenever subagent tools are available, regardless of Light Path or Heavy Path.
|
|
122
128
|
- Every plan must require subagents to report status when the subagent tool provides a progress-reporting channel. If no mid-run reporting channel exists, the orchestrator must relay observable events such as assignment, waiting, and final completion.
|
|
@@ -152,7 +158,7 @@ Do not silently skip LSP, typecheck, lint, dry-run, or verification because the
|
|
|
152
158
|
Prefer repository-native dry-run and check modes before mutating external state.
|
|
153
159
|
|
|
154
160
|
- Migrations and database changes: `--pretend`, dry-run, schema diff, rollback feasibility check, or equivalent.
|
|
155
|
-
- Package and release work: `npm pack --dry-run`, publish dry-run, build check, or equivalent.
|
|
161
|
+
- Package and release work: inspect lifecycle scripts first, then use normal `npm pack --dry-run`, publish dry-run, build check, or equivalent. Never skip content-producing or unknown lifecycle scripts with `--ignore-scripts`; it is allowed only for absent or proven content-neutral scripts while prior full-check evidence remains fresh.
|
|
156
162
|
- Infrastructure and deployment: plan, diff, validate, check, or equivalent.
|
|
157
163
|
- Code generation and formatting: check mode before write mode when available.
|
|
158
164
|
- If no dry-run mode exists, record that fact and select the smallest reversible command or test artifact available.
|
|
@@ -48,5 +48,5 @@ CONTEXT: docs/plan/<topic>.md, MEMORY.md, relevant docs/memory notes, changed fi
|
|
|
48
48
|
- Dry-run or check evidence is present when required, or the plan records why no dry-run exists.
|
|
49
49
|
- Failed gates followed the bounded loop policy and did not continue past two verification passes without a recorded blocker.
|
|
50
50
|
- Review evidence exists in `docs/plan/<topic>.md`.
|
|
51
|
-
- Goal-level final review evidence is stored as a successful structured
|
|
51
|
+
- Goal-level final review evidence is stored as a successful structured evidence record before the goal is marked `completed`.
|
|
52
52
|
- The next agent can understand verification without rereading the full conversation.
|
|
@@ -31,16 +31,35 @@ Use the installed CLI for durable state. Important forms are:
|
|
|
31
31
|
|
|
32
32
|
```sh
|
|
33
33
|
node "<pluginRoot>/scripts/cairn.mjs" goal status --root "<repoRoot>"
|
|
34
|
-
node "<pluginRoot>/scripts/cairn.mjs" goal assign --root "<repoRoot>" --task "<task-id>" --agent "<agent-id>"
|
|
35
|
-
node "<pluginRoot>/scripts/cairn.mjs" goal
|
|
36
|
-
node "<pluginRoot>/scripts/cairn.mjs" goal
|
|
37
|
-
node "<pluginRoot>/scripts/cairn.mjs" goal task --root "<repoRoot>" --task "<task-id>" --status completed
|
|
38
|
-
node "<pluginRoot>/scripts/cairn.mjs" goal
|
|
39
|
-
node "<pluginRoot>/scripts/cairn.mjs" goal complete --root "<repoRoot>"
|
|
34
|
+
node "<pluginRoot>/scripts/cairn.mjs" goal assign --quiet --root "<repoRoot>" --task "<task-id>" --agent "<agent-id>"
|
|
35
|
+
node "<pluginRoot>/scripts/cairn.mjs" goal verify --quiet --root "<repoRoot>" --task "<task-id>" --kind moduleAcceptance --watch "<path|path>" -- <tool> <arg> ...
|
|
36
|
+
node "<pluginRoot>/scripts/cairn.mjs" goal verify --quiet --root "<repoRoot>" --task "<task-id>" --kind surfaceIntegration --watch "<path|path>" -- <tool> <arg> ...
|
|
37
|
+
node "<pluginRoot>/scripts/cairn.mjs" goal task --quiet --root "<repoRoot>" --task "<task-id>" --status completed
|
|
38
|
+
node "<pluginRoot>/scripts/cairn.mjs" goal verify --quiet --root "<repoRoot>" --scope goal --kind finalReview --watch "<path|path>" -- <tool> <arg> ...
|
|
39
|
+
node "<pluginRoot>/scripts/cairn.mjs" goal complete --quiet --root "<repoRoot>"
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
`goal verify` executes the argv after `--` without a shell and records its exit code, bounded tool output, output digest, and watched-workspace fingerprint. The legacy `goal receipt` command imports declared evidence for compatibility; declared evidence does not satisfy a default tool-bound goal.
|
|
43
|
+
|
|
42
44
|
Use `goal pause`, `goal block --reason "<concrete blocker>"`, or `goal cancel` when that is the truthful state. A task can be blocked with `goal task --task "<task-id>" --status blocked --reason "<concrete blocker>"`.
|
|
43
45
|
|
|
46
|
+
## Token-Efficient Test Contract
|
|
47
|
+
|
|
48
|
+
Use the test contract first. Spend reasoning on requirements, invariants, boundaries, and failure modes before implementation. Turn them into focused executable tests, confirm that new tests fail for the intended reason, then make the minimum implementation that passes.
|
|
49
|
+
|
|
50
|
+
Treat the tool exit code and bounded machine summary as authoritative. On success, retain only the command, exit code, and pass count needed for evidence. Expand diagnostics and repository context only around the failing test; do not reread unrelated files or replay successful output.
|
|
51
|
+
|
|
52
|
+
Use this verification ladder:
|
|
53
|
+
|
|
54
|
+
1. Run the focused contract tests.
|
|
55
|
+
2. Implement the minimum change and rerun only those tests while diagnosing.
|
|
56
|
+
3. Run the full repository check once after the final change.
|
|
57
|
+
4. Before package verification, inspect package lifecycle scripts such as `prepack`, `prepare`, and `prepublishOnly` and classify whether they produce package contents.
|
|
58
|
+
5. Run normal `npm pack --dry-run` by default. Content-producing or unknown lifecycle scripts must never be skipped with `--ignore-scripts`; their generated contents are part of the package contract.
|
|
59
|
+
6. Only when lifecycle scripts are absent or proven content-neutral, the full check is still fresh, and the dry-run is only checking the file list may package verification use `npm pack --dry-run --ignore-scripts`.
|
|
60
|
+
|
|
61
|
+
Any relevant mutation after a gate makes that result stale evidence. Rerun the affected focused gate and, when integration could change, the full gate. Use `--quiet` for successful Cairn state mutations so full state JSON does not consume conversation tokens. `goal status` is read-only and always returns state, including when `--quiet` is supplied.
|
|
62
|
+
|
|
44
63
|
## Procedure
|
|
45
64
|
|
|
46
65
|
1. Read the project-root `MEMORY.md` first.
|
|
@@ -54,15 +73,17 @@ Use `goal pause`, `goal block --reason "<concrete blocker>"`, or `goal cancel` w
|
|
|
54
73
|
9. For Heavy Path, follow the full planning and review pipeline recorded in the plan. Run pre-implementation review before mutation and read-only review after evidence exists.
|
|
55
74
|
10. Delegate implementation to `worker` with exact files, ownership, constraints, and model-specific adjustment rules on both Light Path and Heavy Path whenever subagent tools are available. Tell every delegated agent and child subagent to read the project-root `MEMORY.md` before work, keep scope, preserve others' edits, and report status when the subagent tool provides a progress-reporting channel. Immediately relay received status events to the user. If no mid-run reporting channel exists, relay observable events such as assignment, waiting, and final completion. Require delegated subagents to provide a final report before leaving; after capturing final report and evidence, close or release the completed subagent, then review the final report and evidence before marking the work complete. Use `explorer` for parallel read-only discovery or verification when available and useful. Allow recursive delegation only for bounded sub-tasks when the current surface supports it. If subagent tools are unavailable, the main agent takes over implementation directly and records that takeover in evidence.
|
|
56
75
|
11. Before mutating external state, run the task dry-run or check command when one is recorded. If none exists, record the absence and continue with the smallest reversible command available.
|
|
57
|
-
12. For
|
|
58
|
-
13.
|
|
59
|
-
14.
|
|
60
|
-
15.
|
|
61
|
-
16.
|
|
62
|
-
17.
|
|
63
|
-
18.
|
|
64
|
-
19.
|
|
65
|
-
20.
|
|
76
|
+
12. Design the focused executable test contract before implementation. For behavior changes, run it and confirm the intended failure; for policy-only work, use the closest deterministic assertion or record why a failing test is unavailable.
|
|
77
|
+
13. Give the implementation worker only the contract, failing evidence, exact file scope, and constraints; require the minimum implementation rather than renewed broad discovery.
|
|
78
|
+
14. For Heavy Path, run the recorded automated test command and record explicit `Tests:` evidence before claiming completion.
|
|
79
|
+
15. `worker` must return a structured handoff for only its assigned goal/task with changed files, tool readiness result, dry-run or check result when applicable, automated test result for Heavy Path, module acceptance command and result, surface integration command or QA artifact, blocker, and cleanup notes. A worker must not select the next task.
|
|
80
|
+
16. Re-run both verification gates through `goal verify -- ...`. Treat tool exit codes as authoritative, keep successful output summarized, and expand context only for a failing test. Record each success as evidence bound to the current goal ID, task ID, plan, exact argv, and watched-workspace fingerprint.
|
|
81
|
+
17. Apply the bounded loop policy when a gate fails. After two failed passes, transition the task or goal to `blocked` with a concrete blocker instead of continuing automatically.
|
|
82
|
+
18. Mark a task complete only after every required evidence record passes. Let Cairn advance to the next pending task, then continue the goal without yielding a false completion.
|
|
83
|
+
19. After all tasks complete, run and record goal-level final review evidence and explicitly complete the goal. `active` is not a completion state; `paused`, `blocked`, and `cancelled` are allowed terminal-for-now states that stop automatic continuation.
|
|
84
|
+
20. Record evidence in the plan file and state before updating `PLAN.md`.
|
|
85
|
+
21. If the user asks a side question, status question, or narrow clarification while this task is still active, answer it briefly and then resume the previous active work unless the user explicitly asks to pause, stop, or switch tasks.
|
|
86
|
+
22. Write user-visible responses and generated or updated documentation, plans, and memory artifacts in the OS locale unless the user asks for another language.
|
|
66
87
|
|
|
67
88
|
## Builder Prompt Format
|
|
68
89
|
|
|
@@ -94,7 +115,7 @@ CONTEXT: docs/plan/<topic>.md task, relevant docs/memory notes, applied model gu
|
|
|
94
115
|
Run the closest available dry-run or check mode before commands that mutate external state.
|
|
95
116
|
|
|
96
117
|
- Migrations and database changes: `--pretend`, dry-run, schema diff, rollback feasibility check, or equivalent.
|
|
97
|
-
- Package and release work: `npm pack --dry-run`, publish dry-run, build check, or equivalent.
|
|
118
|
+
- Package and release work: inspect lifecycle scripts, then run normal `npm pack --dry-run`, publish dry-run, build check, or equivalent. Use `--ignore-scripts` only for absent or proven content-neutral lifecycle scripts while prior full-check evidence remains fresh.
|
|
98
119
|
- Infrastructure and deployment: plan, diff, validate, check, or equivalent.
|
|
99
120
|
- Code generation and formatting: check mode before write mode when available.
|
|
100
121
|
- If no dry-run mode exists, record that fact in `docs/plan/<topic>.md` before continuing.
|
package/templates/PLAN.md
CHANGED
|
@@ -4,6 +4,7 @@ Short index of work plans. Link detailed plans under `docs/plan/`.
|
|
|
4
4
|
|
|
5
5
|
## Planning Rules
|
|
6
6
|
|
|
7
|
+
- For implementation or continued execution, write an initial plan with `triage-plan` active, synchronize it to native UI plan/goal tools and the repository goal before exploration, then update it after triage.
|
|
7
8
|
- Detect repository stack and required LSP/check tools before implementation.
|
|
8
9
|
- Install or bootstrap missing required tools before declaring them unavailable.
|
|
9
10
|
- Heavy Path completion requires explicit automated test evidence.
|
package/templates/work-plan.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Plan: <topic>
|
|
2
2
|
|
|
3
|
+
## Plan Phase
|
|
4
|
+
|
|
5
|
+
- Initial: decision-complete for `triage-plan`; not implementation-ready.
|
|
6
|
+
- Finalized: decision-complete for implementation after planned triage.
|
|
7
|
+
- Codex UI synchronization: `update_plan` status and `create_goal` status, or an explicit unavailable reason.
|
|
8
|
+
|
|
3
9
|
## Goal
|
|
4
10
|
|
|
5
11
|
Describe the observable result.
|
|
@@ -74,6 +80,10 @@ Describe the observable result.
|
|
|
74
80
|
|
|
75
81
|
## Execution Guardrails
|
|
76
82
|
|
|
83
|
+
- Test contract first: requirements, invariants, boundaries, failure modes, expected initial failure, and authoritative tool result.
|
|
84
|
+
- Token budget: high reasoning for plan/triage/test design; bounded minimum implementation; concise tool-derived verification summaries.
|
|
85
|
+
- Verification ladder: focused tests, one final full check, then package dry-run if no files changed. Inspect lifecycle scripts first; run normal `npm pack --dry-run` by default. Content-producing or unknown scripts must never use `--ignore-scripts`; only absent or proven content-neutral scripts may use it while evidence remains fresh.
|
|
86
|
+
- Evidence freshness: relevant changes after verification make affected evidence stale.
|
|
77
87
|
- Dry-run or check mode before external-state mutation:
|
|
78
88
|
- No dry-run available, if applicable:
|
|
79
89
|
- Verification loop budget: two passes per task by default.
|
|
@@ -81,6 +91,15 @@ Describe the observable result.
|
|
|
81
91
|
|
|
82
92
|
## Module Tasks
|
|
83
93
|
|
|
94
|
+
### Task 0: planned triage and plan finalization
|
|
95
|
+
|
|
96
|
+
- Task ID: `triage-plan`
|
|
97
|
+
- Initial status: `active`
|
|
98
|
+
- Contract: execute the investigation scope and Heavy Path criteria declared by the initial plan, then update this file and the Codex UI plan to the decision-complete implementation revision.
|
|
99
|
+
- Required evidence records:
|
|
100
|
+
- `planArtifact`: command, exit code 0, timestamp, goal ID, task ID, and plan ID.
|
|
101
|
+
- `triageDecision`: command, exit code 0, timestamp, goal ID, task ID, and plan ID.
|
|
102
|
+
|
|
84
103
|
### Task 1: <module>
|
|
85
104
|
|
|
86
105
|
- Task ID: `task-1`
|
|
@@ -93,7 +112,7 @@ Describe the observable result.
|
|
|
93
112
|
- Dry-run or check command:
|
|
94
113
|
- Module acceptance verification:
|
|
95
114
|
- Surface integration verification:
|
|
96
|
-
- Required
|
|
115
|
+
- Required evidence records:
|
|
97
116
|
- `moduleAcceptance`: command, exit code 0, timestamp, goal ID, task ID, and plan ID.
|
|
98
117
|
- `surfaceIntegration`: command or QA artifact, exit code 0, timestamp, goal ID, task ID, and plan ID.
|
|
99
118
|
- Assigned agent ID, if delegated:
|
|
@@ -106,7 +125,7 @@ Describe the observable result.
|
|
|
106
125
|
- Tests:
|
|
107
126
|
- Module acceptance:
|
|
108
127
|
- Surface integration:
|
|
109
|
-
- Goal final review
|
|
128
|
+
- Goal final review evidence record:
|
|
110
129
|
- Verification pass count:
|
|
111
130
|
- Blocker after two failed passes:
|
|
112
131
|
|