mister-wolf 2.17.0 → 2.17.1

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 (88) hide show
  1. package/README.md +20 -7
  2. package/README.ru.md +21 -10
  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 +65 -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 +85 -0
  26. package/dist/adapters/fs/claim-registry.d.ts.map +1 -0
  27. package/dist/adapters/fs/claim-registry.js +276 -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/claim-artifact.d.ts +31 -0
  34. package/dist/app/use-cases/claim-artifact.d.ts.map +1 -0
  35. package/dist/app/use-cases/claim-artifact.js +38 -0
  36. package/dist/app/use-cases/claim-artifact.js.map +1 -0
  37. package/dist/app/use-cases/create-face-version.d.ts +26 -4
  38. package/dist/app/use-cases/create-face-version.d.ts.map +1 -1
  39. package/dist/app/use-cases/create-face-version.js +9 -133
  40. package/dist/app/use-cases/create-face-version.js.map +1 -1
  41. package/dist/app/use-cases/edit-memory-object.d.ts +26 -0
  42. package/dist/app/use-cases/edit-memory-object.d.ts.map +1 -0
  43. package/dist/app/use-cases/edit-memory-object.js +57 -0
  44. package/dist/app/use-cases/edit-memory-object.js.map +1 -0
  45. package/dist/app/use-cases/face-operation.d.ts +81 -0
  46. package/dist/app/use-cases/face-operation.d.ts.map +1 -0
  47. package/dist/app/use-cases/face-operation.js +503 -0
  48. package/dist/app/use-cases/face-operation.js.map +1 -0
  49. package/dist/app/use-cases/get-call-injections.d.ts +12 -1
  50. package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
  51. package/dist/app/use-cases/get-call-injections.js +73 -12
  52. package/dist/app/use-cases/get-call-injections.js.map +1 -1
  53. package/dist/app/use-cases/migrate-faces.d.ts +45 -11
  54. package/dist/app/use-cases/migrate-faces.d.ts.map +1 -1
  55. package/dist/app/use-cases/migrate-faces.js +234 -32
  56. package/dist/app/use-cases/migrate-faces.js.map +1 -1
  57. package/dist/app/use-cases/promote-memory.d.ts +14 -1
  58. package/dist/app/use-cases/promote-memory.d.ts.map +1 -1
  59. package/dist/app/use-cases/promote-memory.js +36 -5
  60. package/dist/app/use-cases/promote-memory.js.map +1 -1
  61. package/dist/app/use-cases/scaffold-artifact.d.ts +5 -0
  62. package/dist/app/use-cases/scaffold-artifact.d.ts.map +1 -1
  63. package/dist/app/use-cases/scaffold-artifact.js +2 -0
  64. package/dist/app/use-cases/scaffold-artifact.js.map +1 -1
  65. package/dist/app/use-cases/seed-base-playbooks.d.ts +3 -3
  66. package/dist/app/use-cases/seed-base-playbooks.d.ts.map +1 -1
  67. package/dist/app/use-cases/seed-base-playbooks.js +75 -29
  68. package/dist/app/use-cases/seed-base-playbooks.js.map +1 -1
  69. package/dist/app/use-cases/supersede-memory-object.d.ts +3 -1
  70. package/dist/app/use-cases/supersede-memory-object.d.ts.map +1 -1
  71. package/dist/app/use-cases/supersede-memory-object.js +8 -1
  72. package/dist/app/use-cases/supersede-memory-object.js.map +1 -1
  73. package/dist/app/use-cases/transition-memory-object.d.ts.map +1 -1
  74. package/dist/app/use-cases/transition-memory-object.js +6 -0
  75. package/dist/app/use-cases/transition-memory-object.js.map +1 -1
  76. package/dist/domain/memory-types.d.ts +5 -1
  77. package/dist/domain/memory-types.d.ts.map +1 -1
  78. package/dist/domain/memory-types.js +6 -2
  79. package/dist/domain/memory-types.js.map +1 -1
  80. package/dist/domain/schemas/memory-event-schema.d.ts +4 -0
  81. package/dist/domain/schemas/memory-event-schema.d.ts.map +1 -1
  82. package/dist/domain/schemas/memory-event-schema.js +12 -0
  83. package/dist/domain/schemas/memory-event-schema.js.map +1 -1
  84. package/package.json +1 -1
  85. package/templates/.wolf/router.log +1 -1
  86. package/templates/base/agents/steward.md +9 -6
  87. package/templates/base/playbooks/complaint-protocol.md +1 -1
  88. package/templates/base/playbooks/steward-nastavnik.md +36 -17
@@ -1,13 +1,38 @@
1
1
  export interface MemoryRootInfo {
2
2
  /** Корень чекаута, владеющего общим .wolf/ (main-чекоут; вне worktree — сам baseDir). */
3
3
  root: string;
4
- /** Имя linked worktree или null (main-чекоут / вне git / аномалия). */
4
+ /** Токен WT-ID linked worktree (`w-<12 hex>`) или null (main-чекоут / вне git / аномалия).
5
+ * 2.17.1 REQ-02 (R02): токен вместо basename — одинаковые basename двух копий дают
6
+ * разные идентификаторы; consumer подставляет его в scope как `worktree:${worktree}`. */
5
7
  worktree: string | null;
6
8
  }
9
+ /** 2.17.1 REQ-02 (R02), design §3.1 (ADR-1): устойчивая идентичность linked worktree. */
10
+ export interface WorktreeIdentity {
11
+ /** Полный scope-токен копии: `worktree:w-<12 hex sha1(realpath(baseDir))>`. */
12
+ id: string;
13
+ /** basename(baseDir) — маппинг legacy-токенов `worktree:<name>` (записанных до 2.17.1). */
14
+ legacyName: string;
15
+ /** true — ровно одна живая копия с этим basename: legacy-имя однозначно маппится на неё. */
16
+ legacyUnique: boolean;
17
+ }
18
+ /** Токен WT-ID без префикса scope: `w-` + первые 12 hex sha1(realpath(dir)).
19
+ * Идентичность по realpath: одинаковые basename двух копий дают разные токены;
20
+ * переименование каталога = новая копия с новым WT-ID (ограничение ADR-1). */
21
+ export declare function worktreeScopeToken(dir: string): string;
7
22
  /** WP3 §6.1 (спека 2.16): linked worktree резолвит общий .wolf/ в main-чекоуте.
8
23
  * Механика спеки — git common-dir (`git rev-parse --git-common-dir`); здесь тот же
9
24
  * информационный fs-парс без подпроцессов (прецедент чтения .git/HEAD:
10
25
  * heuristic-project-scanner.ts:221-239) — юнит-тестируемо без git, нет подпроцесса
11
26
  * в hot-path. Любой сбой — безопасный fallback на локальный .wolf/ (риск Р5 спеки). */
12
27
  export declare function resolveMemoryRoot(baseDir: string): MemoryRootInfo;
28
+ /** 2.17.1 REQ-02 (R02), design §3.1 (ADR-1): идентичность linked worktree.
29
+ * null — main-чекоут, вне git, bare-аномалия, сбой git-метаданных (fail-closed:
30
+ * legacy-токены не маппятся, чужой scope недоступен — §5).
31
+ * Вызывать лениво — по встрече legacy-токена (бюджет NFR-01: ≤1 git-подпроцесса
32
+ * на процесс, только linked worktree; main-чекоут git не запускает). */
33
+ export declare function resolveWorktreeIdentity(baseDir: string): WorktreeIdentity | null;
34
+ /** Каталог выглядит linked worktree (.git — файл-указатель), но метаданные не
35
+ * резолвятся в общий root: fail-closed предупреждение доставки (REQ-02 AC-5,
36
+ * design §5 — предупреждение в wolf call). null — не broken (main/outside git). */
37
+ export declare function brokenWorktreeHint(baseDir: string): string | null;
13
38
  //# sourceMappingURL=memory-root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-root.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/memory-root.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;uFAIuF;AACvF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAmBjE"}
1
+ {"version":3,"file":"memory-root.d.ts","sourceRoot":"","sources":["../../../src/adapters/fs/memory-root.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb;;6FAEyF;IACzF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,yFAAyF;AACzF,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,2FAA2F;IAC3F,UAAU,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;8EAE8E;AAC9E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;uFAIuF;AACvF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAmBjE;AAsCD;;;;wEAIwE;AACxE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAWhF;AAED;;mFAEmF;AACnF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWjE"}
@@ -1,5 +1,13 @@
1
- import { existsSync, readFileSync } from 'fs';
1
+ import { execFileSync } from 'child_process';
2
+ import { createHash } from 'crypto';
3
+ import { existsSync, readFileSync, realpathSync, statSync } from 'fs';
2
4
  import { basename, dirname, isAbsolute, join, resolve } from 'path';
5
+ /** Токен WT-ID без префикса scope: `w-` + первые 12 hex sha1(realpath(dir)).
6
+ * Идентичность по realpath: одинаковые basename двух копий дают разные токены;
7
+ * переименование каталога = новая копия с новым WT-ID (ограничение ADR-1). */
8
+ export function worktreeScopeToken(dir) {
9
+ return 'w-' + createHash('sha1').update(realpathSync(dir)).digest('hex').slice(0, 12);
10
+ }
3
11
  /** WP3 §6.1 (спека 2.16): linked worktree резолвит общий .wolf/ в main-чекоуте.
4
12
  * Механика спеки — git common-dir (`git rev-parse --git-common-dir`); здесь тот же
5
13
  * информационный fs-парс без подпроцессов (прецедент чтения .git/HEAD:
@@ -25,10 +33,88 @@ export function resolveMemoryRoot(baseDir) {
25
33
  // bare-репо + linked worktree: commondir указывает мимо чекаута — fallback локальный (Р5)
26
34
  if (!existsSync(join(root, '.git')))
27
35
  return { root: baseDir, worktree: null };
28
- return { root, worktree: basename(baseDir) };
36
+ return { root, worktree: worktreeScopeToken(baseDir) };
29
37
  }
30
38
  catch {
31
39
  return { root: baseDir, worktree: null };
32
40
  }
33
41
  }
42
+ /** basename каждой живой записи `git worktree list --porcelain` (включая main-чекоут).
43
+ * Дубликаты сохраняются: однозначность legacy-имени — счёт, не множество. Кэш на
44
+ * процесс (NFR-01 (R02): ≤1 git-подпроцесса); null — сбой git-метаданных. */
45
+ const liveBasenamesCache = new Map();
46
+ function liveWorktreeBasenames(baseDir) {
47
+ let key;
48
+ try {
49
+ key = realpathSync(baseDir);
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ if (liveBasenamesCache.has(key))
55
+ return liveBasenamesCache.get(key);
56
+ let result = null;
57
+ try {
58
+ const out = execFileSync('git', ['worktree', 'list', '--porcelain'], {
59
+ cwd: baseDir,
60
+ encoding: 'utf-8',
61
+ timeout: 10_000,
62
+ stdio: ['ignore', 'pipe', 'ignore'],
63
+ });
64
+ result = [];
65
+ for (const line of out.split('\n')) {
66
+ if (!line.startsWith('worktree '))
67
+ continue;
68
+ try {
69
+ result.push(basename(realpathSync(line.slice('worktree '.length).trim())));
70
+ }
71
+ catch {
72
+ // каталог записи исчез — git пометит prunable; в счёт живых он не входит
73
+ }
74
+ }
75
+ }
76
+ catch {
77
+ result = null; // битые git-метаданные — fail-closed (design §5)
78
+ }
79
+ liveBasenamesCache.set(key, result);
80
+ return result;
81
+ }
82
+ /** 2.17.1 REQ-02 (R02), design §3.1 (ADR-1): идентичность linked worktree.
83
+ * null — main-чекоут, вне git, bare-аномалия, сбой git-метаданных (fail-closed:
84
+ * legacy-токены не маппятся, чужой scope недоступен — §5).
85
+ * Вызывать лениво — по встрече legacy-токена (бюджет NFR-01: ≤1 git-подпроцесса
86
+ * на процесс, только linked worktree; main-чекоут git не запускает). */
87
+ export function resolveWorktreeIdentity(baseDir) {
88
+ const info = resolveMemoryRoot(baseDir);
89
+ if (info.worktree === null)
90
+ return null;
91
+ const live = liveWorktreeBasenames(baseDir);
92
+ if (live === null)
93
+ return null;
94
+ const legacyName = basename(baseDir);
95
+ return {
96
+ id: `worktree:${info.worktree}`,
97
+ legacyName,
98
+ legacyUnique: live.filter((n) => n === legacyName).length === 1,
99
+ };
100
+ }
101
+ /** Каталог выглядит linked worktree (.git — файл-указатель), но метаданные не
102
+ * резолвятся в общий root: fail-closed предупреждение доставки (REQ-02 AC-5,
103
+ * design §5 — предупреждение в wolf call). null — не broken (main/outside git). */
104
+ export function brokenWorktreeHint(baseDir) {
105
+ try {
106
+ const dotGit = join(baseDir, '.git');
107
+ if (!existsSync(dotGit) || statSync(dotGit).isDirectory())
108
+ return null;
109
+ const raw = readFileSync(dotGit, 'utf-8');
110
+ if (!raw.startsWith('gitdir:'))
111
+ return null;
112
+ if (resolveMemoryRoot(baseDir).worktree !== null)
113
+ return null;
114
+ return `worktree git metadata is broken in ${baseDir} — delivery is fail-closed, worktree-scoped memory stays hidden`;
115
+ }
116
+ catch {
117
+ return null;
118
+ }
119
+ }
34
120
  //# sourceMappingURL=memory-root.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-root.js","sourceRoot":"","sources":["../../../src/adapters/fs/memory-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AASpE;;;;uFAIuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,iBAAiB;QACjG,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,qBAAqB;QAC/F,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/D,0FAA0F;QAC1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"memory-root.js","sourceRoot":"","sources":["../../../src/adapters/fs/memory-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAqBpE;;8EAE8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;;;uFAIuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,iBAAiB;QACjG,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,qBAAqB;QAC/F,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/D,0FAA0F;QAC1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC9E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;6EAE6E;AAC7E,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAC9D,SAAS,qBAAqB,CAAC,OAAe;IAC5C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACrE,IAAI,MAAM,GAAoB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE;YACnE,GAAG,EAAE,OAAO;YACZ,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC;QACH,MAAM,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;gBAAE,SAAS;YAC5C,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7E,CAAC;YAAC,MAAM,CAAC;gBACP,yEAAyE;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC,CAAC,iDAAiD;IAClE,CAAC;IACD,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;wEAIwE;AACxE,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO;QACL,EAAE,EAAE,YAAY,IAAI,CAAC,QAAQ,EAAE;QAC/B,UAAU;QACV,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;KAChE,CAAC;AACJ,CAAC;AAED;;mFAEmF;AACnF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;QACvE,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9D,OAAO,sCAAsC,OAAO,iEAAiE,CAAC;IACxH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type ClaimRecord } from '../../adapters/fs/claim-registry.js';
2
+ /**
3
+ * 2.17.1 REQ-05 (R06), design §3.5: use-case-слой claim. Идентичность — env
4
+ * (WOLF_ACTOR/WOLF_SESSION, тот же механизм атрибуции, что у мутаций);
5
+ * реестр — в общем root (resolveMemoryRoot): claims видны из всех копий.
6
+ * makeClaimGuard — точка инъекции для use-cases записи общих артефактов
7
+ * (requireClaim до записи, REQ-05 AC-3).
8
+ */
9
+ export interface ClaimArtifactDeps {
10
+ baseDir: string;
11
+ /** Тестовые seam'ы; прод-дефолты — process.env / process.pid / process.cwd(). */
12
+ env?: NodeJS.ProcessEnv;
13
+ pid?: number;
14
+ cwd?: string;
15
+ now?: () => Date;
16
+ isAlive?: (pid: number) => boolean;
17
+ }
18
+ export declare function acquireArtifactClaim(deps: ClaimArtifactDeps, artifact: string): ClaimRecord;
19
+ export declare function releaseArtifactClaim(deps: ClaimArtifactDeps, artifact: string, transferTo?: string): {
20
+ action: 'released' | 'transferred';
21
+ owner: string;
22
+ };
23
+ export declare function listArtifactClaims(deps: ClaimArtifactDeps): ClaimRecord[];
24
+ /** Guard для use-cases записи общих артефактов: claim артефакта должен
25
+ * принадлежать текущей идентичности (owner+session); pid писателя не важен
26
+ * (захват и запись — разные процессы). */
27
+ export interface ClaimGuard {
28
+ requireClaim(artifact: string): void;
29
+ }
30
+ export declare function makeClaimGuard(deps: ClaimArtifactDeps): ClaimGuard;
31
+ //# sourceMappingURL=claim-artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-artifact.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/claim-artifact.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,WAAW,EAEjB,MAAM,qCAAqC,CAAC;AAE7C;;;;;;GAMG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAkBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAM3F;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,MAAM,EAAE,UAAU,GAAG,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,EAAE,CAEzE;AAED;;0CAE0C;AAC1C,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAOlE"}
@@ -0,0 +1,38 @@
1
+ import { resolveCreatedBy, resolveSessionId } from '../../domain/actor.js';
2
+ import { resolveMemoryRoot } from '../../adapters/fs/memory-root.js';
3
+ import { acquireClaim, listClaims, releaseClaim, requireClaim, } from '../../adapters/fs/claim-registry.js';
4
+ function identityOf(deps) {
5
+ return {
6
+ owner: resolveCreatedBy(undefined, deps.env ?? process.env),
7
+ sessionId: resolveSessionId(deps.env ?? process.env),
8
+ pid: deps.pid ?? process.pid,
9
+ };
10
+ }
11
+ function registryDeps(deps) {
12
+ return {
13
+ root: resolveMemoryRoot(deps.baseDir).root,
14
+ now: deps.now,
15
+ isAlive: deps.isAlive,
16
+ };
17
+ }
18
+ export function acquireArtifactClaim(deps, artifact) {
19
+ return acquireClaim(registryDeps(deps), {
20
+ artifact,
21
+ identity: identityOf(deps),
22
+ cwd: deps.cwd ?? process.cwd(),
23
+ });
24
+ }
25
+ export function releaseArtifactClaim(deps, artifact, transferTo) {
26
+ return releaseClaim(registryDeps(deps), { artifact, identity: identityOf(deps), transferTo });
27
+ }
28
+ export function listArtifactClaims(deps) {
29
+ return listClaims(registryDeps(deps));
30
+ }
31
+ export function makeClaimGuard(deps) {
32
+ const registry = registryDeps(deps);
33
+ const who = identityOf(deps);
34
+ return {
35
+ requireClaim: (artifact) => requireClaim(registry, artifact, { owner: who.owner, sessionId: who.sessionId }),
36
+ };
37
+ }
38
+ //# sourceMappingURL=claim-artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-artifact.js","sourceRoot":"","sources":["../../../src/app/use-cases/claim-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,GAIb,MAAM,qCAAqC,CAAC;AAoB7C,SAAS,UAAU,CAAC,IAAuB;IACzC,OAAO;QACL,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QAC3D,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACpD,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAuB;IAC3C,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;QAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAuB,EAAE,QAAgB;IAC5E,OAAO,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;QACtC,QAAQ;QACR,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;QAC1B,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAuB,EACvB,QAAgB,EAChB,UAAmB;IAEnB,OAAO,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACxD,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO;QACL,YAAY,EAAE,CAAC,QAAgB,EAAE,EAAE,CACjC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;KACnF,CAAC;AACJ,CAAC"}
@@ -1,12 +1,13 @@
1
- import { MemoryStore } from '../../ports/memory-store.port.js';
2
- import { EventLog } from '../../ports/event-log.port.js';
3
1
  import { Clock } from '../../ports/clock.port.js';
4
2
  import { IdGenerator } from '../../ports/id-generator.port.js';
5
3
  import { SearchIndex } from '../../ports/search-index.port.js';
6
4
  import { MemoryLock } from '../../ports/memory-lock.port.js';
5
+ import { MemoryStore } from '../../ports/memory-store.port.js';
6
+ import { EventLog } from '../../ports/event-log.port.js';
7
7
  import { RelationLog } from '../../ports/relation-log.port.js';
8
8
  import { MemoryTypeDeclaration } from '../../domain/memory-types.js';
9
9
  import { MemoryObject } from '../../domain/schemas/memory-object-schema.js';
10
+ import { type FaceFaultInjector } from './face-operation.js';
10
11
  /** Волна 2.17 REQ-03/REQ-04 (design §«Механика версий», §Guard): единая
11
12
  * версионирующая механика лиц — guard, номер версии, supersede head, журнал;
12
13
  * всё под внешним MemoryLock (прецедент tool-librarian.ts:167: вложенные
@@ -15,18 +16,26 @@ import { MemoryObject } from '../../domain/schemas/memory-object-schema.js';
15
16
  * 'steward') атомарно создаёт G17-запись + relation 'mutates' → версия.
16
17
  * T-05: 'migrate'/'seed' — служебные пути (вход migrateFaces/посева base-set,
17
18
  * design §Guard «посев идёт внутренним путём с initiator: 'seed'»): guard
18
- * полномочий не применяется, содержание задаёт вызывающий. */
19
+ * полномочий не применяется, содержание задаёт вызывающий.
20
+ *
21
+ * 2.17.1 REQ-03 (R04, design §3.3/ADR-3): сама цепочка — журналируемая
22
+ * операция в face-operation.ts (add_face(candidate) → G17 → relations →
23
+ * activate(commit) → supersede_prev → announce → op_committed) с resume
24
+ * по opId, авто-resume и abort; этот файл — валидация входа и guard
25
+ * (guard — до op_started, под lock). */
19
26
  export type FaceCommand = 'new' | 'restore' | 'breakglass' | 'migrate' | 'seed';
20
27
  export type FaceInitiator = 'steward' | 'owner' | 'breakglass' | 'migration' | 'seed';
21
28
  /** Поля типа face поверх MemoryObject (декларация — memory-types.ts, T-01). */
22
29
  export interface FaceFields {
23
30
  owner_skill: string;
24
- /** '1','2',… — номер назначает эта команда под lock. */
31
+ /** '1','2',… — номер назначает операция add_face под lock. */
25
32
  version: string;
26
33
  /** id версии-основы; отсутствует у первой версии (optional, не null). */
27
34
  based_on?: string;
28
35
  reason: string;
29
36
  initiator: FaceInitiator;
37
+ /** 2.17.1 REQ-03 (§3.3): привязка к операции — правило усыновления candidate. */
38
+ op_id?: string;
30
39
  }
31
40
  export type FaceObject = MemoryObject & FaceFields;
32
41
  export interface CreateFaceVersionDeps {
@@ -42,6 +51,9 @@ export interface CreateFaceVersionDeps {
42
51
  * Параметра-актёра у API нет: подмена инициатора (--created-by-подобная)
43
52
  * исключена структурно (design §Guard, F-04). */
44
53
  env?: NodeJS.ProcessEnv;
54
+ /** Тестовый seam (test-plan REQ-03): fault(point) бросается после завершения
55
+ * шага операции; прод-код не задаёт. */
56
+ fault?: FaceFaultInjector;
45
57
  }
46
58
  export interface CreateFaceVersionInput {
47
59
  command: FaceCommand;
@@ -66,6 +78,14 @@ export interface CreateFaceVersionInput {
66
78
  * версию — записывает relation ('proposes', proposal, faceNew). Связь только
67
79
  * фиксируется: применение предложения остаётся решением Стюарда (REQ-09). */
68
80
  fromProposal?: string;
81
+ /** 2.17.1 REQ-03 (§3.3): идентификатор операции — resume/идемпотентный
82
+ * повтор; при отсутствии генерируется faceop-<ts>-<rand4> (в результате). */
83
+ opId?: string;
84
+ /** 2.17.1 REQ-04 (design §3.4, F9): id активного legacy-head волны 2.17 —
85
+ * добавляет шаг supersede_legacy операции (между supersede_prev и announce).
86
+ * Служебный вход migrateFaces и посева 2.16.3 (§3.6); resume берёт значение
87
+ * из op_started input. */
88
+ legacyHeadId?: string;
69
89
  }
70
90
  export interface CreateFaceVersionResult {
71
91
  face: FaceObject;
@@ -74,6 +94,8 @@ export interface CreateFaceVersionResult {
74
94
  /** G17-запись мутации (REQ-06): id note(history); null, если мутация не
75
95
  * Стюардом (restore/breakglass). */
76
96
  mutationRecordId: string | null;
97
+ /** 2.17.1 REQ-03: id журналируемой операции (печатают CLI/MCP для recover). */
98
+ opId: string;
77
99
  }
78
100
  export declare function createFaceVersion(deps: CreateFaceVersionDeps, input: CreateFaceVersionInput): Promise<CreateFaceVersionResult>;
79
101
  //# sourceMappingURL=create-face-version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-face-version.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/create-face-version.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,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAS5E;;;;;;;;8DAQ8D;AAC9D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAChF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtF,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,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,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD;;qDAEiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;mFAC+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;iFAE6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,gFAAgF;IAChF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;wCACoC;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAgFD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAmLlC"}
1
+ {"version":3,"file":"create-face-version.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/create-face-version.ts"],"names":[],"mappings":"AACA,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,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAK5E,OAAO,EAAgC,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE3F;;;;;;;;;;;;;;wCAcwC;AACxC,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAChF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtF,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,CAAC;IACzB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,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,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChD;;qDAEiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;4CACwC;IACxC,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;mFAC+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;iFAE6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;iFAC6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;8BAG0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,gFAAgF;IAChF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;wCACoC;IACpC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;CACd;AAyCD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAqElC"}
@@ -1,45 +1,7 @@
1
1
  import { resolveCreatedBy, resolveSessionId } from '../../domain/actor.js';
2
2
  import { UserFacingError } from '../../domain/errors.js';
3
- import { addMemoryObject } from './add-memory-object.js';
4
- import { supersedeMemoryObject } from './supersede-memory-object.js';
5
- import { createMutationRecord, missingG17Field } from './create-mutation-record.js';
6
- import { recordRelation } from './record-relation.js';
7
- const INITIATOR_BY_COMMAND = {
8
- new: 'steward',
9
- restore: 'owner',
10
- breakglass: 'breakglass',
11
- migrate: 'migration',
12
- seed: 'seed',
13
- };
14
- function asFace(obj) {
15
- return obj;
16
- }
17
- async function facesOfOwner(store, ownerSkill) {
18
- return (await store.list({ type: 'face' })).filter((o) => asFace(o).owner_skill === ownerSkill).map(asFace);
19
- }
20
- /** Активная (head) версия владельца; null — владельца ещё нет. Дубликаты активных
21
- * ловит doctor (NFR-02); здесь детерминированно берётся старшая версия. */
22
- async function activeFace(store, ownerSkill) {
23
- const active = (await facesOfOwner(store, ownerSkill)).filter((f) => f.status === 'active');
24
- if (active.length === 0)
25
- return null;
26
- return active.sort((a, b) => Number(b.version) - Number(a.version))[0];
27
- }
28
- /** Резолв ссылки на основу: mem_-id напрямую, иначе номер версии ('v2'/'2'). */
29
- async function resolveBase(store, ownerSkill, ref) {
30
- if (ref.startsWith('mem_')) {
31
- const obj = await store.get(ref);
32
- if (!obj || obj.type !== 'face' || asFace(obj).owner_skill !== ownerSkill) {
33
- throw new UserFacingError(`Face version not found for ${ownerSkill}: ${ref}`);
34
- }
35
- return asFace(obj);
36
- }
37
- const n = ref.replace(/^v/, '');
38
- const found = (await facesOfOwner(store, ownerSkill)).filter((f) => f.version === n);
39
- if (found.length === 0)
40
- throw new UserFacingError(`Face version not found for ${ownerSkill}: ${ref}`);
41
- return found.sort((a, b) => Number(b.version) - Number(a.version))[0];
42
- }
3
+ import { missingG17Field } from './create-mutation-record.js';
4
+ import { resolveBase, runFaceMutation } from './face-operation.js';
43
5
  /** Guard (design §Guard): new — строго agent:steward; restore/breakglass — user:*;
44
6
  * breakglass дополнительно отказывает из агент-сессии (WOLF_SESSION=opc-*).
45
7
  * migrate/seed — служебные пути (T-05): без проверки полномочий — вход
@@ -124,100 +86,14 @@ export async function createFaceVersion(deps, input) {
124
86
  throw new UserFacingError(`Memory object ${input.fromProposal} is not a proposal (facet=proposal required)`);
125
87
  }
126
88
  }
127
- // Номер версии и head — строго под lock: параллельные вызовы сериализуются.
128
- const cur = await activeFace(deps.store, input.ownerSkill);
129
- const base = input.from ? await resolveBase(deps.store, input.ownerSkill, input.from) : cur;
130
- const nextVersion = (await facesOfOwner(deps.store, input.ownerSkill)).reduce((m, f) => Math.max(m, Number(f.version) || 0), 0) + 1;
131
- const restoreLike = input.command === 'restore' || input.command === 'breakglass';
132
- const source = restoreLike ? base : null;
133
- const title = restoreLike ? source.title : (input.title ?? `Face: ${input.ownerSkill}`);
134
- const body = restoreLike ? source.body : input.body;
135
- const tags = restoreLike ? source.tags : (input.tags ?? []);
136
- const extra = {
137
- owner_skill: input.ownerSkill,
138
- version: String(nextVersion),
139
- reason: input.reason,
140
- initiator: INITIATOR_BY_COMMAND[input.command],
141
- };
142
- if (base)
143
- extra.based_on = base.id;
144
- // lock не передаём: мы уже внутри deps.lock.withLock (FsMemoryLock не реентерабелен)
145
- const { object } = await addMemoryObject({
146
- store: deps.store,
147
- log: deps.log,
148
- clock: deps.clock,
149
- idGen: deps.idGen,
150
- index: deps.index,
151
- declarations: deps.declarations,
152
- }, { type: 'face', title, body, tags, createdBy: actor, extra, internalFacePath: true });
153
- const face = asFace(object);
154
- let supersededId = null;
155
- if (cur && cur.id !== face.id) {
156
- await supersedeMemoryObject({ store: deps.store, log: deps.log, clock: deps.clock, idGen: deps.idGen, index: deps.index }, cur.id, face.id);
157
- supersededId = cur.id;
158
- }
159
- // REQ-06 (design §«Механика версий»): initiator 'steward' → атомарно
160
- // G17-запись note(history) + relation 'mutates' → версия; та же
161
- // lock-транзакция (внутренние вызовы без lock).
162
- let mutationRecordId = null;
163
- if (INITIATOR_BY_COMMAND[input.command] === 'steward') {
164
- const note = await createMutationRecord({
165
- store: deps.store,
166
- log: deps.log,
167
- clock: deps.clock,
168
- idGen: deps.idGen,
169
- index: deps.index,
170
- relations: deps.relations,
171
- }, {
172
- ownerSkill: input.ownerSkill,
173
- version: face.version,
174
- faceId: face.id,
175
- createdBy: actor,
176
- reason: g17.reason,
177
- minimalChange: g17.minimalChange,
178
- boundaries: g17.boundaries,
179
- exampleHelps: g17.exampleHelps,
180
- exampleKeep: g17.exampleKeep,
181
- verification: g17.verification,
182
- rollback: g17.rollback,
183
- });
184
- mutationRecordId = note.id;
185
- }
186
- // T-09 (design §«Механика версий», строка 88): --from-proposal → relation
187
- // ('proposes', proposal, faceNew); только связь, не применение (REQ-09)
188
- if (input.fromProposal !== undefined) {
189
- await recordRelation({ relations: deps.relations, idGen: deps.idGen }, deps.clock.now(), input.fromProposal, 'proposes', face.id, 'system');
190
- }
191
- // Design §События журнала: versioned — на КАЖДУЮ версию (включая breakglass,
192
- // REQ-07 «результат = новая версия»); breakglass дополнительно журналируется
193
- // own-событием в составе самой операции (REQ-07 AC2). Порядок: versioned, затем breakglass.
194
- const now = deps.clock.now();
195
- const versionPayload = {
196
- owner_skill: input.ownerSkill,
197
- from: supersededId,
198
- new: face.id,
199
- initiator: INITIATOR_BY_COMMAND[input.command],
200
- reason: input.reason,
201
- };
202
- const versioned = {
203
- id: deps.idGen.generateEventId(now),
204
- type: 'memory.face.versioned',
205
- timestamp: now.toISOString(),
206
- actor,
207
- payload: versionPayload,
208
- };
209
- await deps.log.append(versioned);
210
- if (input.command === 'breakglass') {
211
- const breakglass = {
212
- id: deps.idGen.generateEventId(now),
213
- type: 'memory.face.breakglass',
214
- timestamp: now.toISOString(),
215
- actor,
216
- payload: versionPayload,
217
- };
218
- await deps.log.append(breakglass);
89
+ // Основа (restore/breakglass) проверяется до op_started: битая ссылка не
90
+ // оставляет незавершённую операцию в журнале (fail fast).
91
+ if (input.from) {
92
+ await resolveBase(deps.store, input.ownerSkill, input.from);
219
93
  }
220
- return { face, supersededId, mutationRecordId };
94
+ // 2.17.1 REQ-03: цепочка шагов — журналируемая операция (face-operation.ts);
95
+ // мы уже под lock, engine его не пере-берёт.
96
+ return runFaceMutation(deps, { input, actor });
221
97
  };
222
98
  return deps.lock ? deps.lock.withLock(run) : run();
223
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"create-face-version.js","sourceRoot":"","sources":["../../../src/app/use-cases/create-face-version.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-face-version.js","sourceRoot":"","sources":["../../../src/app/use-cases/create-face-version.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { MemoryStore } from '../../ports/memory-store.port.js';
2
+ import { EventLog } from '../../ports/event-log.port.js';
3
+ import { Clock } from '../../ports/clock.port.js';
4
+ import { IdGenerator } from '../../ports/id-generator.port.js';
5
+ import { SearchIndex } from '../../ports/search-index.port.js';
6
+ import { MemoryLock } from '../../ports/memory-lock.port.js';
7
+ export interface EditMemoryObjectDeps {
8
+ store: MemoryStore;
9
+ log: EventLog;
10
+ clock: Clock;
11
+ idGen: IdGenerator;
12
+ index?: SearchIndex;
13
+ lock?: MemoryLock;
14
+ }
15
+ export interface EditMemoryObjectInput {
16
+ id: string;
17
+ title?: string;
18
+ body?: string;
19
+ actor: string;
20
+ }
21
+ export interface EditMemoryObjectResult {
22
+ id: string;
23
+ fields: Array<'title' | 'body'>;
24
+ }
25
+ export declare function editMemoryObject(deps: EditMemoryObjectDeps, input: EditMemoryObjectInput): Promise<EditMemoryObjectResult>;
26
+ //# sourceMappingURL=edit-memory-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-memory-object.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/edit-memory-object.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;AAa7D,MAAM,WAAW,oBAAoB;IACnC,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;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;CACjC;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CA6CjC"}
@@ -0,0 +1,57 @@
1
+ import { UserFacingError } from '../../domain/errors.js';
2
+ // wolf edit (спека 2.13 §6.1): правка title/body с diff-аудитом — отдельное
3
+ // событие memory.edited на каждое изменённое поле, before/after обрезаны до
4
+ // 200 симв (прецедент target-обрезки волны 0, session-metrics-log.ts:482).
5
+ // 2.17.1 REQ-04 (R05, design §7): edit вынесен из CLI в use-case слой —
6
+ // face-тип запрещён (лицо меняется только версионирующим путём wolf face);
7
+ // guard здесь, не в CLI (AC-4: негативный сценарий на уровне use-case).
8
+ const CLIP = 200;
9
+ const clip = (s) => (s.length > CLIP ? s.slice(0, CLIP) : s);
10
+ export async function editMemoryObject(deps, input) {
11
+ const existing = await deps.store.get(input.id);
12
+ if (!existing)
13
+ throw new UserFacingError(`Memory object not found: ${input.id}`);
14
+ if (existing.type === 'face') {
15
+ throw new UserFacingError('type "face" cannot be edited: faces are versioned, use "wolf face" commands (new | restore | breakglass)');
16
+ }
17
+ const fields = [];
18
+ if (input.title !== undefined) {
19
+ if (input.title.trim() === '')
20
+ throw new UserFacingError('Title must not be empty');
21
+ fields.push('title');
22
+ }
23
+ if (input.body !== undefined) {
24
+ if (input.body.trim() === '')
25
+ throw new UserFacingError('Body must not be empty');
26
+ fields.push('body');
27
+ }
28
+ if (fields.length === 0)
29
+ throw new UserFacingError('Nothing to edit: pass a title and/or body');
30
+ const patch = {};
31
+ if (input.title !== undefined)
32
+ patch.title = input.title;
33
+ if (input.body !== undefined)
34
+ patch.body = input.body;
35
+ const run = async () => {
36
+ const updated = await deps.store.update(input.id, patch);
37
+ const now = deps.clock.now();
38
+ for (const field of fields) {
39
+ await deps.log.append({
40
+ id: deps.idGen.generateEventId(now),
41
+ type: 'memory.edited',
42
+ timestamp: now.toISOString(),
43
+ actor: input.actor,
44
+ payload: {
45
+ memory_id: input.id,
46
+ field,
47
+ before: clip(existing[field]),
48
+ after: clip(input[field]),
49
+ },
50
+ });
51
+ }
52
+ await deps.index?.indexObject(updated);
53
+ return { id: input.id, fields };
54
+ };
55
+ return deps.lock ? deps.lock.withLock(run) : run();
56
+ }
57
+ //# sourceMappingURL=edit-memory-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-memory-object.js","sourceRoot":"","sources":["../../../src/app/use-cases/edit-memory-object.ts"],"names":[],"mappings":"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"}