oh-my-codex 0.17.0 → 0.17.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/Cargo.lock +5 -5
  2. package/Cargo.toml +1 -1
  3. package/dist/cli/__tests__/question.test.js +2 -0
  4. package/dist/cli/__tests__/question.test.js.map +1 -1
  5. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +3 -0
  6. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
  7. package/dist/cli/__tests__/ralph.test.js +0 -124
  8. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  9. package/dist/cli/__tests__/setup-install-mode.test.js +156 -3
  10. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  11. package/dist/cli/__tests__/setup-refresh.test.js +3 -3
  12. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  13. package/dist/cli/__tests__/team.test.js +166 -42
  14. package/dist/cli/__tests__/team.test.js.map +1 -1
  15. package/dist/cli/doctor.js +9 -4
  16. package/dist/cli/doctor.js.map +1 -1
  17. package/dist/cli/plugin-marketplace.d.ts +5 -1
  18. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  19. package/dist/cli/plugin-marketplace.js +31 -2
  20. package/dist/cli/plugin-marketplace.js.map +1 -1
  21. package/dist/cli/question.d.ts +1 -1
  22. package/dist/cli/question.d.ts.map +1 -1
  23. package/dist/cli/question.js +98 -4
  24. package/dist/cli/question.js.map +1 -1
  25. package/dist/cli/ralph.d.ts.map +1 -1
  26. package/dist/cli/ralph.js +1 -49
  27. package/dist/cli/ralph.js.map +1 -1
  28. package/dist/cli/setup.d.ts +1 -0
  29. package/dist/cli/setup.d.ts.map +1 -1
  30. package/dist/cli/setup.js +75 -9
  31. package/dist/cli/setup.js.map +1 -1
  32. package/dist/cli/team.d.ts.map +1 -1
  33. package/dist/cli/team.js +21 -29
  34. package/dist/cli/team.js.map +1 -1
  35. package/dist/config/generator.d.ts +4 -0
  36. package/dist/config/generator.d.ts.map +1 -1
  37. package/dist/config/generator.js +58 -0
  38. package/dist/config/generator.js.map +1 -1
  39. package/dist/hooks/__tests__/agents-overlay.test.js +29 -0
  40. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  41. package/dist/hooks/__tests__/session.test.js +126 -1
  42. package/dist/hooks/__tests__/session.test.js.map +1 -1
  43. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  44. package/dist/hooks/agents-overlay.js +6 -3
  45. package/dist/hooks/agents-overlay.js.map +1 -1
  46. package/dist/hooks/session.d.ts +11 -3
  47. package/dist/hooks/session.d.ts.map +1 -1
  48. package/dist/hooks/session.js +68 -6
  49. package/dist/hooks/session.js.map +1 -1
  50. package/dist/hud/__tests__/reconcile.test.js +63 -0
  51. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  52. package/dist/hud/__tests__/tmux.test.d.ts +2 -0
  53. package/dist/hud/__tests__/tmux.test.d.ts.map +1 -0
  54. package/dist/hud/__tests__/tmux.test.js +92 -0
  55. package/dist/hud/__tests__/tmux.test.js.map +1 -0
  56. package/dist/hud/reconcile.d.ts +2 -0
  57. package/dist/hud/reconcile.d.ts.map +1 -1
  58. package/dist/hud/reconcile.js +14 -1
  59. package/dist/hud/reconcile.js.map +1 -1
  60. package/dist/hud/tmux.d.ts +12 -0
  61. package/dist/hud/tmux.d.ts.map +1 -1
  62. package/dist/hud/tmux.js +88 -0
  63. package/dist/hud/tmux.js.map +1 -1
  64. package/dist/mcp/__tests__/hermes-bridge.test.js +82 -1
  65. package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -1
  66. package/dist/mcp/hermes-bridge.d.ts +34 -1
  67. package/dist/mcp/hermes-bridge.d.ts.map +1 -1
  68. package/dist/mcp/hermes-bridge.js +75 -0
  69. package/dist/mcp/hermes-bridge.js.map +1 -1
  70. package/dist/mcp/hermes-server.d.ts +111 -6
  71. package/dist/mcp/hermes-server.d.ts.map +1 -1
  72. package/dist/mcp/hermes-server.js +38 -1
  73. package/dist/mcp/hermes-server.js.map +1 -1
  74. package/dist/pipeline/__tests__/stages.test.js +18 -9
  75. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  76. package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
  77. package/dist/pipeline/stages/team-exec.js +2 -7
  78. package/dist/pipeline/stages/team-exec.js.map +1 -1
  79. package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js +111 -269
  80. package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js.map +1 -1
  81. package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js +31 -72
  82. package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js.map +1 -1
  83. package/dist/planning/__tests__/artifacts.test.js +27 -372
  84. package/dist/planning/__tests__/artifacts.test.js.map +1 -1
  85. package/dist/planning/artifacts.d.ts +1 -14
  86. package/dist/planning/artifacts.d.ts.map +1 -1
  87. package/dist/planning/artifacts.js +11 -31
  88. package/dist/planning/artifacts.js.map +1 -1
  89. package/dist/question/__tests__/state.test.js +349 -1
  90. package/dist/question/__tests__/state.test.js.map +1 -1
  91. package/dist/question/__tests__/ui.test.js +6 -6
  92. package/dist/question/__tests__/ui.test.js.map +1 -1
  93. package/dist/question/events.d.ts +53 -0
  94. package/dist/question/events.d.ts.map +1 -0
  95. package/dist/question/events.js +201 -0
  96. package/dist/question/events.js.map +1 -0
  97. package/dist/question/state.d.ts +30 -2
  98. package/dist/question/state.d.ts.map +1 -1
  99. package/dist/question/state.js +276 -5
  100. package/dist/question/state.js.map +1 -1
  101. package/dist/question/types.d.ts +1 -0
  102. package/dist/question/types.d.ts.map +1 -1
  103. package/dist/question/types.js.map +1 -1
  104. package/dist/question/ui.d.ts.map +1 -1
  105. package/dist/question/ui.js +3 -18
  106. package/dist/question/ui.js.map +1 -1
  107. package/dist/ralph/__tests__/completion-audit.test.js +39 -0
  108. package/dist/ralph/__tests__/completion-audit.test.js.map +1 -1
  109. package/dist/scripts/__tests__/codex-native-hook.test.js +111 -1
  110. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  111. package/dist/scripts/__tests__/run-test-files.test.js +22 -0
  112. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
  113. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  114. package/dist/scripts/codex-native-hook.js +93 -1
  115. package/dist/scripts/codex-native-hook.js.map +1 -1
  116. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  117. package/dist/scripts/codex-native-pre-post.js +12 -6
  118. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  119. package/dist/scripts/run-test-files.js +12 -1
  120. package/dist/scripts/run-test-files.js.map +1 -1
  121. package/dist/team/__tests__/approved-execution.test.js +25 -24
  122. package/dist/team/__tests__/approved-execution.test.js.map +1 -1
  123. package/dist/team/__tests__/runtime.test.js +173 -26
  124. package/dist/team/__tests__/runtime.test.js.map +1 -1
  125. package/dist/team/__tests__/scaling.test.js +66 -17
  126. package/dist/team/__tests__/scaling.test.js.map +1 -1
  127. package/dist/team/__tests__/tmux-session.test.js +42 -0
  128. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  129. package/dist/team/__tests__/worker-bootstrap.test.js +205 -0
  130. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  131. package/dist/team/approved-execution.d.ts +13 -0
  132. package/dist/team/approved-execution.d.ts.map +1 -1
  133. package/dist/team/approved-execution.js +65 -30
  134. package/dist/team/approved-execution.js.map +1 -1
  135. package/dist/team/runtime.d.ts.map +1 -1
  136. package/dist/team/runtime.js +28 -24
  137. package/dist/team/runtime.js.map +1 -1
  138. package/dist/team/scaling.d.ts.map +1 -1
  139. package/dist/team/scaling.js +7 -8
  140. package/dist/team/scaling.js.map +1 -1
  141. package/dist/team/tmux-session.d.ts.map +1 -1
  142. package/dist/team/tmux-session.js +48 -2
  143. package/dist/team/tmux-session.js.map +1 -1
  144. package/dist/team/ultragoal-context.d.ts +35 -0
  145. package/dist/team/ultragoal-context.d.ts.map +1 -0
  146. package/dist/team/ultragoal-context.js +191 -0
  147. package/dist/team/ultragoal-context.js.map +1 -0
  148. package/dist/ultragoal/__tests__/docs-contract.test.js +19 -0
  149. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  150. package/package.json +1 -1
  151. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  152. package/plugins/oh-my-codex/skills/plan/SKILL.md +3 -3
  153. package/plugins/oh-my-codex/skills/ralph/SKILL.md +2 -2
  154. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +1 -1
  155. package/plugins/oh-my-codex/skills/team/SKILL.md +6 -0
  156. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +11 -0
  157. package/skills/plan/SKILL.md +3 -3
  158. package/skills/ralph/SKILL.md +2 -2
  159. package/skills/ralplan/SKILL.md +1 -1
  160. package/skills/team/SKILL.md +6 -0
  161. package/skills/ultragoal/SKILL.md +11 -0
  162. package/src/scripts/__tests__/codex-native-hook.test.ts +133 -1
  163. package/src/scripts/__tests__/run-test-files.test.ts +32 -0
  164. package/src/scripts/codex-native-hook.ts +121 -2
  165. package/src/scripts/codex-native-pre-post.ts +12 -6
  166. package/src/scripts/run-test-files.ts +13 -2
  167. package/dist/planning/__tests__/context-pack-status.test.d.ts +0 -2
  168. package/dist/planning/__tests__/context-pack-status.test.d.ts.map +0 -1
  169. package/dist/planning/__tests__/context-pack-status.test.js +0 -795
  170. package/dist/planning/__tests__/context-pack-status.test.js.map +0 -1
  171. package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts +0 -2
  172. package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts.map +0 -1
  173. package/dist/planning/__tests__/ready-context-pack-role-refs.test.js +0 -612
  174. package/dist/planning/__tests__/ready-context-pack-role-refs.test.js.map +0 -1
  175. package/dist/planning/context-pack-status.d.ts +0 -73
  176. package/dist/planning/context-pack-status.d.ts.map +0 -1
  177. package/dist/planning/context-pack-status.js +0 -745
  178. package/dist/planning/context-pack-status.js.map +0 -1
@@ -1,612 +0,0 @@
1
- import { afterEach, beforeEach, describe, it } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { createHash } from 'node:crypto';
4
- import { existsSync } from 'node:fs';
5
- import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
6
- import { tmpdir } from 'node:os';
7
- import { join, relative } from 'node:path';
8
- import { readReadyContextPackPrivateEntryReadModel, readReadyContextPackRoleRefs, } from '../context-pack-status.js';
9
- let tempDir;
10
- const PRIVATE_LABEL_PATTERN = /^[\p{L}\p{N}][\p{L}\p{N}\p{M}-]*$/u;
11
- const PRIVATE_COMPACT_TOKEN_PATTERN = /^[a-z][a-z0-9-]*$/;
12
- const MAX_PRIVATE_LABEL_LENGTH = 80;
13
- const MAX_PRIVATE_TAG_COUNT = 8;
14
- const MIN_PRIVATE_SELECTOR_MAX_WORDS = 40;
15
- const MAX_PRIVATE_SELECTOR_MAX_WORDS = 240;
16
- const MAX_PRIVATE_RELATION_PATH_STEPS = 5;
17
- const MAX_PRIVATE_RELATION_TARGET_LENGTH = 180;
18
- const SUPPORTED_ROLES = ['scope', 'build', 'verify'];
19
- const PRIVATE_ENTRY_KEYS = ['path', 'roles', 'label', 'tags', 'selector', 'relationPath'];
20
- const PRIVATE_HEADING_SELECTOR_KEYS = ['type', 'value', 'maxWords'];
21
- const PRIVATE_LINES_SELECTOR_KEYS = ['type', 'start', 'end'];
22
- const PRIVATE_RELATION_STEP_KEYS = ['tag', 'target'];
23
- function computeGitBlobSha1(content) {
24
- const buffer = Buffer.from(content, 'utf-8');
25
- const header = Buffer.from(`blob ${buffer.length}\0`, 'utf-8');
26
- return createHash('sha1').update(header).update(buffer).digest('hex');
27
- }
28
- function relativeToRepo(path) {
29
- return relative(tempDir, path).replaceAll('\\', '/');
30
- }
31
- function canonicalContextPackRelativePath(slug) {
32
- return `.omx/context/context-20260507T120000Z-${slug}.json`;
33
- }
34
- async function setup() {
35
- tempDir = await mkdtemp(join(tmpdir(), 'omx-context-pack-role-refs-'));
36
- }
37
- async function cleanup() {
38
- if (tempDir && existsSync(tempDir)) {
39
- await rm(tempDir, { recursive: true, force: true });
40
- }
41
- }
42
- function createDeterministicRandom(seed) {
43
- let state = seed >>> 0;
44
- return () => {
45
- state = Math.imul(state, 1_664_525) + 1_013_904_223;
46
- state >>>= 0;
47
- return state / 0x1_0000_0000;
48
- };
49
- }
50
- function pickRandom(nextRandom, values) {
51
- const index = Math.floor(nextRandom() * values.length);
52
- return values[index];
53
- }
54
- function maybe(nextRandom, threshold = 0.5) {
55
- return nextRandom() < threshold;
56
- }
57
- function normalizeRepoRelativePathModel(rawPath) {
58
- const trimmed = rawPath.trim().replace(/^`|`$/g, '').replaceAll('\\', '/');
59
- if (!trimmed) {
60
- return null;
61
- }
62
- const withoutLeadingDot = trimmed.startsWith('./') ? trimmed.slice(2) : trimmed;
63
- if (!withoutLeadingDot
64
- || withoutLeadingDot.startsWith('/')
65
- || /^[A-Za-z]:/.test(withoutLeadingDot)) {
66
- return null;
67
- }
68
- const segments = withoutLeadingDot
69
- .split('/')
70
- .filter((segment) => segment.length > 0);
71
- if (segments.length === 0 || segments.includes('..')) {
72
- return null;
73
- }
74
- return segments.join('/');
75
- }
76
- function hasOnlyAllowedKeysModel(record, allowedKeys) {
77
- return Object.keys(record).every((key) => allowedKeys.includes(key));
78
- }
79
- function normalizeCompactTokenModel(raw) {
80
- const normalized = raw
81
- .trim()
82
- .toLowerCase()
83
- .replace(/[^a-z0-9]+/g, '-')
84
- .replace(/^-+|-+$/g, '')
85
- .slice(0, MAX_PRIVATE_LABEL_LENGTH)
86
- .replace(/-+$/g, '');
87
- return PRIVATE_COMPACT_TOKEN_PATTERN.test(normalized) ? normalized : null;
88
- }
89
- function normalizeLabelModel(raw) {
90
- if (typeof raw !== 'string') {
91
- return null;
92
- }
93
- const normalized = Array.from(raw
94
- .normalize('NFKC')
95
- .trim()
96
- .toLowerCase()
97
- .replace(/[^\p{L}\p{N}\p{M}]+/gu, '-')
98
- .replace(/^-+|-+$/g, ''))
99
- .slice(0, MAX_PRIVATE_LABEL_LENGTH)
100
- .join('')
101
- .replace(/-+$/g, '');
102
- return PRIVATE_LABEL_PATTERN.test(normalized) ? normalized : null;
103
- }
104
- function normalizeTagsModel(raw) {
105
- if (!Array.isArray(raw) || raw.length > MAX_PRIVATE_TAG_COUNT) {
106
- return null;
107
- }
108
- const normalized = new Set();
109
- for (const tag of raw) {
110
- if (typeof tag !== 'string') {
111
- return null;
112
- }
113
- const normalizedTag = normalizeCompactTokenModel(tag);
114
- if (!normalizedTag) {
115
- return null;
116
- }
117
- normalized.add(normalizedTag);
118
- }
119
- return [...normalized].sort((left, right) => left.localeCompare(right));
120
- }
121
- function normalizeSelectorModel(raw) {
122
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
123
- return null;
124
- }
125
- const record = raw;
126
- if (record.type === 'heading') {
127
- if (!hasOnlyAllowedKeysModel(record, PRIVATE_HEADING_SELECTOR_KEYS)) {
128
- return null;
129
- }
130
- const value = typeof record.value === 'string' ? record.value.trim() : '';
131
- const rawMaxWords = record.maxWords;
132
- if (!value) {
133
- return null;
134
- }
135
- if (rawMaxWords != null) {
136
- if (typeof rawMaxWords !== 'number' || !Number.isInteger(rawMaxWords)) {
137
- return null;
138
- }
139
- if (rawMaxWords < MIN_PRIVATE_SELECTOR_MAX_WORDS
140
- || rawMaxWords > MAX_PRIVATE_SELECTOR_MAX_WORDS) {
141
- return null;
142
- }
143
- }
144
- return {
145
- type: 'heading',
146
- value,
147
- maxWords: typeof rawMaxWords === 'number' ? rawMaxWords : undefined,
148
- };
149
- }
150
- if (record.type === 'lines') {
151
- if (!hasOnlyAllowedKeysModel(record, PRIVATE_LINES_SELECTOR_KEYS)) {
152
- return null;
153
- }
154
- const start = record.start;
155
- const end = record.end;
156
- if (typeof start !== 'number' || typeof end !== 'number') {
157
- return null;
158
- }
159
- if (!Number.isInteger(start) || !Number.isInteger(end)) {
160
- return null;
161
- }
162
- if (start < 1 || end < start) {
163
- return null;
164
- }
165
- return { type: 'lines', start, end };
166
- }
167
- return null;
168
- }
169
- function normalizeRelationPathModel(raw) {
170
- if (!Array.isArray(raw)
171
- || raw.length === 0
172
- || raw.length > MAX_PRIVATE_RELATION_PATH_STEPS) {
173
- return null;
174
- }
175
- const steps = [];
176
- for (const step of raw) {
177
- if (!step || typeof step !== 'object' || Array.isArray(step)) {
178
- return null;
179
- }
180
- const record = step;
181
- if (!hasOnlyAllowedKeysModel(record, PRIVATE_RELATION_STEP_KEYS)) {
182
- return null;
183
- }
184
- const tag = typeof record.tag === 'string' ? normalizeCompactTokenModel(record.tag) : null;
185
- const target = typeof record.target === 'string' ? record.target.trim() : '';
186
- if (!tag || !target || target.length > MAX_PRIVATE_RELATION_TARGET_LENGTH) {
187
- return null;
188
- }
189
- steps.push({ tag, target });
190
- }
191
- return steps;
192
- }
193
- function expectedRoleRefsModel(entries) {
194
- const grouped = { scope: [], build: [], verify: [] };
195
- const seen = {
196
- scope: new Set(),
197
- build: new Set(),
198
- verify: new Set(),
199
- };
200
- for (const entry of entries) {
201
- const path = normalizeRepoRelativePathModel(entry.path);
202
- if (!path) {
203
- return null;
204
- }
205
- for (const role of entry.roles) {
206
- if (!SUPPORTED_ROLES.includes(role)) {
207
- return null;
208
- }
209
- const typedRole = role;
210
- if (seen[typedRole].has(path)) {
211
- continue;
212
- }
213
- seen[typedRole].add(path);
214
- grouped[typedRole].push(path);
215
- }
216
- }
217
- return grouped;
218
- }
219
- function expectedPrivateEntryReadModel(entries) {
220
- const normalizedEntries = [];
221
- for (const entry of entries) {
222
- const path = normalizeRepoRelativePathModel(entry.path);
223
- if (!path) {
224
- return null;
225
- }
226
- if (!hasOnlyAllowedKeysModel(entry, PRIVATE_ENTRY_KEYS)) {
227
- return null;
228
- }
229
- const roles = [];
230
- for (const role of entry.roles) {
231
- if (!SUPPORTED_ROLES.includes(role)) {
232
- return null;
233
- }
234
- if (!roles.includes(role)) {
235
- roles.push(role);
236
- }
237
- }
238
- if (roles.length === 0) {
239
- return null;
240
- }
241
- const label = entry.label == null ? null : normalizeLabelModel(entry.label);
242
- if (entry.label != null && !label) {
243
- return null;
244
- }
245
- const tags = entry.tags == null ? [] : normalizeTagsModel(entry.tags);
246
- if (entry.tags != null && !tags) {
247
- return null;
248
- }
249
- const selector = entry.selector == null ? null : normalizeSelectorModel(entry.selector);
250
- if (entry.selector != null && !selector) {
251
- return null;
252
- }
253
- const relationPath = entry.relationPath == null ? null : normalizeRelationPathModel(entry.relationPath);
254
- if (entry.relationPath != null && !relationPath) {
255
- return null;
256
- }
257
- normalizedEntries.push({
258
- path,
259
- roles,
260
- label,
261
- tags: tags ?? [],
262
- selector,
263
- relationPath,
264
- });
265
- }
266
- return normalizedEntries;
267
- }
268
- function buildValidPrivateMetadata(role, slug, normalizedPath, index, nextRandom) {
269
- const metadata = {};
270
- if (maybe(nextRandom, 0.8)) {
271
- metadata.label = pickRandom(nextRandom, [
272
- ` ${role} focus ${index} `,
273
- `${role.toUpperCase()} contract ${index}`,
274
- `Seção ${role} ${index}`,
275
- ]);
276
- }
277
- if (maybe(nextRandom, 0.7)) {
278
- const rawTags = [
279
- role,
280
- `lane ${index % 4}`,
281
- pickRandom(nextRandom, ['runtime', 'api', 'smoke-test', 'handoff']),
282
- ];
283
- if (maybe(nextRandom, 0.5)) {
284
- rawTags.push(role.toUpperCase());
285
- }
286
- metadata.tags = rawTags;
287
- }
288
- if (maybe(nextRandom, 0.7)) {
289
- if (maybe(nextRandom)) {
290
- metadata.selector = {
291
- type: 'heading',
292
- value: ` ## ${role.toUpperCase()} Focus ${index} `,
293
- ...(maybe(nextRandom, 0.8)
294
- ? { maxWords: pickRandom(nextRandom, [40, 80, 120, 240]) }
295
- : {}),
296
- };
297
- }
298
- else {
299
- const start = 1 + Math.floor(nextRandom() * 6);
300
- metadata.selector = {
301
- type: 'lines',
302
- start,
303
- end: start + Math.floor(nextRandom() * 4),
304
- };
305
- }
306
- }
307
- if (maybe(nextRandom, 0.8)) {
308
- const relationPath = [
309
- { tag: 'Plan', target: ` ${slug} ` },
310
- ];
311
- const middleStepCount = Math.floor(nextRandom() * 3);
312
- for (let stepIndex = 0; stepIndex < middleStepCount; stepIndex += 1) {
313
- relationPath.push({
314
- tag: pickRandom(nextRandom, ['Evidence', 'Dependency', 'Links To']),
315
- target: ` ${normalizedPath}#step-${index}-${stepIndex} `,
316
- });
317
- }
318
- relationPath.push({
319
- tag: pickRandom(nextRandom, ['Bounds', 'Implements', 'Verifies']),
320
- target: ` ${normalizedPath} `,
321
- });
322
- metadata.relationPath = relationPath;
323
- }
324
- return metadata;
325
- }
326
- function buildValidPropertyEntries(slug, index, nextRandom) {
327
- const scopePath = pickRandom(nextRandom, [
328
- `./docs/scope-${index}.md`,
329
- `docs\\scope-${index}.md`,
330
- `docs/scope-${index}.md`,
331
- ]);
332
- const buildPath = pickRandom(nextRandom, [
333
- `./docs/build-${index}.md`,
334
- `docs\\build-${index}.md`,
335
- `docs/build-${index}.md`,
336
- ]);
337
- const verifyPath = pickRandom(nextRandom, [
338
- `./docs/verify-${index}.md`,
339
- `docs\\verify-${index}.md`,
340
- `docs/verify-${index}.md`,
341
- ]);
342
- const entries = [
343
- { role: 'scope', path: scopePath },
344
- { role: 'build', path: buildPath },
345
- { role: 'verify', path: verifyPath },
346
- ];
347
- return entries.map(({ role, path }) => ({
348
- path,
349
- roles: [role],
350
- ...buildValidPrivateMetadata(role, slug, normalizeRepoRelativePathModel(path) ?? path, index, nextRandom),
351
- }));
352
- }
353
- async function writeContextPack(slug, entries) {
354
- const plansDir = join(tempDir, '.omx', 'plans');
355
- const contextDir = join(tempDir, '.omx', 'context');
356
- await mkdir(plansDir, { recursive: true });
357
- await mkdir(contextDir, { recursive: true });
358
- const prdPath = join(plansDir, `prd-${slug}.md`);
359
- const testSpecPath = join(plansDir, `test-spec-${slug}.md`);
360
- const packPath = join(tempDir, canonicalContextPackRelativePath(slug));
361
- await writeFile(prdPath, '# PRD\n');
362
- await writeFile(testSpecPath, '# Test Spec\n');
363
- const prdContent = await readFile(prdPath, 'utf-8');
364
- const testSpecContent = await readFile(testSpecPath, 'utf-8');
365
- await writeFile(packPath, JSON.stringify({
366
- slug,
367
- basis: {
368
- prd: {
369
- path: relativeToRepo(prdPath),
370
- sha1: computeGitBlobSha1(prdContent),
371
- },
372
- testSpecs: [{
373
- path: relativeToRepo(testSpecPath),
374
- sha1: computeGitBlobSha1(testSpecContent),
375
- }],
376
- },
377
- entries,
378
- }, null, 2));
379
- return packPath;
380
- }
381
- describe('ready context pack role refs', () => {
382
- beforeEach(async () => { await setup(); });
383
- afterEach(async () => { await cleanup(); });
384
- it('normalizes, groups, and dedupes repo-relative refs by role', async () => {
385
- const packPath = await writeContextPack('alpha', [
386
- { path: './src/scope.ts', roles: ['scope'] },
387
- { path: 'src\\build.ts', roles: ['build', 'verify'] },
388
- { path: 'src/build.ts', roles: ['build'] },
389
- { path: 'src/shared.ts', roles: ['scope', 'build'] },
390
- { path: 'src/shared.ts', roles: ['scope'] },
391
- { path: 'src/verify.ts', roles: ['verify'] },
392
- ]);
393
- assert.deepEqual(readReadyContextPackRoleRefs(packPath), {
394
- scope: ['src/scope.ts', 'src/shared.ts'],
395
- build: ['src/build.ts', 'src/shared.ts'],
396
- verify: ['src/build.ts', 'src/verify.ts'],
397
- });
398
- });
399
- it('reads optional private entry metadata without changing grouped role refs', async () => {
400
- const packPath = await writeContextPack('private-metadata', [
401
- {
402
- path: './docs/runtime.md',
403
- roles: ['build', 'verify'],
404
- label: 'Runtime Contract',
405
- tags: ['runtime', 'api', 'runtime'],
406
- selector: { type: 'heading', value: ' ## Runtime Contract ', maxWords: 120 },
407
- relationPath: [
408
- { tag: 'Plan', target: ' private-metadata ' },
409
- { tag: 'Implements', target: ' docs/runtime.md#runtime-contract ' },
410
- ],
411
- },
412
- {
413
- path: 'docs/scope.md',
414
- roles: ['scope'],
415
- label: 'Scope Lines',
416
- selector: { type: 'lines', start: 3, end: 7 },
417
- relationPath: [
418
- { tag: 'Plan', target: ' private-metadata ' },
419
- { tag: 'Bounds', target: ' docs/scope.md:3-7 ' },
420
- ],
421
- },
422
- ]);
423
- assert.deepEqual(readReadyContextPackRoleRefs(packPath), {
424
- scope: ['docs/scope.md'],
425
- build: ['docs/runtime.md'],
426
- verify: ['docs/runtime.md'],
427
- });
428
- assert.deepEqual(readReadyContextPackPrivateEntryReadModel(packPath), [
429
- {
430
- path: 'docs/runtime.md',
431
- roles: ['build', 'verify'],
432
- label: 'runtime-contract',
433
- tags: ['api', 'runtime'],
434
- selector: { type: 'heading', value: '## Runtime Contract', maxWords: 120 },
435
- relationPath: [
436
- { tag: 'plan', target: 'private-metadata' },
437
- { tag: 'implements', target: 'docs/runtime.md#runtime-contract' },
438
- ],
439
- },
440
- {
441
- path: 'docs/scope.md',
442
- roles: ['scope'],
443
- label: 'scope-lines',
444
- tags: [],
445
- selector: { type: 'lines', start: 3, end: 7 },
446
- relationPath: [
447
- { tag: 'plan', target: 'private-metadata' },
448
- { tag: 'bounds', target: 'docs/scope.md:3-7' },
449
- ],
450
- },
451
- ]);
452
- });
453
- it('fails closed for malformed private metadata counterfactuals while grouped role refs stay usable', async () => {
454
- const cases = [
455
- { slug: 'invalid-label-type', metadata: { label: 42 } },
456
- { slug: 'invalid-label-empty', metadata: { label: '---' } },
457
- { slug: 'invalid-tags-shape', metadata: { tags: ['runtime', '', 'verify'] } },
458
- {
459
- slug: 'invalid-selector-heading',
460
- metadata: { selector: { type: 'heading', value: 'Runtime Contract', maxWords: 20 } },
461
- },
462
- {
463
- slug: 'invalid-selector-lines',
464
- metadata: { selector: { type: 'lines', start: 0, end: 3 } },
465
- },
466
- {
467
- slug: 'invalid-relation-path',
468
- metadata: {
469
- relationPath: [
470
- { tag: 'plan', target: 'alpha' },
471
- { tag: 'evidence', target: 'beta' },
472
- { tag: 'implements', target: 'gamma' },
473
- { tag: 'dependency', target: 'delta' },
474
- { tag: 'bounds', target: 'epsilon' },
475
- { tag: 'verifies', target: 'zeta' },
476
- ],
477
- },
478
- },
479
- { slug: 'invalid-entry-extra-key', metadata: { unexpected: true } },
480
- {
481
- slug: 'invalid-selector-extra-key',
482
- metadata: { selector: { type: 'heading', value: 'Runtime Contract', extra: true } },
483
- },
484
- {
485
- slug: 'invalid-relation-step-extra-key',
486
- metadata: { relationPath: [{ tag: 'plan', target: 'alpha', extra: true }] },
487
- },
488
- ];
489
- for (const testCase of cases) {
490
- const packPath = await writeContextPack(testCase.slug, [
491
- { path: 'docs/scope.md', roles: ['scope'] },
492
- {
493
- path: 'docs/build.md',
494
- roles: ['build'],
495
- ...testCase.metadata,
496
- },
497
- { path: 'docs/verify.md', roles: ['verify'] },
498
- ]);
499
- assert.deepEqual(readReadyContextPackRoleRefs(packPath), {
500
- scope: ['docs/scope.md'],
501
- build: ['docs/build.md'],
502
- verify: ['docs/verify.md'],
503
- }, `grouped refs should stay usable for ${testCase.slug}`);
504
- assert.equal(readReadyContextPackPrivateEntryReadModel(packPath), null, `private entry read model should fail closed for ${testCase.slug}`);
505
- }
506
- });
507
- it('matches deterministic property checks for valid private metadata while keeping grouped role refs stable', async () => {
508
- const nextRandom = createDeterministicRandom(0x2244);
509
- for (let index = 0; index < 48; index += 1) {
510
- const slug = `property-valid-${index}`;
511
- const entries = buildValidPropertyEntries(slug, index, nextRandom);
512
- const expectedRoleRefs = expectedRoleRefsModel(entries);
513
- const expectedReadModel = expectedPrivateEntryReadModel(entries);
514
- const packPath = await writeContextPack(slug, entries);
515
- assert.deepEqual(readReadyContextPackRoleRefs(packPath), expectedRoleRefs, `role refs mismatch for ${slug}`);
516
- assert.ok(expectedReadModel, `expected model should stay valid for ${slug}`);
517
- assert.deepEqual(readReadyContextPackPrivateEntryReadModel(packPath), expectedReadModel, `private read model mismatch for ${slug}`);
518
- }
519
- });
520
- it('fails closed across deterministic adversarial private metadata property cases while keeping grouped role refs stable', async () => {
521
- const nextRandom = createDeterministicRandom(0x2245);
522
- const longTarget = `docs/build.md#${'x'.repeat(MAX_PRIVATE_RELATION_TARGET_LENGTH)}`;
523
- const counterfactuals = [
524
- { name: 'label-type', mutate: (entry) => ({ ...entry, label: 42 }) },
525
- { name: 'label-empty', mutate: (entry) => ({ ...entry, label: '---' }) },
526
- {
527
- name: 'too-many-tags',
528
- mutate: (entry) => ({
529
- ...entry,
530
- tags: Array.from({ length: MAX_PRIVATE_TAG_COUNT + 1 }, (_, index) => `tag-${index}`),
531
- }),
532
- },
533
- {
534
- name: 'invalid-tag-token',
535
- mutate: (entry) => ({ ...entry, tags: ['runtime', '', 'verify'] }),
536
- },
537
- {
538
- name: 'selector-low-maxWords',
539
- mutate: (entry) => ({
540
- ...entry,
541
- selector: { type: 'heading', value: 'Runtime Contract', maxWords: 20 },
542
- }),
543
- },
544
- {
545
- name: 'selector-extra-key',
546
- mutate: (entry) => ({
547
- ...entry,
548
- selector: { type: 'lines', start: 2, end: 4, extra: true },
549
- }),
550
- },
551
- {
552
- name: 'relation-too-many-steps',
553
- mutate: (entry) => ({
554
- ...entry,
555
- relationPath: [
556
- { tag: 'plan', target: 'alpha' },
557
- { tag: 'evidence', target: 'beta' },
558
- { tag: 'dependency', target: 'gamma' },
559
- { tag: 'links-to', target: 'delta' },
560
- { tag: 'bounds', target: 'epsilon' },
561
- { tag: 'verifies', target: 'zeta' },
562
- ],
563
- }),
564
- },
565
- {
566
- name: 'relation-target-too-long',
567
- mutate: (entry) => ({
568
- ...entry,
569
- relationPath: [{ tag: 'plan', target: longTarget }],
570
- }),
571
- },
572
- {
573
- name: 'relation-step-extra-key',
574
- mutate: (entry) => ({
575
- ...entry,
576
- relationPath: [{ tag: 'plan', target: 'alpha', extra: true }],
577
- }),
578
- },
579
- {
580
- name: 'entry-extra-key',
581
- mutate: (entry) => ({ ...entry, unexpected: true }),
582
- },
583
- ];
584
- for (const counterfactual of counterfactuals) {
585
- for (let index = 0; index < 8; index += 1) {
586
- const slug = `property-invalid-${counterfactual.name}-${index}`;
587
- const entries = buildValidPropertyEntries(slug, index, nextRandom);
588
- const mutatedEntries = entries.map((entry, entryIndex) => entryIndex === 1 ? counterfactual.mutate(entry) : entry);
589
- const packPath = await writeContextPack(slug, mutatedEntries);
590
- assert.deepEqual(readReadyContextPackRoleRefs(packPath), expectedRoleRefsModel(mutatedEntries), `role refs should stay stable for ${slug}`);
591
- assert.equal(expectedPrivateEntryReadModel(mutatedEntries), null, `model should reject ${slug}`);
592
- assert.equal(readReadyContextPackPrivateEntryReadModel(packPath), null, `private read model should fail closed for ${slug}`);
593
- }
594
- }
595
- });
596
- it('fails closed when the pack contains malformed entry paths or unsupported roles', async () => {
597
- const invalidPathPack = await writeContextPack('invalid-path', [
598
- { path: '../outside.ts', roles: ['build'] },
599
- ]);
600
- const invalidRolePack = await writeContextPack('invalid-role', [
601
- { path: 'src/build.ts', roles: ['deploy'] },
602
- ]);
603
- assert.equal(readReadyContextPackRoleRefs(invalidPathPack), null);
604
- assert.equal(readReadyContextPackRoleRefs(invalidRolePack), null);
605
- });
606
- it('fails closed when the pack file cannot be read', () => {
607
- const missingPackPath = join(tempDir, canonicalContextPackRelativePath('missing'));
608
- assert.equal(readReadyContextPackRoleRefs(missingPackPath), null);
609
- assert.equal(readReadyContextPackPrivateEntryReadModel(missingPackPath), null);
610
- });
611
- });
612
- //# sourceMappingURL=ready-context-pack-role-refs.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ready-context-pack-role-refs.test.js","sourceRoot":"","sources":["../../../src/planning/__tests__/ready-context-pack-role-refs.test.ts"],"names":[],"mappings":"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"}