@open-agent-toolkit/cli 0.3.20 → 0.3.22

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.
Files changed (116) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/reference/cli-reference.md +8 -3
  3. package/assets/docs/reference/configuration.md +3 -0
  4. package/assets/docs/reference/oat-directory-structure.md +1 -1
  5. package/assets/docs/reference/project-artifacts.md +141 -2
  6. package/assets/docs/reference/project-state-machine.md +2 -2
  7. package/assets/docs/workflows/advanced/autonomy.md +29 -12
  8. package/assets/docs/workflows/advanced/cursor-cloud.md +20 -6
  9. package/assets/docs/workflows/advanced/workflow-gates.md +9 -0
  10. package/assets/docs/workflows/projects/closeout/closeout-skills.md +24 -5
  11. package/assets/docs/workflows/projects/closeout/retro.md +6 -2
  12. package/assets/docs/workflows/projects/execution/implementation-execution.md +18 -4
  13. package/assets/docs/workflows/projects/execution/index.md +1 -1
  14. package/assets/docs/workflows/projects/execution/picking-up-projects.md +3 -2
  15. package/assets/docs/workflows/projects/execution/project-log.md +100 -11
  16. package/assets/docs/workflows/projects/lifecycle.md +3 -3
  17. package/assets/docs/workflows/projects/reviews/index.md +18 -0
  18. package/assets/public-package-versions.json +4 -4
  19. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +12 -8
  20. package/assets/skills/oat-cursor-cloud-projects/references/cursor-cloud-mechanics.md +63 -2
  21. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  22. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +6 -0
  23. package/assets/skills/oat-project-autonomous/SKILL.md +88 -26
  24. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  25. package/assets/skills/oat-project-brief/SKILL.md +1 -1
  26. package/assets/skills/oat-project-brief/references/brief-contract.md +40 -27
  27. package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +1 -1
  28. package/assets/skills/oat-project-complete/SKILL.md +142 -25
  29. package/assets/skills/oat-project-complete-auto/SKILL.md +4 -4
  30. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +10 -5
  31. package/assets/skills/oat-project-document/SKILL.md +1 -1
  32. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  33. package/assets/skills/oat-project-goal/SKILL.md +63 -15
  34. package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +1 -1
  35. package/assets/skills/oat-project-implement/SKILL.md +6 -6
  36. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +28 -7
  37. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +10 -5
  38. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  39. package/assets/skills/oat-project-implement/references/phase-execution.md +23 -9
  40. package/assets/skills/oat-project-implement/references/plan-and-resume.md +4 -4
  41. package/assets/skills/oat-project-lite/SKILL.md +1 -1
  42. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +1 -1
  43. package/assets/skills/oat-project-pr-final/SKILL.md +6 -1
  44. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  45. package/assets/skills/oat-project-pr-progress/SKILL.md +6 -1
  46. package/assets/skills/oat-project-quick-start/SKILL.md +1 -1
  47. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  48. package/assets/skills/oat-project-reconcile/SKILL.md +13 -19
  49. package/assets/skills/oat-project-retro/SKILL.md +5 -2
  50. package/assets/skills/oat-project-retro/references/evidence-and-lanes.md +9 -3
  51. package/assets/skills/oat-project-review-provide/SKILL.md +28 -3
  52. package/assets/skills/oat-project-review-receive/SKILL.md +32 -18
  53. package/assets/skills/oat-project-review-receive-remote/SKILL.md +10 -6
  54. package/assets/skills/oat-project-revise/SKILL.md +9 -2
  55. package/assets/skills/oat-project-summary/SKILL.md +166 -37
  56. package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +3 -3
  57. package/assets/templates/implementation-brief.md +5 -36
  58. package/assets/templates/implementation.md +11 -81
  59. package/assets/templates/project-log.md +2 -31
  60. package/assets/templates/project-retro.md +4 -1
  61. package/assets/templates/summary.md +13 -5
  62. package/dist/commands/config/index.d.ts.map +1 -1
  63. package/dist/commands/config/index.js +44 -1
  64. package/dist/commands/project/archive/archive-utils.d.ts +205 -8
  65. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  66. package/dist/commands/project/archive/archive-utils.js +708 -44
  67. package/dist/commands/project/archive/index.d.ts.map +1 -1
  68. package/dist/commands/project/archive/index.js +1 -0
  69. package/dist/commands/project/archive/push-runner.d.ts +9 -1
  70. package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
  71. package/dist/commands/project/archive/push-runner.js +56 -18
  72. package/dist/commands/project/archive/sync-runner.d.ts +28 -0
  73. package/dist/commands/project/archive/sync-runner.d.ts.map +1 -1
  74. package/dist/commands/project/archive/sync-runner.js +44 -22
  75. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  76. package/dist/commands/project/complete-state/index.js +45 -0
  77. package/dist/commands/project/dispatch/index.d.ts.map +1 -1
  78. package/dist/commands/project/dispatch/index.js +24 -2
  79. package/dist/commands/project/dispatch/record.d.ts +54 -1
  80. package/dist/commands/project/dispatch/record.d.ts.map +1 -1
  81. package/dist/commands/project/dispatch/record.js +229 -1
  82. package/dist/commands/project/index.d.ts.map +1 -1
  83. package/dist/commands/project/index.js +2 -0
  84. package/dist/commands/project/journal-check/evaluator.d.ts +17 -0
  85. package/dist/commands/project/journal-check/evaluator.d.ts.map +1 -0
  86. package/dist/commands/project/journal-check/evaluator.js +140 -0
  87. package/dist/commands/project/journal-check/index.d.ts +34 -0
  88. package/dist/commands/project/journal-check/index.d.ts.map +1 -0
  89. package/dist/commands/project/journal-check/index.js +163 -0
  90. package/dist/commands/project/journal-check/rules.d.ts +68 -0
  91. package/dist/commands/project/journal-check/rules.d.ts.map +1 -0
  92. package/dist/commands/project/journal-check/rules.js +994 -0
  93. package/dist/commands/project/journal-check/types.d.ts +63 -0
  94. package/dist/commands/project/journal-check/types.d.ts.map +1 -0
  95. package/dist/commands/project/journal-check/types.js +26 -0
  96. package/dist/commands/project/log/append.d.ts +6 -0
  97. package/dist/commands/project/log/append.d.ts.map +1 -1
  98. package/dist/commands/project/log/append.js +114 -6
  99. package/dist/commands/project/log/check.d.ts +23 -1
  100. package/dist/commands/project/log/check.d.ts.map +1 -1
  101. package/dist/commands/project/log/check.js +20 -3
  102. package/dist/commands/project/log/grammar.d.ts +37 -0
  103. package/dist/commands/project/log/grammar.d.ts.map +1 -1
  104. package/dist/commands/project/log/grammar.js +72 -0
  105. package/dist/commands/project/log/rollup.d.ts +87 -1
  106. package/dist/commands/project/log/rollup.d.ts.map +1 -1
  107. package/dist/commands/project/log/rollup.js +257 -5
  108. package/dist/config/oat-config.d.ts +14 -0
  109. package/dist/config/oat-config.d.ts.map +1 -1
  110. package/dist/config/oat-config.js +17 -0
  111. package/dist/config/resolve.d.ts.map +1 -1
  112. package/dist/config/resolve.js +5 -1
  113. package/dist/providers/identity/generic-dispatch-record.d.ts +33 -0
  114. package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -1
  115. package/dist/providers/identity/generic-dispatch-record.js +60 -1
  116. package/package.json +2 -2
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.0.7
8
+ version: 1.0.8
9
9
  ---
10
10
 
11
11
  # Project Revise
@@ -257,13 +257,20 @@ Update frontmatter to point at the first revision task so `oat-project-implement
257
257
 
258
258
  Update the Progress Overview table to include the new revision phase (e.g., add a `Phase p-rev{N}` row with task count and `in_progress` status).
259
259
 
260
+ In task modes add a `## Phase p-rev{N}: Revision {N}` section after the last
261
+ phase section (before `## Orchestration Runs`) with `**Status:** in_progress`
262
+ and one `### Task prev{N}-tNN:` block per revision task (`**Status:** pending`,
263
+ `**Commit:** -`), so every revision task has its block in its own phase.
264
+
260
265
  In brief modes point the journal at the phase instead of a task: set
261
266
  `oat_current_task_id: p-rev{N}`, add a `## Phase p-rev{N}: Revision {N}`
262
267
  section after the last phase section with `**Status:** pending` directly under
263
268
  the heading (the root writes `**Base:**` when the phase starts), and add a
264
269
  `p-rev{N}` Progress Overview row with one unit, `0/1` accepted.
265
270
 
266
- Add a "Revision Received" entry:
271
+ Add a "Revision Received" entry inside the new revision phase's section, after
272
+ its status line (brief: after its markers) and before its first task block;
273
+ never after `## References`:
267
274
 
268
275
  ```markdown
269
276
  ### Revision Received: Inline Feedback
@@ -5,7 +5,7 @@ disable-model-invocation: false
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(git:*), Bash(jq:*), Bash(oat config:*), Bash(oat decision:*), Bash(oat pjm:*), Bash(oat project log:*), Bash(oat project push:*), Bash(oat project scope:*), Bash(oat template:*), Bash(oat tools:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.5.10
8
+ version: 1.5.11
9
9
  ---
10
10
 
11
11
  # Project Summary
@@ -88,6 +88,31 @@ writing prose artifacts does not imply unrelated full test suites.
88
88
 
89
89
  ## Process
90
90
 
91
+ ### Staged Invocation
92
+
93
+ Staged invocation: the caller states `staged: true`; the summary skill completes Steps 0–5, writes frontmatter, and stops; the caller later states `resume: roll-up` to run Step 6 onward; standalone invocations run straight through.
94
+
95
+ In a staged run:
96
+
97
+ - Step 2.5 performs only the read-only `oat project log check` and identifies
98
+ promotion candidates. Offer them and record the selection under the same
99
+ promotion consent rule as a standalone run, but append nothing yet.
100
+ - Before suspending, write only `summary.md` sections and their freshness
101
+ frontmatter: no project-log append, roll-up, ledger write, decision
102
+ promotion or commit. Suspend with a report that names each selected
103
+ promotion by the original entry's exact heading.
104
+ - The caller sends `resume: roll-up` only after its final journal validation
105
+ succeeds. On resume, first perform the deferred `project` → `general`
106
+ appends exactly as Step 2.5 describes (setting
107
+ `PROJECT_LOG_PROMOTION_APPENDED`), then run Step 6 onward, so the roll-up's
108
+ ledger graduation reads the complete judgment set including the promotions.
109
+ - A staged run that is never resumed has written nothing beyond `summary.md`.
110
+
111
+ Standalone behavior, the seal and ambiguity routing in Step 2.5 and the
112
+ promotion consent rule are unchanged. An inline fallback that follows this
113
+ skill without loading it (`oat-project-complete` Step 3.5) stops at the same
114
+ suspension point.
115
+
91
116
  ### Step 0: Resolve Active Project
92
117
 
93
118
  OAT stores active project context in `.oat/config.local.json` (`activeProject`, local-only).
@@ -167,14 +192,17 @@ For every other workflow mode, read all available artifacts for synthesis:
167
192
  - `"$PROJECT_PATH/implementation.md"` — task outcomes, deviations, challenges, review notes
168
193
  - `"$PROJECT_PATH/state.md"` — associated issues, workflow mode
169
194
  - `"$PROJECT_PATH/project-log.md"` — optional append-only workflow
170
- observations; never hand-edit
171
- - `"$PROJECT_PATH/oat-execution-learnings.md"` — optional append-only
172
- autonomous-run observations and recommendations
195
+ observations; never hand-edit. Judgment entries whose body opens with a
196
+ `**Category:**` head are the project's learnings; read them first
197
+ - `"$PROJECT_PATH/oat-execution-learnings.md"` — optional legacy learnings
198
+ file written before the log carried categories; read it second and never
199
+ write it
173
200
 
174
201
  **Priority for content:** Implementation.md outcomes take precedence over design.md plans. Summary should reflect what actually happened, not what was planned.
175
202
 
176
- If `oat-execution-learnings.md` is absent, do not infer autonomous learnings
177
- from other artifacts and do not add an Autonomous Execution Learnings section.
203
+ If the project log has no category-bearing judgment entry and
204
+ `oat-execution-learnings.md` is absent, do not infer autonomous learnings from
205
+ other artifacts and do not add an Autonomous Execution Learnings section.
178
206
 
179
207
  ### Step 2.5: Check Project Log and Offer Ledger Graduation
180
208
 
@@ -244,16 +272,56 @@ test -f "$PROJECT_PATH/summary.md"
244
272
  ```
245
273
 
246
274
  3. Determine update scope:
247
- - If `oat-execution-learnings.md` exists, compare its dated entry
248
- identifiers (timestamp, category, and title) with the source pointers in
249
- the existing `## Autonomous Execution Learnings` section. Treat missing,
250
- added, or changed recommendations as `learnings_changed`.
251
- - If `oat_summary_last_task == current_last_task` AND `oat_summary_revision_count == current_rev_count` AND learnings are absent or unchanged AND the project-log check reports `status: "ok"` with no entries: **No changes detected. Skip update.** Report: "Summary is current. No updates needed."
275
+ - Compute `CURRENT_LEARNINGS_FINGERPRINT` with the function below and
276
+ compare it with `oat_summary_learnings_fingerprint`. When they differ,
277
+ the learning sources are `learnings_changed`: a new or changed learning
278
+ source identity, or a changed recommendation in a legacy entry, requires
279
+ a refresh on its own, whatever the task, revision or phase tracking says.
280
+ A missing field compares as `none`.
281
+ - If `oat_summary_last_task == current_last_task` AND `oat_summary_revision_count == current_rev_count` AND learnings are not `learnings_changed` AND the project-log check reports `status: "ok"` with no entries: **No changes detected. Skip update.** Report: "Summary is current. No updates needed."
252
282
  - If `current_rev_count > oat_summary_revision_count`: New revision phases exist. Update: Revision History, What Was Implemented, Follow-up Items.
253
283
  - If `current_last_task > oat_summary_last_task`: New tasks completed. Update: What Was Implemented, Notable Challenges, Tradeoffs Made.
254
284
  - If `learnings_changed`: update Autonomous Execution Learnings even when
255
285
  task and revision tracking fields are unchanged.
256
286
 
287
+ The learnings fingerprint hashes every category-bearing judgment entry of the
288
+ project log (heading and body) and the whole legacy file, and is `none` when
289
+ neither exists. Uncategorized and structural entries do not move it; they
290
+ reach the summary through the project-log check above and the roll-up.
291
+
292
+ ```bash
293
+ summary_learnings_fingerprint() {
294
+ local sources
295
+ sources=$(
296
+ if [ -f "$PROJECT_PATH/project-log.md" ]; then
297
+ awk '
298
+ function flush() { if (heading != "" && categorized) printf "log %s\n%s", heading, body; heading = "" }
299
+ { sub(/\r$/, "") }
300
+ /^## / { flush(); in_entries = ($0 == "## Entries"); next }
301
+ !in_entries { next }
302
+ /^### / { flush(); heading = $0; body = ""; categorized = 0; head = 1; next }
303
+ heading == "" { next }
304
+ head && /^\*\*Category:\*\* / { categorized = 1 }
305
+ head && !/^\*\*(Category|Source|Origin|Recorded):\*\* / && !/^[ \t]*$/ { head = 0 }
306
+ { body = body $0 "\n" }
307
+ END { flush() }
308
+ ' "$PROJECT_PATH/project-log.md"
309
+ fi
310
+ if [ -f "$PROJECT_PATH/oat-execution-learnings.md" ]; then
311
+ printf 'legacy\n'
312
+ cat "$PROJECT_PATH/oat-execution-learnings.md"
313
+ fi
314
+ )
315
+ if [ -z "$sources" ]; then
316
+ echo none
317
+ return
318
+ fi
319
+ printf '%s' "$sources" | { command -v sha256sum >/dev/null 2>&1 && sha256sum || shasum -a 256; } | cut -d' ' -f1
320
+ }
321
+
322
+ CURRENT_LEARNINGS_FINGERPRINT=$(summary_learnings_fingerprint)
323
+ ```
324
+
257
325
  **If does not exist (first run):**
258
326
 
259
327
  Copy template: `oat template resolve summary --output "$PROJECT_PATH/summary.md"`
@@ -396,7 +464,7 @@ spec, or design artifacts.
396
464
  | Follow-up Items | implementation.md deferred findings, plan.md deferred items |
397
465
  | Associated Issues | state.md `associated_issues` field |
398
466
  | Workflow Observations | project-log.md via `oat project log rollup` only |
399
- | Autonomous Execution Learnings | oat-execution-learnings.md dated entries |
467
+ | Autonomous Execution Learnings | project-log.md category-bearing judgments, then legacy learnings entries |
400
468
  | Explainer Outcome | project-recap `manifest.json` and `qa/result.json`, or the recorded recap skip |
401
469
  | Exit-Gate Waivers | state.md `oat_implement_exit_gate.waivers` |
402
470
 
@@ -455,7 +523,8 @@ only when the list is absent or empty.
455
523
 
456
524
  **Autonomous Execution Learnings (conditional):**
457
525
 
458
- When `"$PROJECT_PATH/oat-execution-learnings.md"` exists, synthesize
526
+ When the project log has category-bearing judgment entries or the legacy
527
+ `"$PROJECT_PATH/oat-execution-learnings.md"` exists, synthesize
459
528
  `## Autonomous Execution Learnings` as actionable recommendations grouped
460
529
  under exactly these categories:
461
530
 
@@ -468,6 +537,47 @@ under exactly these categories:
468
537
  - **Workflow issues** — lifecycle, gate, review, dispatch, or orchestration
469
538
  process changes.
470
539
 
540
+ Read learning sources in this order and deduplicate them by source identity:
541
+
542
+ 1. **Unified log entries** — judgment entries of `project-log.md` whose body
543
+ opens with a `**Category:**` head. Read the observation, impact,
544
+ recommendation and uncertainty from the body below the head. The source
545
+ identity is the export-safe token `oat-project:<slug>#<entry-id>`, where
546
+ `<slug>` is the project directory name and `<entry-id>` is the id
547
+ `oat project log rollup` assigns and prints in its digest:
548
+ `<date>-<type>-<area slug>-<n>`. Derive it with `project_log_entry_ids`
549
+ below; never construct a different id.
550
+ 2. **Legacy entries** — the `## {timestamp} - {category} - {title}` sections of
551
+ `oat-execution-learnings.md`. The source identity is that exact
552
+ `{timestamp} — {category} — {title}` triple.
553
+
554
+ A legacy entry is a proven twin of a unified entry only when the unified
555
+ entry's `**Recorded:**` value equals the timestamp, its `**Category:**` equals
556
+ the category and its heading area equals the title, each exactly. Use a proven
557
+ twin once, under its unified token. Keep every other entry, including a
558
+ distinct lesson that only shares a title.
559
+
560
+ ```bash
561
+ project_log_entry_ids() {
562
+ awk '
563
+ { sub(/\r$/, "") }
564
+ /^## / { in_entries = ($0 == "## Entries"); next }
565
+ !in_entries { next }
566
+ /^### [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] · (project|general) · (bug|friction|worked-well|feedback) · / {
567
+ split($0, field, " · ")
568
+ date = substr(field[1], 5); type = field[3]; area = field[4]
569
+ sub(/[ \t]+$/, "", area)
570
+ slug = tolower(area); gsub(/[^a-z0-9]+/, "-", slug); gsub(/^-+|-+$/, "", slug)
571
+ if (slug == "") slug = "entry"
572
+ stem = date "-" type "-" slug
573
+ print stem "-" (++seen[stem]) "\t" $0
574
+ }
575
+ ' "$PROJECT_PATH/project-log.md"
576
+ }
577
+ ```
578
+
579
+ Each output line is `<entry-id>`, a tab, then the entry's heading.
580
+
471
581
  For each source entry:
472
582
 
473
583
  1. Use its `Observation`, `Impact`, and `Recommendation` fields to decide
@@ -479,28 +589,35 @@ For each source entry:
479
589
  not a one-to-one output mapping.
480
590
  3. Write a concise action plus one-line rationale. Preserve uncertainty and
481
591
  environment-limited status; do not claim an unverified fix.
482
- 4. End the item with a relative link to `oat-execution-learnings.md` and the
483
- exact source entry identifier (`timestamp — category — title`). Link to the
484
- entry heading anchor when one exists; otherwise link to the file and include
485
- the identifier in the link text so the entry remains traceable.
592
+ 4. End the item with the source identity of every supporting entry as plain
593
+ text, never a Markdown link: the `oat-project:<slug>#<entry-id>` token for a
594
+ unified entry, and `legacy learning {timestamp} — {category} — {title}` for
595
+ a legacy entry. The summary is exported into the tracked repository while
596
+ the log and the legacy file stay with the archived project, so never
597
+ present either as a retrievable path; the archive export finalizes the
598
+ tokens.
486
599
  5. Deduplicate recommendations that describe the same action, while retaining
487
- pointers to every supporting source entry.
600
+ every distinct supporting source identity; a merged recommendation lists
601
+ each token and legacy triple once.
488
602
 
489
- Omit empty category subheadings. If the learnings file contains no actionable
490
- entries, omit the entire section. If the file is absent, this behavior is inert:
491
- remove the template placeholder during a first render and make no
603
+ Omit empty category subheadings. If no source contains an actionable entry,
604
+ omit the entire section. With no learning source at all this behavior is
605
+ inert: remove the template placeholder during a first render and make no
492
606
  learnings-driven update on a re-run.
493
607
 
494
608
  **Workflow Observations coexistence contract:**
495
609
 
496
610
  Keep `## Workflow Observations` and `## Autonomous Execution Learnings` as
497
611
  distinct summary sections. Author the autonomous-execution section first, then
498
- perform the project-log roll-up in Step 6. Because the roll-up command writes
499
- every project-log entry, keep the project-log observation in Workflow
500
- Observations and represent any overlap from Autonomous Execution Learnings with
501
- a one-line cross-reference instead of copying it there. The roll-up command
502
- remains the only writer of Workflow Observations—never hand-implement its
503
- section or ledger writes.
612
+ perform the project-log roll-up in Step 6. The roll-up writes a bounded digest
613
+ of judgment entries (structural entries stay in the log): one observation line
614
+ per selected entry, with a recommendation only for an uncategorized entry. A
615
+ categorized learning's synthesized recommendation therefore appears once, in
616
+ Autonomous Execution Learnings, while the digest keeps its observation line and
617
+ adds a one-line cross-reference to that section; never restate the digest's
618
+ observations here or a recommendation there. The roll-up command remains the
619
+ only writer of Workflow Observations—never hand-implement its section or
620
+ ledger writes.
504
621
 
505
622
  **For incremental updates (re-run):**
506
623
 
@@ -520,9 +637,12 @@ oat_generated: true
520
637
  oat_summary_last_task: { highest completed task ID }
521
638
  oat_summary_revision_count: { count of p-revN phases }
522
639
  oat_summary_includes_revisions: [{ list of p-revN IDs reflected }]
640
+ oat_summary_learnings_fingerprint: { CURRENT_LEARNINGS_FINGERPRINT }
523
641
  ---
524
642
  ```
525
643
 
644
+ `oat_summary_learnings_fingerprint` is written in every workflow mode (Step 3).
645
+
526
646
  In brief and goal modes write `oat_summary_phase_fingerprint: {CURRENT_PHASE_FINGERPRINT}`
527
647
  (Step 3) and omit `oat_summary_last_task`; keep `oat_summary_revision_count`
528
648
  and `oat_summary_includes_revisions` as informational fields.
@@ -530,8 +650,9 @@ and `oat_summary_includes_revisions` as informational fields.
530
650
  ### Step 6: Roll Up Project Observations and Offer Backlog Graduation
531
651
 
532
652
  Run this step after `summary.md` has been authored or refreshed, including the
533
- distinct `## Autonomous Execution Learnings` section when its source artifact
534
- exists.
653
+ distinct `## Autonomous Execution Learnings` section when a learning source
654
+ exists. In a staged invocation this step runs only after `resume: roll-up`,
655
+ once the deferred Step 2.5 promotions are appended.
535
656
 
536
657
  **Goal terminal deferral.** When `oat_workflow_mode` is `goal`, this run
537
658
  comes before `pr` in the post-implement sequence (`oat_post_implement_sequence`
@@ -606,9 +727,12 @@ Route only on the structured `ProjectLogRollupResult`:
606
727
  - `status: "failed"` or `ledgerOutcome: "failed"`: surface the failure to the
607
728
  user and stop before commit. Do not describe the summary as fully rolled up.
608
729
 
609
- The command mechanically writes or updates `## Workflow Observations` and
610
- appends/deduplicates eligible `general` judgments in the configured ledger. Do
611
- not reproduce either write by hand.
730
+ The command mechanically writes, updates or omits the bounded
731
+ `## Workflow Observations` digest (`summarySection: "written" | "updated" |
732
+ "omitted"`; `omitted` means no judgment entry qualified and the section is
733
+ absent) and appends/deduplicates every eligible `general` judgment in the
734
+ configured ledger, whether or not the digest bound selected it. Do not
735
+ reproduce either write by hand.
612
736
 
613
737
  Separately inspect follow-up-marked project-log entries and offer backlog
614
738
  graduation through `oat-pjm-add-backlog-item`. Backlog graduation creates a
@@ -819,11 +943,16 @@ Summary tracks: last task {task_id}, {N} revision phases
819
943
  - Summary is under 200 lines for typical projects
820
944
  - Re-run after revisions updates only affected sections
821
945
  - Re-run with no changes produces no modifications
822
- - When `oat-execution-learnings.md` exists, actionable recommendations are
823
- grouped under Agent-instruction updates, Cloud-environment improvements, Code
824
- follow-ups, and Workflow issues with source-entry pointers
825
- - When `oat-execution-learnings.md` is absent, no Autonomous Execution
826
- Learnings section is rendered and normal summary behavior is unchanged
946
+ - When learning sources exist (category-bearing log entries first, the legacy
947
+ `oat-execution-learnings.md` second), actionable recommendations are grouped
948
+ under Agent-instruction updates, Cloud-environment improvements, Code
949
+ follow-ups, and Workflow issues, each with plain-text source identities and
950
+ each proven twin counted once
951
+ - With no learning source, no Autonomous Execution Learnings section is
952
+ rendered and normal summary behavior is unchanged
953
+ - A new or changed learning source makes the summary stale on its own
954
+ - A staged invocation writes only summary sections and frontmatter before
955
+ `resume: roll-up`
827
956
  - Project-log ledger graduation appends a new referencing `general` judgment
828
957
  before roll-up and never mutates the original `project` judgment
829
958
  - `oat project log rollup --json` owns the distinct Workflow Observations
@@ -6,7 +6,7 @@ disable-model-invocation: false
6
6
  user-invocable: false
7
7
  allowed-tools: Read, Write, Bash, Glob, Grep
8
8
  metadata:
9
- version: 1.6.3
9
+ version: 1.6.4
10
10
  ---
11
11
 
12
12
  # Autonomous Worktree Bootstrap
@@ -487,7 +487,7 @@ for smoke mode and `false` for normal mode.
487
487
 
488
488
  When baseline failures occur under `allow-failing` policy and an active project exists:
489
489
 
490
- Append to `implementation.md` under `## Implementation Log`:
490
+ Append to `implementation.md` under `## Deviations from Plan / Design`, after that section's existing content and before the next `##` heading:
491
491
 
492
492
  ```markdown
493
493
  ### {YYYY-MM-DD} — Baseline Warning (autonomous bootstrap)
@@ -500,7 +500,7 @@ Append to `implementation.md` under `## Implementation Log`:
500
500
  - {check_name}: {failure summary}
501
501
  ```
502
502
 
503
- When a base mismatch is detected (Step 2.7) and an active project exists, append a distinct entry regardless of baseline policy so post-mortems can find it:
503
+ When a base mismatch is detected (Step 2.7) and an active project exists, append a distinct entry in the same section regardless of baseline policy so post-mortems can find it:
504
504
 
505
505
  ```markdown
506
506
  ### {YYYY-MM-DD} — Base Mismatch (autonomous bootstrap)
@@ -80,50 +80,19 @@ Intent, files, proof command, result.
80
80
 
81
81
  ## Orchestration Runs
82
82
 
83
- _Each run from `oat-project-implement` appends an entry below with:_
84
- _- Run header (number, timestamp, branch, tier, policy, phase counts)_
85
- _- Phase Outcomes table_
86
- _- Parallel Groups list_
87
- _- Outstanding Items_
83
+ <!-- One line per dispatch request id, rendered by `oat project dispatch record --format line` and written as a list item. Update that line in place with the terminal outcome; never paste the record or event JSON. -->
88
84
 
89
85
  <!-- orchestration-runs-start -->
90
86
 
91
- _Orchestration runs from `oat-project-implement` are appended here, most-recent-first within the file but append-only at the bottom of the log._
92
-
93
87
  <!-- orchestration-runs-end -->
94
88
 
95
- ---
96
-
97
- ## Implementation Log
98
-
99
- Chronological log of implementation progress.
100
-
101
- ### YYYY-MM-DD
102
-
103
- **Session Start:** [time]
104
-
105
- - [x] p01: [Phase name] - [head SHA]
106
- - [ ] p02: [Phase name] - in progress
107
-
108
- **What changed (high level):**
89
+ ## Reviews and Gates
109
90
 
110
- - [short bullets suitable for PR/docs]
91
+ <!-- Receipts for final, milestone and multi-phase reviews (a phase review receipt may stay in its phase) and one terminal line per gate run. state.md owns gate transitions; this slot keeps the outcome, waivers and operator choices. -->
111
92
 
112
- **Decisions:**
93
+ ## Deferred Findings
113
94
 
114
- - [Decision made and rationale]
115
-
116
- **Follow-ups / TODO:**
117
-
118
- - [anything discovered during implementation that should be captured for later]
119
-
120
- **Blockers:**
121
-
122
- - [Blocker description] - [status: resolved/pending]
123
-
124
- **Session End:** [time]
125
-
126
- ---
95
+ <!-- One line per approved deferral (finding, rationale, approval, follow-up trigger), plus excluded parallel phases and unmerged worktrees. -->
127
96
 
128
97
  ## Deviations from Plan / Design
129
98
 
@@ -14,15 +14,7 @@ oat_template_name: implementation
14
14
  **Started:** YYYY-MM-DD
15
15
  **Last Updated:** YYYY-MM-DD
16
16
 
17
- > This document is used to resume interrupted implementation sessions.
18
- >
19
- > Conventions:
20
- >
21
- > - `oat_current_task_id` always points at the **next plan task to do** (not the last completed task).
22
- > - When all plan tasks are complete, set `oat_current_task_id: null`.
23
- > - Reviews are **not** plan tasks. Track review status in `plan.md` under `## Reviews` (e.g., `| final | code | passed | ... |`).
24
- > - Keep phase/task statuses consistent with the Progress Overview table so restarts resume correctly.
25
- > - Before running the `oat-project-pr-final` skill, fill the Final Summary (for PR/docs) section below with what was actually implemented.
17
+ This journal resumes interrupted implementation sessions. Every plan task has one block in its phase; `oat project journal check` validates it.
26
18
 
27
19
  ## Progress Overview
28
20
 
@@ -31,7 +23,7 @@ oat_template_name: implementation
31
23
  | Phase 1 | in_progress | N | 0/N |
32
24
  | Phase 2 | pending | N | 0/N |
33
25
 
34
- **Total:** 0/{N} tasks completed
26
+ **Total:** 0/N tasks completed
35
27
 
36
28
  ---
37
29
 
@@ -50,10 +42,7 @@ oat_template_name: implementation
50
42
 
51
43
  - `{path}` - {why}
52
44
 
53
- **Verification:**
54
-
55
- - Run: `{command(s)}`
56
- - Result: {pass/fail + notes}
45
+ **Verification:** {command(s) run for the phase and the result}
57
46
 
58
47
  **Notes / Decisions:**
59
48
 
@@ -61,8 +50,8 @@ oat_template_name: implementation
61
50
 
62
51
  ### Task p01-t01: {Task Name}
63
52
 
64
- **Status:** completed / in_progress / pending / blocked
65
- **Commit:** {sha} (if completed)
53
+ **Status:** pending
54
+ **Commit:** -
66
55
 
67
56
  **Outcome (required when completed):**
68
57
 
@@ -72,19 +61,12 @@ oat_template_name: implementation
72
61
 
73
62
  - `{path}` - {why}
74
63
 
75
- **Verification:**
76
-
77
- - Run: `{command(s)}`
78
- - Result: {pass/fail + notes}
64
+ **Verification:** {command(s) and result}
79
65
 
80
66
  **Notes / Decisions:**
81
67
 
82
68
  - {gotchas, trade-offs, design deltas, important context for future sessions}
83
69
 
84
- **Issues Encountered:**
85
-
86
- - {Issue and resolution}
87
-
88
70
  ---
89
71
 
90
72
  ### Task p01-t02: {Task Name}
@@ -92,10 +74,6 @@ oat_template_name: implementation
92
74
  **Status:** pending
93
75
  **Commit:** -
94
76
 
95
- **Notes:**
96
-
97
- - {Notes will be added during implementation}
98
-
99
77
  ---
100
78
 
101
79
  ## Phase 2: {Phase Name}
@@ -112,58 +90,19 @@ oat_template_name: implementation
112
90
 
113
91
  ## Orchestration Runs
114
92
 
115
- _Each run from `oat-project-implement` appends an entry below with:_
116
- _- Run header (number, timestamp, branch, tier, policy, phase counts)_
117
- _- Phase Outcomes table_
118
- _- Parallel Groups list_
119
- _- Outstanding Items_
93
+ <!-- One line per dispatch request id, rendered by `oat project dispatch record --format line` and written as a list item. Update that line in place with the terminal outcome; never paste the record or event JSON. -->
120
94
 
121
95
  <!-- orchestration-runs-start -->
122
96
 
123
- _Orchestration runs from `oat-project-implement` are appended here, most-recent-first within the file but append-only at the bottom of the log._
124
-
125
97
  <!-- orchestration-runs-end -->
126
98
 
127
- ---
128
-
129
- ## Implementation Log
130
-
131
- Chronological log of implementation progress.
132
-
133
- ### YYYY-MM-DD
134
-
135
- **Session Start:** {time}
136
-
137
- - [x] p01-t01: {Task name} - {commit sha}
138
- - [ ] p01-t02: {Task name} - in progress
139
-
140
- **What changed (high level):**
99
+ ## Reviews and Gates
141
100
 
142
- - {short bullets suitable for PR/docs}
101
+ <!-- Receipts for final and multi-phase reviews (a phase review receipt may stay in its phase) and one terminal line per gate run. state.md owns gate transitions; this slot keeps the outcome, waivers and operator choices. -->
143
102
 
144
- **Decisions:**
103
+ ## Deferred Findings
145
104
 
146
- - {Decision made and rationale}
147
-
148
- **Follow-ups / TODO:**
149
-
150
- - {anything discovered during implementation that should be captured for later}
151
-
152
- **Blockers:**
153
-
154
- - {Blocker description} - {status: resolved/pending}
155
-
156
- **Session End:** {time}
157
-
158
- ---
159
-
160
- ### YYYY-MM-DD
161
-
162
- **Session Start:** {time}
163
-
164
- {Continue log...}
165
-
166
- ---
105
+ <!-- One line per approved deferral (finding, rationale, approval, follow-up trigger), plus excluded parallel phases and unmerged worktrees. -->
167
106
 
168
107
  ## Deviations from Plan / Design
169
108
 
@@ -173,15 +112,6 @@ Document any intentional deviations from the original plan, spec, or design. Inc
173
112
  | ------------- | --------------- | -------------------- | ----------------- | ------ | --------------- | --------- |
174
113
  | - | - | - | - | - | - | - |
175
114
 
176
- ## Test Results
177
-
178
- Track test execution during implementation.
179
-
180
- | Phase | Tests Run | Passed | Failed | Coverage |
181
- | ----- | --------- | ------ | ------ | -------- |
182
- | 1 | - | - | - | - |
183
- | 2 | - | - | - | - |
184
-
185
115
  ## Final Summary (for PR/docs)
186
116
 
187
117
  **What shipped:**
@@ -8,40 +8,11 @@ oat_last_updated: YYYY-MM-DD
8
8
 
9
9
  # Project Log: {Project Name}
10
10
 
11
- This append-only log serves two audiences: the project team learning from this project's execution, and maintainers improving the general OAT workflow and tooling.
12
-
13
- ## Logging contract
14
-
15
- Append when something breaks, surprises you, requires a workaround, or works notably well enough to preserve as do-not-regress evidence. Record evidence, not a running narrative. Prior entries are never edited or struck through; append corrections as a new judgment entry that references the original entry and explains the correction. Add a version note to tool-related observations. Create entries only with `oat project log append`; run `oat project log append --help` for the complete entry contract. Reference supporting artifacts by path instead of inlining them. Never record secret values such as tokens, keys, signed URLs, or credentials because this log rolls up into tracked surfaces; reference secrets by name or source, never by value.
16
-
17
- Judgment entries default to 1–3 sentences covering what happened, the impact or workaround, and any follow-up. High-value entries may instead use this structured body:
18
-
19
- ```text
20
- Observation: What happened and the supporting evidence.
21
- Impact: Why it mattered or what workaround was required.
22
- Recommendation: What should change or be preserved.
23
- ```
24
-
25
- Shared tracked surfaces must be written only from the root checkout, never from parallel worktrees.
26
-
27
- ## Entry format
28
-
29
- Judgment entries:
30
-
31
- ```text
32
- ### YYYY-MM-DD · <project|general> · <bug|friction|worked-well|feedback> · <area>
33
- ```
34
-
35
- Structural entries:
36
-
37
- ```text
38
- ### YYYY-MM-DD · structural · <producer> · <ref>
39
- ```
11
+ Append-only evidence of what broke, surprised, or worked: write entries only with `oat project log append` (see its `--help`), never edit a prior entry, and never record secret values.
12
+ Contract, entry grammar and roll-up: https://voxmedia.github.io/open-agent-toolkit/workflows/projects/execution/project-log
40
13
 
41
14
  ## Entries
42
15
 
43
- Entries are chronological and append-only.
44
-
45
16
  ## End-of-run synthesis (pending — do not skip at project completion)
46
17
 
47
18
  Summarize the overall verdict, adopted adjustments, and entries graduated to the repo ledger or backlog. Roll up durable observations into tracked surfaces before archiving this project log.
@@ -22,7 +22,10 @@ oat_template_name: project-retro
22
22
  <!-- Rendered artifacts must replace oat_retro_project with a non-null project
23
23
  slug and oat_retro_generated with a UTC YYYY-MM-DDTHH:MM:SSZ timestamp,
24
24
  set oat_template: false, and remove oat_template_name. Record every
25
- inspected evidence source above with status: used | unavailable. When an
25
+ inspected evidence source above with status: used | unavailable.
26
+ project-log covers the unified learnings (category-bearing judgment
27
+ entries) and is read first; oat-execution-learnings is the legacy file,
28
+ read second and recorded unavailable when absent. When an
26
29
  evidence family is partial, split it into truthful source entries, such as
27
30
  archived-review-markdown: unavailable and gate-receipts: used. Do not add
28
31
  a `partial` evidence status. Derivative current-run reconnaissance