@quolu/lattice 0.36.1 → 0.38.0

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/README.ja.md CHANGED
@@ -43,6 +43,21 @@ planを再コンパイルします。共有面が共有でなくなるので、
43
43
 
44
44
  人が手で切ったのではありません。**工程を並列化するために製品が切りました。**
45
45
 
46
+ ### 作業記憶はToDoと一緒に渡る
47
+
48
+ AIは、次の担当が作業を続けるために必要な方針、棄却案、調査結果、注意、未解決事項をToDoへ追記できます。
49
+ 通常の`lattice todo show`と、成功するすべての`lattice todo start`は、元version/元task、訂正状態、
50
+ note chain head、overflow、全履歴コマンドを含む最新のbounded `note_context`を自動で返します。
51
+ 次のAIが別のnote読取コマンドを知っている必要はありません。
52
+
53
+ ```bash
54
+ lattice todo note --plan <key> --task <id> --message "既存parserを使い、fallbackは追加しない"
55
+ lattice todo show --plan <key> --task <id> --json
56
+ ```
57
+
58
+ ローカルGanttでは、選択したToDoの右ペインへ同じ作業記録を表示します。公開Gantt/dashboardは契約として
59
+ note本文を含めません。
60
+
46
61
  ### 変換の受入五条件
47
62
 
48
63
  **5つすべて**を満たしたときだけ採用します。1つでも欠ければ棄却です。
@@ -213,6 +228,20 @@ lattice todo phase review --plan <key> --phase terminal-audit --reason <text>
213
228
  lattice todo phase accept --plan <key> --phase terminal-audit --input <file>
214
229
  ```
215
230
 
231
+ **過去の工程は監査できません。** 監査対象のコードが既に変化しているためです。そこで
232
+ 「監査なしで閉じた」という状態を別に持ちます——`accepted`(監査を通った)へは絶対に化けず、
233
+ 記録は永久に区別できます。工程図では畳まれるので監査待ちの札は外れます。
234
+
235
+ ```bash
236
+ lattice todo phase close-unaudited --plan <key> --phase terminal-audit --reason <text>
237
+ lattice todo phase baseline --reason <text> --except <監査したいplan_key> # 一括
238
+ ```
239
+
240
+ 一括の入口は、現在監査待ちで一度も監査に触れていないPhaseだけを対象にします。**自動では
241
+ 実行しません**——どれを監査し、どれを歴史として畳むかは人が決め、Latticeは宣言を受け取って
242
+ 記録するだけです。`--except`は「最近の作業でコードも生きているので本当に監査したい」planを
243
+ 残すための口です。規約は[ADR 0148](docs/adr/0148-history-closes-unaudited-not-audited.md)が正です。
244
+
216
245
  誤ってphase無しで作ったplanへ後からPhaseを被せる場合は、`revise-phase`の
217
246
  `state_policy: acquire_phase`でdone状態を保ったまま獲得できます(未割当→割当の向きだけを許し、
218
247
  既にphaseを持つtaskの付け替えは拒否します)。
package/README.md CHANGED
@@ -58,6 +58,22 @@ the same parallel group.
58
58
 
59
59
  Nobody hand-refactored that file. The product cut it so the work could parallelize.
60
60
 
61
+ ### Task memory travels with the task
62
+
63
+ An agent can append the decisions, rejected approaches, findings, cautions, and open questions needed
64
+ to continue a ToDo. A normal `lattice todo show` and every successful `lattice todo start` return the
65
+ latest bounded `note_context` automatically, including origin, correction state, chain head, overflow,
66
+ and the full-history command. The next agent does not need to discover or remember a separate note
67
+ lookup command.
68
+
69
+ ```bash
70
+ lattice todo note --plan <key> --task <id> --message "Use the existing parser; do not add a fallback"
71
+ lattice todo show --plan <key> --task <id> --json
72
+ ```
73
+
74
+ The same context appears in the selected ToDo's detail pane in a local Gantt. Public Gantt and
75
+ dashboard rendering exclude note bodies by contract.
76
+
61
77
  ### The five acceptance conditions
62
78
 
63
79
  A transform is adopted only when **all five** hold. One missing condition rejects it:
@@ -158,6 +174,15 @@ rejected over it; the requirement is reported instead. And the audit gate never
158
174
  phases order reviews, the ToDo DAG orders work
159
175
  ([ADR 0147](docs/adr/0147-audit-is-on-by-default.md)).
160
176
 
177
+ **History closes unaudited, never audited.** Work that finished long ago cannot be audited — the
178
+ code under review has already moved. Demanding an audit there produces either a false finding
179
+ (pointing at a later, intentional change) or a rubber stamp. So there is a third terminal state,
180
+ `closed_unaudited`: recorded with a reason, folded away like finished work, and **structurally
181
+ incapable of passing as `accepted`** — phase-accept dependencies unlock on `accepted` alone. The
182
+ bulk entry point never runs by itself, and the machine never infers "old enough to skip"; a human
183
+ decides what gets audited and what becomes history
184
+ ([ADR 0148](docs/adr/0148-history-closes-unaudited-not-audited.md)).
185
+
161
186
  ## Patent
162
187
 
163
188
  The design in this repository is the subject of a Japanese patent application:
@@ -5,7 +5,7 @@ import path from 'node:path';
5
5
 
6
6
  import { readTodoStoreStable } from '../src/todo-store.mjs';
7
7
  import { projectTodoStatus } from '../src/todo-status.mjs';
8
- import { ganttLiveHeadDigest, renderTodoGanttForProject } from '../src/todo-cli.mjs';
8
+ import { ganttLiveHeadDigest, renderPublicTodoGanttForProject } from '../src/todo-cli.mjs';
9
9
  import {
10
10
  readVisibleTodoDashboardProjects,
11
11
  writeTodoDashboardDaemonDescriptor,
@@ -87,7 +87,7 @@ async function synchronize() {
87
87
  displayName: entry.display_name,
88
88
  render: async ({ displayName }) => {
89
89
  const store = await readCachedStore(entry.repo_root);
90
- const result = await renderTodoGanttForProject({ repoRoot: entry.repo_root,
90
+ const result = await renderPublicTodoGanttForProject({ repoRoot: entry.repo_root,
91
91
  stable: true, displayName, readModel: store });
92
92
  return {
93
93
  html: result.rendered.html,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quolu/lattice",
3
- "version": "0.36.1",
3
+ "version": "0.38.0",
4
4
  "description": "Schedulability compiler for multi-agent development: observe real code boundaries, refactor the conflicting seam, recompile the plan for parallel execution",
5
5
  "author": {
6
6
  "name": "Quo / クオ at kitepon.dev",
package/src/cli-help.mjs CHANGED
@@ -61,6 +61,8 @@ Commands:
61
61
 
62
62
  Read commands:
63
63
  status [--json]
64
+ show --plan <key> --task <id> --json # 個別ToDoと最新bounded note contextを追加操作なしで返す
65
+ note list --plan <key> [--task <id>] --json # note全履歴の診断面(通常read/startでは不要)
64
66
  bindings [--plan <key>] [--json] # compile_binding付きTaskをTODO identityつきで投影する
65
67
  independence [--plan <key>] [--json] # readyを検証済み並列・要直列・未検査へ分けて投影する
66
68
  seam-profile --plan <key> --file <path> [--json] # 係争fileの切断コスト内訳を投影する(read-only)
@@ -73,6 +75,8 @@ Read commands:
73
75
  phase status --plan <key>
74
76
 
75
77
  Write commands:
78
+ note --plan <key> --task <id> (--message <text>|--input <file>)
79
+ # ToDoへ作業継続に必要な方針・調査結果・注意をappend-onlyで追記する
76
80
  migrate --input <extraction.json> [--serialization-reviewed]
77
81
  # 既存storeへplanを追加する(plan createは空store初期化専用)。
78
82
  # 依存グラフがほぼ一直線なら一度突き返し、再考後の --serialization-reviewed で通す
@@ -98,6 +102,12 @@ Write commands:
98
102
  phase review --plan <key> --phase <id> --reason <text>
99
103
  phase <accept|reject> --plan <key> --phase <id> --input <file>
100
104
  phase reopen --plan <key> --phase <id> --reason <text> [--override-reason <text>]
105
+ phase close-unaudited --plan <key> --phase <id> --reason <text>
106
+ # 監査せず「監査なしで閉じた」として明示的に閉じる(ADR 0148)。前提はgate_readyで、
107
+ # acceptedへは化けない(phase_accept_dependenciesを解錠しない)
108
+ phase baseline --reason <text> [--except <plan_key>]...
109
+ # 現在gate_readyかつphase eventを1つも持たないPhaseを一括でclosed_unauditedへ宣言する。
110
+ # 自動実行はしない(明示コマンドのみ)。--exceptで指定したplanは対象から除外する
101
111
 
102
112
  Write commands require LATTICE_TODO_ACTOR_HOST, LATTICE_TODO_ACTOR_SESSION,
103
113
  and LATTICE_TODO_ACTOR_AGENT.
@@ -162,6 +172,9 @@ const SUBCOMMAND_USAGE = Object.freeze({
162
172
  'run seam resolve': 'run seam resolve --run .lattice/runs/<id> --finding <digest> --input <seam-request.json>',
163
173
  'event verify': 'event verify --run .lattice/runs/<id>',
164
174
  'todo status': 'todo status [--json]',
175
+ 'todo show': 'todo show --plan <key> --task <id> --json',
176
+ 'todo note': 'todo note --plan <key> --task <id> (--message <text>|--input <file>) | list --plan <key> [--task <id>] --json',
177
+ 'todo note list': 'todo note list --plan <key> [--task <id>] --json',
165
178
  'todo bindings': 'todo bindings [--plan <key>] [--json]',
166
179
  'todo independence': 'todo independence [--plan <key>] [--json] | compile --plan <key> --input <file> | witness migrate --plan <key>',
167
180
  'todo seam-profile': 'todo seam-profile --plan <key> --file <path> [--json]',
@@ -169,12 +182,15 @@ const SUBCOMMAND_USAGE = Object.freeze({
169
182
  'todo verify': 'todo verify [--plan <key>] [--json]',
170
183
  'todo snapshot': 'todo snapshot --rebuild --plan <key>',
171
184
  'todo gantt': 'todo gantt [--out <file>] [--scope live|all] | status [--out <file>] | serve --port <port> [--scope live|all]',
172
- 'todo phase': 'todo phase <status|review|accept|reject|reopen> --plan <key> [options]',
185
+ 'todo phase': 'todo phase <status|review|accept|reject|reopen|close-unaudited> --plan <key> [options]'
186
+ + ' | baseline --reason <text> [--except <plan_key>]...',
173
187
  'todo phase status': 'todo phase status --plan <key>',
174
188
  'todo phase review': 'todo phase review --plan <key> --phase <id> --reason <text>',
175
189
  'todo phase accept': 'todo phase accept --plan <key> --phase <id> --input <file>',
176
190
  'todo phase reject': 'todo phase reject --plan <key> --phase <id> --input <file>',
177
191
  'todo phase reopen': 'todo phase reopen --plan <key> --phase <id> --reason <text> [--override-reason <text>]',
192
+ 'todo phase close-unaudited': 'todo phase close-unaudited --plan <key> --phase <id> --reason <text>',
193
+ 'todo phase baseline': 'todo phase baseline --reason <text> [--except <plan_key>]...',
178
194
  'todo start': 'todo start --plan <key> --task <id> [--parallel-frontier|--override-reason <text>]',
179
195
  'todo block': 'todo block --plan <key> --task <id> --reason <text>',
180
196
  'todo unblock': 'todo unblock --plan <key> --task <id>',