mister-wolf 2.17.0 → 2.18.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.
Files changed (101) hide show
  1. package/README.md +31 -18
  2. package/README.ru.md +25 -14
  3. package/dist/adapters/cli/cli-entry.d.ts.map +1 -1
  4. package/dist/adapters/cli/cli-entry.js +8 -0
  5. package/dist/adapters/cli/cli-entry.js.map +1 -1
  6. package/dist/adapters/cli/commands/claim.d.ts +6 -0
  7. package/dist/adapters/cli/commands/claim.d.ts.map +1 -0
  8. package/dist/adapters/cli/commands/claim.js +74 -0
  9. package/dist/adapters/cli/commands/claim.js.map +1 -0
  10. package/dist/adapters/cli/commands/face.d.ts.map +1 -1
  11. package/dist/adapters/cli/commands/face.js +36 -3
  12. package/dist/adapters/cli/commands/face.js.map +1 -1
  13. package/dist/adapters/cli/commands/memory-doctor.d.ts.map +1 -1
  14. package/dist/adapters/cli/commands/memory-doctor.js +37 -5
  15. package/dist/adapters/cli/commands/memory-doctor.js.map +1 -1
  16. package/dist/adapters/cli/commands/memory-edit.d.ts.map +1 -1
  17. package/dist/adapters/cli/commands/memory-edit.js +6 -52
  18. package/dist/adapters/cli/commands/memory-edit.js.map +1 -1
  19. package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
  20. package/dist/adapters/cli/commands/memory-init.js +26 -1
  21. package/dist/adapters/cli/commands/memory-init.js.map +1 -1
  22. package/dist/adapters/cli/commands/memory-scaffold.d.ts.map +1 -1
  23. package/dist/adapters/cli/commands/memory-scaffold.js +2 -1
  24. package/dist/adapters/cli/commands/memory-scaffold.js.map +1 -1
  25. package/dist/adapters/fs/claim-registry.d.ts +114 -0
  26. package/dist/adapters/fs/claim-registry.d.ts.map +1 -0
  27. package/dist/adapters/fs/claim-registry.js +343 -0
  28. package/dist/adapters/fs/claim-registry.js.map +1 -0
  29. package/dist/adapters/fs/memory-root.d.ts +26 -1
  30. package/dist/adapters/fs/memory-root.d.ts.map +1 -1
  31. package/dist/adapters/fs/memory-root.js +88 -2
  32. package/dist/adapters/fs/memory-root.js.map +1 -1
  33. package/dist/app/use-cases/build-analytics.d.ts +22 -0
  34. package/dist/app/use-cases/build-analytics.d.ts.map +1 -1
  35. package/dist/app/use-cases/build-analytics.js +34 -0
  36. package/dist/app/use-cases/build-analytics.js.map +1 -1
  37. package/dist/app/use-cases/claim-artifact.d.ts +34 -0
  38. package/dist/app/use-cases/claim-artifact.d.ts.map +1 -0
  39. package/dist/app/use-cases/claim-artifact.js +43 -0
  40. package/dist/app/use-cases/claim-artifact.js.map +1 -0
  41. package/dist/app/use-cases/create-face-version.d.ts +26 -4
  42. package/dist/app/use-cases/create-face-version.d.ts.map +1 -1
  43. package/dist/app/use-cases/create-face-version.js +9 -133
  44. package/dist/app/use-cases/create-face-version.js.map +1 -1
  45. package/dist/app/use-cases/edit-memory-object.d.ts +26 -0
  46. package/dist/app/use-cases/edit-memory-object.d.ts.map +1 -0
  47. package/dist/app/use-cases/edit-memory-object.js +57 -0
  48. package/dist/app/use-cases/edit-memory-object.js.map +1 -0
  49. package/dist/app/use-cases/face-operation.d.ts +81 -0
  50. package/dist/app/use-cases/face-operation.d.ts.map +1 -0
  51. package/dist/app/use-cases/face-operation.js +503 -0
  52. package/dist/app/use-cases/face-operation.js.map +1 -0
  53. package/dist/app/use-cases/get-call-injections.d.ts +12 -1
  54. package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
  55. package/dist/app/use-cases/get-call-injections.js +73 -12
  56. package/dist/app/use-cases/get-call-injections.js.map +1 -1
  57. package/dist/app/use-cases/init-project.d.ts +6 -0
  58. package/dist/app/use-cases/init-project.d.ts.map +1 -1
  59. package/dist/app/use-cases/init-project.js +34 -1
  60. package/dist/app/use-cases/init-project.js.map +1 -1
  61. package/dist/app/use-cases/migrate-faces.d.ts +45 -11
  62. package/dist/app/use-cases/migrate-faces.d.ts.map +1 -1
  63. package/dist/app/use-cases/migrate-faces.js +234 -32
  64. package/dist/app/use-cases/migrate-faces.js.map +1 -1
  65. package/dist/app/use-cases/promote-memory.d.ts +14 -1
  66. package/dist/app/use-cases/promote-memory.d.ts.map +1 -1
  67. package/dist/app/use-cases/promote-memory.js +36 -5
  68. package/dist/app/use-cases/promote-memory.js.map +1 -1
  69. package/dist/app/use-cases/scaffold-artifact.d.ts +5 -0
  70. package/dist/app/use-cases/scaffold-artifact.d.ts.map +1 -1
  71. package/dist/app/use-cases/scaffold-artifact.js +2 -0
  72. package/dist/app/use-cases/scaffold-artifact.js.map +1 -1
  73. package/dist/app/use-cases/seed-base-playbooks.d.ts +3 -3
  74. package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -1
  75. package/dist/app/use-cases/seed-base-playbooks.js +75 -29
  76. package/dist/app/use-cases/seed-base-playbooks.js.map +1 -1
  77. package/dist/app/use-cases/supersede-memory-object.d.ts +3 -1
  78. package/dist/app/use-cases/supersede-memory-object.d.ts.map +1 -1
  79. package/dist/app/use-cases/supersede-memory-object.js +8 -1
  80. package/dist/app/use-cases/supersede-memory-object.js.map +1 -1
  81. package/dist/app/use-cases/transition-memory-object.d.ts.map +1 -1
  82. package/dist/app/use-cases/transition-memory-object.js +6 -0
  83. package/dist/app/use-cases/transition-memory-object.js.map +1 -1
  84. package/dist/domain/memory-types.d.ts +28 -2
  85. package/dist/domain/memory-types.d.ts.map +1 -1
  86. package/dist/domain/memory-types.js +50 -2
  87. package/dist/domain/memory-types.js.map +1 -1
  88. package/dist/domain/schemas/memory-event-schema.d.ts +4 -0
  89. package/dist/domain/schemas/memory-event-schema.d.ts.map +1 -1
  90. package/dist/domain/schemas/memory-event-schema.js +12 -0
  91. package/dist/domain/schemas/memory-event-schema.js.map +1 -1
  92. package/dist/domain/type-schema-builder.d.ts +1 -1
  93. package/dist/domain/type-schema-builder.d.ts.map +1 -1
  94. package/dist/domain/type-schema-builder.js +20 -0
  95. package/dist/domain/type-schema-builder.js.map +1 -1
  96. package/package.json +1 -1
  97. package/templates/.wolf/router.log +1 -1
  98. package/templates/base/agents/steward.md +9 -6
  99. package/templates/base/playbooks/complaint-protocol.md +1 -1
  100. package/templates/base/playbooks/steward-nastavnik.md +36 -17
  101. package/templates/base/skills/wolf-brainstorm/SKILL.md +25 -0
@@ -1,10 +1,234 @@
1
+ import { resolveCreatedBy } from '../../domain/actor.js';
1
2
  import { createFaceVersion } from './create-face-version.js';
2
3
  import { supersedeMemoryObject } from './supersede-memory-object.js';
4
+ import { generateOpId } from './face-operation.js';
5
+ /** Дословный формат reason миграции волны 2.17 (migrate-faces.ts:95 той волны);
6
+ * детект healing — только точное равенство (anchored, с суффиксом), усечённое
7
+ * сравнение запрещено (ADR-4: риск «формат сломает детект» закрыт контрактом). */
8
+ function legacyMigrationReason(headId) {
9
+ return `migrated from playbook note ${headId} (2.17)`;
10
+ }
3
11
  async function facesOfOwner(store, ownerSkill) {
4
12
  return (await store.list({ type: 'face' }))
5
13
  .filter((o) => o.owner_skill === ownerSkill)
6
14
  .map((o) => o);
7
15
  }
16
+ function parseMigrateOps(events) {
17
+ const ops = new Map();
18
+ let seq = 0;
19
+ for (const e of events) {
20
+ const opId = typeof e.payload['opId'] === 'string' ? e.payload['opId'] : null;
21
+ if (opId === null)
22
+ continue;
23
+ if (e.type === 'memory.face.op_started') {
24
+ if (e.payload['command'] !== 'migrate')
25
+ continue;
26
+ const plan = Array.isArray(e.payload['plan']) ? e.payload['plan'].map(String) : [];
27
+ ops.set(opId, {
28
+ opId,
29
+ ownerSkill: String(e.payload['owner_skill'] ?? ''),
30
+ healing: plan[0] !== 'add_face',
31
+ input: (e.payload['input'] ?? {}),
32
+ steps: new Set(),
33
+ seq: seq++,
34
+ });
35
+ }
36
+ else if (e.type === 'memory.face.op_step') {
37
+ const op = ops.get(opId);
38
+ if (op)
39
+ op.steps.add(String(e.payload['step']));
40
+ }
41
+ else if (e.type === 'memory.face.op_committed' || e.type === 'memory.face.op_aborted') {
42
+ // незавершённая = нет op_committed/op_aborted (как incompleteFaceOperations §3.3)
43
+ ops.delete(opId);
44
+ }
45
+ }
46
+ return ops;
47
+ }
48
+ async function appendFaceEvent(deps, type, payload, actor) {
49
+ const now = deps.clock.now();
50
+ await deps.log.append({ id: deps.idGen.generateEventId(now), type, timestamp: now.toISOString(), actor, payload });
51
+ }
52
+ /** FTS-индекс производный (§3.3): сбой его обновления не рушит healing —
53
+ * зеркалирует safeIndex face-operation.ts (обёртка без прототипного spread). */
54
+ function healingSafeIndex(deps, opId) {
55
+ const idx = deps.index;
56
+ if (!idx)
57
+ return undefined;
58
+ return {
59
+ rebuild: (objects) => idx.rebuild(objects),
60
+ indexObject: (o) => idx.indexObject(o).catch((err) => {
61
+ console.error(`face healing ${opId}: FTS index update failed (wolf doctor --repair rebuilds it): ${err instanceof Error ? err.message : String(err)}`);
62
+ }),
63
+ removeObject: (id) => idx.removeObject(id),
64
+ search: (q, o) => idx.search(q, o),
65
+ };
66
+ }
67
+ /** Healing-операция (§3.4 разбор 3): дозавершение доказуемо связанного
68
+ * legacy-перехода — ТОЛЬКО переходы статусов и события; body лица не пишется
69
+ * (REQ-04 AC-3). Каждый шаг идемпотентен (повторный supersede_legacy — skip);
70
+ * resume существующей незавершённой healing-операции — по её op_started input
71
+ * (faceId/headId записаны в него — resume детерминирован). Идёт под тем же
72
+ * MemoryLock, что и fresh-миграция (createFaceVersion берёт его сам; lock
73
+ * не реентерабелен — внутри шагов lock не берётся). */
74
+ async function healLegacyTransition(deps, ownerSkill, face, headId, existing, actor) {
75
+ const run = async () => {
76
+ let opId;
77
+ let done;
78
+ if (existing) {
79
+ opId = existing.opId;
80
+ done = existing.steps;
81
+ }
82
+ else {
83
+ opId = generateOpId(deps.clock);
84
+ await appendFaceEvent(deps, 'memory.face.op_started', {
85
+ opId,
86
+ command: 'migrate',
87
+ owner_skill: ownerSkill,
88
+ plan: ['supersede_legacy', 'announce'],
89
+ input: { command: 'migrate', ownerSkill, reason: face.reason, faceId: face.id, headId },
90
+ }, actor);
91
+ done = new Set();
92
+ }
93
+ // supersede_legacy — уже погашенный head не перезаписывается (идемпотентность)
94
+ const head = await deps.store.get(headId);
95
+ if (head && head.status !== 'superseded') {
96
+ await supersedeMemoryObject({ store: deps.store, log: deps.log, clock: deps.clock, idGen: deps.idGen, index: healingSafeIndex(deps, opId) }, headId, face.id);
97
+ }
98
+ if (!done.has('supersede_legacy')) {
99
+ await appendFaceEvent(deps, 'memory.face.op_step', { opId, step: 'supersede_legacy', detail: { head_id: headId, face_id: face.id } }, actor);
100
+ done.add('supersede_legacy');
101
+ }
102
+ deps.fault?.('supersede_legacy');
103
+ // announce — идемпотентен по событию memory.face.versioned(new = face)
104
+ const announced = (await deps.log.readAll()).some((e) => e.type === 'memory.face.versioned' && e.payload['new'] === face.id);
105
+ if (!announced) {
106
+ await appendFaceEvent(deps, 'memory.face.versioned', { owner_skill: ownerSkill, from: null, new: face.id, initiator: 'migration', reason: face.reason }, actor);
107
+ }
108
+ if (!done.has('announce')) {
109
+ await appendFaceEvent(deps, 'memory.face.op_step', { opId, step: 'announce' }, actor);
110
+ done.add('announce');
111
+ }
112
+ // op_committed — F7-крайний случай: дозаписывается повторным запуском
113
+ const committed = (await deps.log.readAll()).some((e) => e.type === 'memory.face.op_committed' && e.payload['opId'] === opId);
114
+ if (!committed) {
115
+ deps.fault?.('op_committed');
116
+ await appendFaceEvent(deps, 'memory.face.op_committed', { opId }, actor);
117
+ }
118
+ };
119
+ return deps.lock ? deps.lock.withLock(run) : run();
120
+ }
121
+ async function migrateOwner(deps, ownerSkill, records, actor) {
122
+ // §3.4 разбор 1: незавершённая операция migrate владельца → resume
123
+ const migrateOps = parseMigrateOps(await deps.log.readAll());
124
+ const lastUnfinished = (healing) => [...migrateOps.values()]
125
+ .filter((o) => o.healing === healing && o.ownerSkill === ownerSkill)
126
+ .sort((a, b) => a.seq - b.seq)
127
+ .pop() ?? null;
128
+ const unfinishedMigration = lastUnfinished(false);
129
+ let resumed = false;
130
+ if (unfinishedMigration) {
131
+ // input — JSON-чистый payload op_started (JSONL); недоверенные ключи createFaceVersion
132
+ // валидирует сам (reason/body обязательны, guard — до op_started)
133
+ await createFaceVersion(deps, unfinishedMigration.input);
134
+ resumed = true;
135
+ }
136
+ // разборы 2–4 — по фактическому состоянию store (журнал — намёк, store — истина)
137
+ const liveFaces = (await facesOfOwner(deps.store, ownerSkill)).filter((f) => f.status === 'active' || f.status === 'candidate');
138
+ const heads = (await Promise.all(records.map((r) => deps.store.get(r.id)))).filter((r) => r !== null && r.status !== 'superseded');
139
+ if (liveFaces.length > 1) {
140
+ return {
141
+ conflict: {
142
+ kind: 'multiple-faces',
143
+ error: `owner ${ownerSkill} has ${liveFaces.length} live faces (${liveFaces.map((f) => f.id).join(', ')}) — ambiguous, resolve manually`,
144
+ },
145
+ };
146
+ }
147
+ if (heads.length > 1) {
148
+ return {
149
+ conflict: {
150
+ kind: 'multiple-legacy-heads',
151
+ error: `owner ${ownerSkill} has ${heads.length} active legacy playbook notes (${heads.map((h) => h.id).join(', ')}) — ambiguous legacy head, resolve manually`,
152
+ },
153
+ };
154
+ }
155
+ // дозавершение незавершённой healing-операции (сбой внутри healing)
156
+ const unfinishedHealing = lastUnfinished(true);
157
+ if (unfinishedHealing) {
158
+ const faceId = typeof unfinishedHealing.input['faceId'] === 'string' ? unfinishedHealing.input['faceId'] : null;
159
+ const headId = typeof unfinishedHealing.input['headId'] === 'string' ? unfinishedHealing.input['headId'] : null;
160
+ const face = faceId ? (await deps.store.get(faceId)) : null;
161
+ if (!face || !headId) {
162
+ return {
163
+ conflict: {
164
+ kind: 'broken-healing-op',
165
+ error: `unfinished healing operation ${unfinishedHealing.opId} lacks face/head binding — resolve manually (wolf face recover ${unfinishedHealing.opId})`,
166
+ },
167
+ };
168
+ }
169
+ await healLegacyTransition(deps, ownerSkill, face, headId, unfinishedHealing, actor);
170
+ resumed = true;
171
+ }
172
+ if (liveFaces.length === 1) {
173
+ const face = liveFaces[0];
174
+ if (heads.length === 0) {
175
+ return {
176
+ outcome: {
177
+ ownerSkill,
178
+ action: resumed ? 'resumed' : 'skipped',
179
+ faceId: face.id,
180
+ reason: resumed
181
+ ? 'unfinished migration operation completed by re-run (resume)'
182
+ : 'face already exists and no active legacy head — idempotent, nothing to do',
183
+ },
184
+ };
185
+ }
186
+ const head = heads[0];
187
+ if (face.reason === legacyMigrationReason(head.id)) {
188
+ // доказуемая связь → healing; body не пишется (AC-3)
189
+ await healLegacyTransition(deps, ownerSkill, face, head.id, null, actor);
190
+ return {
191
+ outcome: {
192
+ ownerSkill,
193
+ action: resumed ? 'resumed' : 'healed',
194
+ faceId: face.id,
195
+ headId: head.id,
196
+ reason: `provable link by exact reason "${legacyMigrationReason(head.id)}" — legacy head superseded, face body untouched`,
197
+ },
198
+ };
199
+ }
200
+ return {
201
+ conflict: {
202
+ kind: 'reason-mismatch',
203
+ error: `face ${face.id} of ${ownerSkill} does not prove the link to active legacy head ${head.id} (expected exact reason "${legacyMigrationReason(head.id)}", got "${face.reason}") — not healing blindly, resolve manually`,
204
+ },
205
+ };
206
+ }
207
+ // fresh-миграция: дословный перенос (ADR-4 волны 2.17: FTS-совместимость router)
208
+ if (heads.length === 0) {
209
+ return {
210
+ outcome: {
211
+ ownerSkill,
212
+ action: 'skipped',
213
+ reason: 'no active playbook note — superseded chain stays legacy and reads as before',
214
+ },
215
+ };
216
+ }
217
+ const head = heads[0];
218
+ const reason = legacyMigrationReason(head.id);
219
+ const { face } = await createFaceVersion(deps, {
220
+ command: 'migrate',
221
+ ownerSkill,
222
+ reason,
223
+ title: head.title,
224
+ body: head.body,
225
+ tags: head.tags,
226
+ legacyHeadId: head.id,
227
+ });
228
+ return {
229
+ outcome: { ownerSkill, action: resumed ? 'resumed' : 'migrated', faceId: face.id, headId: head.id, reason },
230
+ };
231
+ }
8
232
  export async function migrateFaces(deps) {
9
233
  const skippedHowtoIds = [];
10
234
  const byOwner = new Map();
@@ -20,46 +244,24 @@ export async function migrateFaces(deps) {
20
244
  }
21
245
  const outcomes = [];
22
246
  const failed = [];
247
+ const conflicts = [];
248
+ const actor = resolveCreatedBy(undefined, deps.env ?? process.env);
23
249
  for (const [ownerSkill, records] of [...byOwner.entries()].sort(([a], [b]) => a.localeCompare(b))) {
24
250
  try {
25
- if ((await facesOfOwner(deps.store, ownerSkill)).length > 0) {
26
- outcomes.push({
27
- ownerSkill,
28
- action: 'skipped',
29
- reason: 'face already exists — re-run is safe (idempotent)',
30
- });
31
- continue;
251
+ const result = await migrateOwner(deps, ownerSkill, records, actor);
252
+ if (result.conflict) {
253
+ conflicts.push({ ownerSkill, ...result.conflict });
254
+ // параллельная запись в failed: существующий CLI-маппинг даёт exit ≠ 0
255
+ failed.push({ ownerSkill, error: result.conflict.error });
32
256
  }
33
- // head — активная (non-superseded) playbook-запись; дубль активных — территория doctor
34
- const head = records
35
- .filter((r) => r.status !== 'superseded')
36
- .sort((a, b) => b.updated_at.localeCompare(a.updated_at))[0];
37
- if (!head) {
38
- outcomes.push({
39
- ownerSkill,
40
- action: 'skipped',
41
- reason: 'no active playbook note — superseded chain stays legacy and reads as before',
42
- });
43
- continue;
257
+ else if (result.outcome) {
258
+ outcomes.push(result.outcome);
44
259
  }
45
- const reason = `migrated from playbook note ${head.id} (2.17)`;
46
- const { face } = await createFaceVersion(deps, {
47
- command: 'migrate',
48
- ownerSkill,
49
- reason,
50
- // дословный перенос (ADR-4: совместимость FTS-поиска router, NFR-01)
51
- title: head.title,
52
- body: head.body,
53
- tags: head.tags,
54
- });
55
- // head скрыт (hide-superseded); superseded-цепочка предков не трогается
56
- await supersedeMemoryObject(deps, head.id, face.id);
57
- outcomes.push({ ownerSkill, action: 'migrated', faceId: face.id, headId: head.id, reason });
58
260
  }
59
261
  catch (err) {
60
262
  failed.push({ ownerSkill, error: err instanceof Error ? err.message : String(err) });
61
263
  }
62
264
  }
63
- return { outcomes, skippedHowtoIds, failed };
265
+ return { outcomes, skippedHowtoIds, failed, conflicts };
64
266
  }
65
267
  //# sourceMappingURL=migrate-faces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-faces.js","sourceRoot":"","sources":["../../../src/app/use-cases/migrate-faces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate-faces.js","sourceRoot":"","sources":["../../../src/app/use-cases/migrate-faces.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,24 @@ import { Clock } from '../../ports/clock.port.js';
4
4
  import { IdGenerator } from '../../ports/id-generator.port.js';
5
5
  import { SearchIndex } from '../../ports/search-index.port.js';
6
6
  import { MemoryLock } from '../../ports/memory-lock.port.js';
7
+ import { type WorktreeIdentity } from '../../adapters/fs/memory-root.js';
7
8
  export declare const MAIN_SCOPE = "main";
8
9
  export interface PromoteResult {
9
10
  promoted: number;
11
+ /** Source-токены владельца (через запятую) — печать CLI. */
10
12
  scopeFrom: string;
13
+ /** 2.17.1 REQ-02 (R02), design §3.2: неоднозначные legacy-токены — честный
14
+ * конфликт; объекты этих токенов НЕ переписываются. */
15
+ conflicts: string[];
11
16
  }
12
17
  /** WP3 §6.2 (спека 2.16): шаг finishing-a-development-branch — scoped-объекты
13
- * ворктрии становятся main. Автоудаления нет (P3): только перевод scope. */
18
+ * ворктрии становятся main. Автоудаления нет (P3): только перевод scope.
19
+ * 2.17.1 REQ-02 (R02), design §3.2: резолвит WorktreeIdentity ТЕКУЩЕЙ копии и
20
+ * переводит в main объекты ОБОИХ токенов владельца — WT-ID и однозначное
21
+ * legacy-имя (два семейства scope сосуществуют после обновления, NFR-01);
22
+ * неоднозначное legacy-имя — честный конфликт, объекты не переписываются.
23
+ * Идентичность null (main-чекоут / битые метаданные) — пустое множество токенов
24
+ * владельца: честный отчёт 0 promoted, не ошибка (S-17, решение L0 2026-10-13). */
14
25
  export declare function promoteWorktreeMemory(deps: {
15
26
  store: MemoryStore;
16
27
  log: EventLog;
@@ -18,5 +29,7 @@ export declare function promoteWorktreeMemory(deps: {
18
29
  idGen: IdGenerator;
19
30
  index?: SearchIndex;
20
31
  lock?: MemoryLock;
32
+ /** Тестовый seam: идентичность копии; прод-дефолт — resolveWorktreeIdentity(process.cwd()). */
33
+ resolveIdentity?: () => WorktreeIdentity | null;
21
34
  }, worktree: string): Promise<PromoteResult>;
22
35
  //# sourceMappingURL=promote-memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"promote-memory.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/promote-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;4EAC4E;AAC5E,wBAAsB,qBAAqB,CACzC,IAAI,EAAE;IACJ,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,EACD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAwBxB"}
1
+ {"version":3,"file":"promote-memory.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/promote-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAElG,eAAO,MAAM,UAAU,SAAS,CAAC;AAIjC,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB;2DACuD;IACvD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;mFAOmF;AACnF,wBAAsB,qBAAqB,CACzC,IAAI,EAAE;IACJ,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC;CACjD,EACD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CA+CxB"}
@@ -1,30 +1,61 @@
1
1
  import { UserFacingError } from '../../domain/errors.js';
2
+ import { resolveWorktreeIdentity } from '../../adapters/fs/memory-root.js';
2
3
  export const MAIN_SCOPE = 'main';
4
+ const WT_PREFIX = 'worktree:';
3
5
  /** WP3 §6.2 (спека 2.16): шаг finishing-a-development-branch — scoped-объекты
4
- * ворктрии становятся main. Автоудаления нет (P3): только перевод scope. */
6
+ * ворктрии становятся main. Автоудаления нет (P3): только перевод scope.
7
+ * 2.17.1 REQ-02 (R02), design §3.2: резолвит WorktreeIdentity ТЕКУЩЕЙ копии и
8
+ * переводит в main объекты ОБОИХ токенов владельца — WT-ID и однозначное
9
+ * legacy-имя (два семейства scope сосуществуют после обновления, NFR-01);
10
+ * неоднозначное legacy-имя — честный конфликт, объекты не переписываются.
11
+ * Идентичность null (main-чекоут / битые метаданные) — пустое множество токенов
12
+ * владельца: честный отчёт 0 promoted, не ошибка (S-17, решение L0 2026-10-13). */
5
13
  export async function promoteWorktreeMemory(deps, worktree) {
6
14
  if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(worktree)) {
7
15
  throw new UserFacingError(`Invalid worktree name: "${worktree}" (see: git worktree list)`);
8
16
  }
9
- const scopeFrom = `worktree:${worktree}`;
17
+ // Аргумент CLI — имя для валидации/отчёта; владелец определяется текущей копией.
18
+ const identity = (deps.resolveIdentity ?? (() => resolveWorktreeIdentity(process.cwd())))();
19
+ const conflicts = [];
20
+ const tokens = [];
21
+ if (identity !== null) {
22
+ tokens.push(identity.id);
23
+ const legacyScope = `${WT_PREFIX}${identity.legacyName}`;
24
+ if (identity.legacyUnique) {
25
+ if (!tokens.includes(legacyScope))
26
+ tokens.push(legacyScope);
27
+ }
28
+ else if (legacyScope !== identity.id) {
29
+ conflicts.push(legacyScope); // неоднозначное имя — никому не присваивается молча
30
+ }
31
+ }
32
+ if (conflicts.length > 0) {
33
+ // stderr-подсказка: CLI-слой печатает только сводку promote (не меняется в T1)
34
+ console.error(`[wolf] worktree scope conflict: ${conflicts.join(', ')} — ` +
35
+ 'ambiguous legacy worktree name (two live checkouts share the basename); objects left as-is');
36
+ }
10
37
  const run = async () => {
11
- const objects = (await deps.store.list()).filter((o) => o.scope === scopeFrom);
38
+ const objects = (await deps.store.list()).filter((o) => {
39
+ const s = o.scope;
40
+ return typeof s === 'string' && tokens.includes(s);
41
+ });
12
42
  const now = deps.clock.now();
13
43
  let promoted = 0;
14
44
  for (const o of objects) {
45
+ const from = o.scope;
15
46
  await deps.store.update(o.id, { scope: MAIN_SCOPE });
16
47
  await deps.log.append({
17
48
  id: deps.idGen.generateEventId(now),
18
49
  type: 'memory.scope_promoted',
19
50
  timestamp: now.toISOString(),
20
51
  actor: 'system:wolf',
21
- payload: { memory_id: o.id, from: scopeFrom, to: MAIN_SCOPE },
52
+ payload: { memory_id: o.id, from, to: MAIN_SCOPE },
22
53
  });
23
54
  if (deps.index)
24
55
  await deps.index.indexObject({ ...o, scope: MAIN_SCOPE });
25
56
  promoted += 1;
26
57
  }
27
- return { promoted, scopeFrom };
58
+ return { promoted, scopeFrom: tokens.length > 0 ? tokens.join(', ') : `${WT_PREFIX}${worktree}`, conflicts };
28
59
  };
29
60
  return deps.lock ? deps.lock.withLock(run) : run();
30
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"promote-memory.js","sourceRoot":"","sources":["../../../src/app/use-cases/promote-memory.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAOjC;4EAC4E;AAC5E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAOC,EACD,QAAgB;IAEhB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,eAAe,CAAC,2BAA2B,QAAQ,4BAA4B,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,QAAQ,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,IAA4B,EAAE;QAC7C,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAwB,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACvG,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAsC,CAAC,CAAC;YACzF,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;gBACpB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC;gBACnC,IAAI,EAAE,uBAAuB;gBAC7B,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;gBAC5B,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE;aAC9D,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAW,CAAC,CAAC;YACnF,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"promote-memory.js","sourceRoot":"","sources":["../../../src/app/use-cases/promote-memory.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  import { Clock } from '../../ports/clock.port.js';
2
2
  import { FileSystem } from '../../ports/file-system.port.js';
3
+ import type { ClaimGuard } from './claim-artifact.js';
3
4
  export interface ScaffoldArtifactDeps {
4
5
  clock: Clock;
5
6
  fs: Pick<FileSystem, 'exists' | 'writeFile'>;
6
7
  baseDir: string;
8
+ /** 2.17.1 REQ-05 (R06): запись TASK-бриф сета требует активный claim
9
+ * (артефакт `dev:<created>-<slug>`); CLI передаёт реальный guard из
10
+ * makeClaimGuard, юнит-тесты шаблонов — заглушку. */
11
+ claims: ClaimGuard;
7
12
  }
8
13
  export interface ScaffoldArtifactInput {
9
14
  slug: string;
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold-artifact.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/scaffold-artifact.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAK7D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC;IACb,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAMD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CA2DvG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqBnF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAcjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBrF;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CA2BjC"}
1
+ {"version":3,"file":"scaffold-artifact.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/scaffold-artifact.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC;IACb,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB;;yDAEqD;IACrD,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAMD,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CA2DvG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqBnF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAcjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBrF;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CA6BjC"}
@@ -128,6 +128,8 @@ export async function scaffoldArtifact(deps, input) {
128
128
  }
129
129
  const now = deps.clock.now();
130
130
  const created = now.toISOString().slice(0, 10);
131
+ // REQ-05 AC-3: guard до любой записи — без claim запись отклоняется в use-case
132
+ deps.claims.requireClaim(`dev:${created}-${input.slug}`);
131
133
  const dir = join(deps.baseDir, 'docs', 'dev', `${created}-${input.slug}`);
132
134
  // Уникальность имён — машина, не дисциплина: отказ ДО любых записей (спека §4-A1).
133
135
  if (await deps.fs.exists(dir)) {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold-artifact.js","sourceRoot":"","sources":["../../../src/app/use-cases/scaffold-artifact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold-artifact.js","sourceRoot":"","sources":["../../../src/app/use-cases/scaffold-artifact.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { MemoryLock } from '../../ports/memory-lock.port.js';
7
7
  import { MemoryTypeDeclaration } from '../../domain/memory-types.js';
8
8
  export interface SeedOutcome {
9
9
  file: string;
10
- action: 'created' | 'skipped';
10
+ action: 'created' | 'updated' | 'skipped' | 'diverged';
11
11
  reason?: string;
12
12
  }
13
13
  export interface SeedDeps {
@@ -20,7 +20,7 @@ export interface SeedDeps {
20
20
  lock?: MemoryLock;
21
21
  declarations?: readonly MemoryTypeDeclaration[];
22
22
  }
23
- /** Посев (спека §7): скип по owner_skill (MAJ-3/C2) — живое лицо (face) или
24
- * legacy-запись владельца в памяти, не пересечение тегов; дублей нет (REQ-02 AC3). */
23
+ /** Посев + шаблонное обновление live-лиц (§3.6): одна точка решения о записи
24
+ * для каждого шаблона base-set с owner_skill. */
25
25
  export declare function seedBasePlaybooks(deps: SeedDeps): Promise<SeedOutcome[]>;
26
26
  //# sourceMappingURL=seed-base-playbooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"seed-base-playbooks.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/seed-base-playbooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACjD;AAaD;sFACsF;AACtF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAmC9E"}
1
+ {"version":3,"file":"seed-base-playbooks.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/seed-base-playbooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAIrE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACjD;AAyBD;iDACiD;AACjD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA4E9E"}