@encore-os/eos-spec 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/build-embeddings.d.ts +1 -1
- package/dist/commands/build-embeddings.js +4 -4
- package/dist/commands/build-embeddings.js.map +1 -1
- package/dist/commands/create.d.ts +32 -0
- package/dist/commands/create.js +176 -16
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/freshness.d.ts +1 -1
- package/dist/commands/freshness.js +4 -4
- package/dist/commands/freshness.js.map +1 -1
- package/dist/commands/index-spec.d.ts +22 -0
- package/dist/commands/index-spec.js +48 -0
- package/dist/commands/index-spec.js.map +1 -0
- package/dist/commands/promote.d.ts +46 -0
- package/dist/commands/promote.js +175 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/verify-acs.d.ts +9 -1
- package/dist/commands/verify-acs.js +93 -31
- package/dist/commands/verify-acs.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +33 -1
- package/dist/lib/config.js +34 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/design-doc.d.ts +26 -0
- package/dist/lib/design-doc.js +42 -0
- package/dist/lib/design-doc.js.map +1 -0
- package/dist/lib/exec.d.ts +6 -1
- package/dist/lib/exec.js +5 -1
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/frontmatter.d.ts +15 -0
- package/dist/lib/frontmatter.js +34 -0
- package/dist/lib/frontmatter.js.map +1 -1
- package/dist/lib/git-ids.d.ts +11 -0
- package/dist/lib/git-ids.js +56 -0
- package/dist/lib/git-ids.js.map +1 -0
- package/dist/lib/handoff.d.ts +27 -0
- package/dist/lib/handoff.js +21 -0
- package/dist/lib/handoff.js.map +1 -0
- package/dist/lib/pipeline-config.d.ts +7 -5
- package/dist/lib/pipeline-config.js +17 -6
- package/dist/lib/pipeline-config.js.map +1 -1
- package/dist/lib/precedent-search.d.ts +31 -1
- package/dist/lib/precedent-search.js +13 -6
- package/dist/lib/precedent-search.js.map +1 -1
- package/dist/lib/seed-acs.d.ts +10 -0
- package/dist/lib/seed-acs.js +20 -0
- package/dist/lib/seed-acs.js.map +1 -0
- package/dist/lib/spec-id-guard.d.ts +19 -0
- package/dist/lib/spec-id-guard.js +34 -0
- package/dist/lib/spec-id-guard.js.map +1 -0
- package/dist/lib/spec-index.d.ts +20 -0
- package/dist/lib/spec-index.js +80 -0
- package/dist/lib/spec-index.js.map +1 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/pure.d.ts +2 -0
- package/dist/pure.js +7 -0
- package/dist/pure.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,7 +13,7 @@ import type { Command } from 'commander';
|
|
|
13
13
|
* (used in tests and custom callers). The data dir defaults to what is configured
|
|
14
14
|
* in specs/config.yaml (`embeddings.data_dir`), falling back to tools/eos-spec/data.
|
|
15
15
|
*
|
|
16
|
-
* Generate specs/spec-index.json first via
|
|
16
|
+
* Generate specs/spec-index.json first via `eos-spec index`.
|
|
17
17
|
*/
|
|
18
18
|
export declare function registerBuildEmbeddings(program: Command,
|
|
19
19
|
/** Injectable embedder — defaults to ollamaEmbed. Receives raw texts. */
|
|
@@ -18,14 +18,14 @@ import { getRepoRoot } from '../lib/repo.js';
|
|
|
18
18
|
* (used in tests and custom callers). The data dir defaults to what is configured
|
|
19
19
|
* in specs/config.yaml (`embeddings.data_dir`), falling back to tools/eos-spec/data.
|
|
20
20
|
*
|
|
21
|
-
* Generate specs/spec-index.json first via
|
|
21
|
+
* Generate specs/spec-index.json first via `eos-spec index`.
|
|
22
22
|
*/
|
|
23
23
|
export function registerBuildEmbeddings(program,
|
|
24
24
|
/** Injectable embedder — defaults to ollamaEmbed. Receives raw texts. */
|
|
25
25
|
embed) {
|
|
26
26
|
program
|
|
27
27
|
.command('build-embeddings')
|
|
28
|
-
.description('Build the committed semantic-precedent embedding index from specs/spec-index.json. Writes spec-embeddings.bin, spec-embeddings.manifest.json, and recall-query-vectors.json to the configured data dir. Requires Ollama unless --embed is injected. Generate specs/spec-index.json first
|
|
28
|
+
.description('Build the committed semantic-precedent embedding index from specs/spec-index.json. Writes spec-embeddings.bin, spec-embeddings.manifest.json, and recall-query-vectors.json to the configured data dir. Requires Ollama unless --embed is injected. Generate specs/spec-index.json first via `eos-spec index`.')
|
|
29
29
|
.option('--data-dir <path>', 'Override the embeddings data dir (default: embeddings.data_dir from specs/config.yaml, or tools/eos-spec/data)')
|
|
30
30
|
.action(async (options, cmd) => {
|
|
31
31
|
const global = getGlobalOptions(cmd);
|
|
@@ -38,9 +38,9 @@ embed) {
|
|
|
38
38
|
ok: false,
|
|
39
39
|
error: {
|
|
40
40
|
code: ErrorCode.IO_ERROR,
|
|
41
|
-
message: `build-embeddings: spec
|
|
41
|
+
message: `build-embeddings: spec index not found at ${indexPath} — run \`eos-spec index\` first`,
|
|
42
42
|
},
|
|
43
|
-
text: `build-embeddings: spec
|
|
43
|
+
text: `build-embeddings: spec index not found at ${indexPath}.\nRun \`eos-spec index\` first.`,
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
let raw;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-embeddings.js","sourceRoot":"","sources":["../../src/commands/build-embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgB;AAChB,yEAAyE;AACzE,KAAgD;IAEhD,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CACV,
|
|
1
|
+
{"version":3,"file":"build-embeddings.js","sourceRoot":"","sources":["../../src/commands/build-embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
export declare function registerCreate(program: Command): void;
|
|
3
|
+
/**
|
|
4
|
+
* Issue #54 (born-verified guard): force every scaffolded `acceptance_criteria`
|
|
5
|
+
* item's `status:` to `planned`, regardless of what the resolved template
|
|
6
|
+
* authored. Scoped to the `acceptance_criteria:` block of the YAML frontmatter
|
|
7
|
+
* only — never touches the document's own top-level `status:` field, nor any
|
|
8
|
+
* `status`-shaped text in the markdown body.
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeScaffoldedAcceptanceCriteria(template: string): string;
|
|
3
11
|
export declare function specSubdirForId(id: string, specsPath: string): string;
|
|
4
12
|
export declare function applyHeader(template: string, id: string, title?: string): string;
|
|
13
|
+
export declare function slugify(s: string): string;
|
|
5
14
|
export declare function nextFreeId(repoRoot: string, core: string, kind: 'base' | 'ux'): string;
|
|
15
|
+
/**
|
|
16
|
+
* Scaffold a single spec file from the configured template — the reusable core of
|
|
17
|
+
* `create`'s spec-write step (issue #60 A5), extracted so the `promote` verb mints the
|
|
18
|
+
* SAME templated, AC-normalized file the CLI does. Resolves the template tier
|
|
19
|
+
* (`full`→full_spec, `lite`→lite_spec, `micro`→enhancement_single; default full_spec),
|
|
20
|
+
* applies the header, and writes only when `write && !exists`. Returns the target path
|
|
21
|
+
* and whether a file was actually written (false on dry-run or when the file already
|
|
22
|
+
* exists). The #54 born-AC normalization is applied so a scaffolded spec can never
|
|
23
|
+
* inherit a verified/complete AC from a consumer template.
|
|
24
|
+
*/
|
|
25
|
+
export declare function scaffoldSpec(repoRoot: string, opts: {
|
|
26
|
+
id: string;
|
|
27
|
+
core: string;
|
|
28
|
+
slug: string;
|
|
29
|
+
title?: string;
|
|
30
|
+
template?: 'full' | 'lite' | 'micro';
|
|
31
|
+
write: boolean;
|
|
32
|
+
configOverride?: string;
|
|
33
|
+
}): {
|
|
34
|
+
path: string;
|
|
35
|
+
created: boolean;
|
|
36
|
+
content: string;
|
|
37
|
+
};
|
|
6
38
|
export declare function humanizeName(slug: string): string;
|
package/dist/commands/create.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
2
|
+
import { basename, join } from 'node:path';
|
|
3
|
+
import { resolveClaimedBy } from './claim.js';
|
|
3
4
|
import { loadConfig, resolveTemplatePath } from '../lib/config.js';
|
|
5
|
+
import { addClaim, DEFAULT_TTL_MINUTES } from '../lib/claims.js';
|
|
6
|
+
import { runScript } from '../lib/exec.js';
|
|
4
7
|
import { logEvent, RUN_ID } from '../lib/events.js';
|
|
8
|
+
import { gitClaimedIdNumbers } from '../lib/git-ids.js';
|
|
5
9
|
import { ErrorCode, emit, emitContinuing, getGlobalOptions } from '../lib/output.js';
|
|
6
10
|
import { searchSpecs } from '../lib/precedent-search.js';
|
|
7
11
|
import { getRepoRoot, isKnownCore } from '../lib/repo.js';
|
|
12
|
+
import { assertSafeSpecFilename } from '../lib/spec-id-guard.js';
|
|
8
13
|
import { findSpecsById } from '../lib/specs.js';
|
|
9
14
|
import { withEventLog } from '../lib/with-event-log.js';
|
|
10
15
|
export function registerCreate(program) {
|
|
@@ -41,6 +46,21 @@ export function registerCreate(program) {
|
|
|
41
46
|
id = nextFreeId(repoRoot, String(options.core).toLowerCase(), kind);
|
|
42
47
|
if (!title)
|
|
43
48
|
title = humanizeName(String(options.name));
|
|
49
|
+
// Auto-take the claim lease on the id we just allocated (design: create is
|
|
50
|
+
// the natural claim point for auto-allocated ids — two parallel worktrees
|
|
51
|
+
// both auto-allocating must not both land on the same fresh id). Fail-open:
|
|
52
|
+
// a repo with no writable claim store must never make create unusable.
|
|
53
|
+
try {
|
|
54
|
+
const claim = addClaim(repoRoot, id, {
|
|
55
|
+
by: resolveClaimedBy(undefined, repoRoot),
|
|
56
|
+
ttlMinutes: DEFAULT_TTL_MINUTES,
|
|
57
|
+
});
|
|
58
|
+
emitContinuing(global, `create: claimed ${claim.id} for this worktree (ttl ${claim.ttlMinutes}m)`);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// no claim store / non-writable dir → proceed without a claim, exactly
|
|
62
|
+
// today's (pre-auto-claim) behavior.
|
|
63
|
+
}
|
|
44
64
|
}
|
|
45
65
|
const upper = id.toUpperCase();
|
|
46
66
|
const core = upper.split('-')[0]?.toLowerCase();
|
|
@@ -142,25 +162,29 @@ export function registerCreate(program) {
|
|
|
142
162
|
const created = [];
|
|
143
163
|
const skipped = [];
|
|
144
164
|
const config = loadConfig(repoRoot, global.config);
|
|
145
|
-
const specsDir = join(repoRoot, 'specs', core, specSubdirForId(upper, config.paths.specs));
|
|
146
165
|
const plansDir = join(repoRoot, 'specs', core, config.paths.plans);
|
|
147
166
|
const tasksDir = join(repoRoot, 'specs', core, config.paths.tasks);
|
|
148
|
-
mkdirSync(specsDir, { recursive: true });
|
|
149
167
|
if (options.withPlan)
|
|
150
168
|
mkdirSync(plansDir, { recursive: true });
|
|
151
169
|
if (options.withTasks)
|
|
152
170
|
mkdirSync(tasksDir, { recursive: true });
|
|
153
|
-
const tmplKey = options.enhancement ? 'enhancement_single' : options.lite ? 'lite_spec' : 'full_spec';
|
|
154
|
-
const tmplPath = resolveTemplatePath(config, tmplKey);
|
|
155
|
-
const tmplName = tmplPath
|
|
156
|
-
? tmplPath.split('/').pop()
|
|
157
|
-
: options.enhancement
|
|
158
|
-
? 'SPEC_TEMPLATE_LITE.md'
|
|
159
|
-
: options.lite
|
|
160
|
-
? 'SPEC_TEMPLATE_LITE.md'
|
|
161
|
-
: 'SPEC_TEMPLATE.md';
|
|
162
|
-
const specSource = readTemplate(repoRoot, tmplName);
|
|
163
171
|
const slug = slugify(options.name ? String(options.name) : title || upper);
|
|
172
|
+
// Refuse a filename the id grammar would over-match or the loader would drop —
|
|
173
|
+
// at mint time, not post-merge (issue #60, AC-E3). scaffoldSpec (below) writes
|
|
174
|
+
// the templated, #54-AC-normalized spec the same way `create` always has.
|
|
175
|
+
try {
|
|
176
|
+
assertSafeSpecFilename(core, upper, slug);
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
emit(global, {
|
|
180
|
+
ok: false,
|
|
181
|
+
error: { code: ErrorCode.INVALID_ARGUMENT, message: e.message },
|
|
182
|
+
data: { id: upper, slug },
|
|
183
|
+
text: e.message,
|
|
184
|
+
});
|
|
185
|
+
return; // emit() is `never` in prod; the explicit return keeps intent clear + matches promote
|
|
186
|
+
}
|
|
187
|
+
const template = options.enhancement ? 'micro' : options.lite ? 'lite' : 'full';
|
|
164
188
|
// Tier-2 precedent auto-run (design §4.3): surface related existing specs on
|
|
165
189
|
// every create. Warn-only — printed, telemetered, never blocking — and
|
|
166
190
|
// fail-open so a broken search can never block scaffolding (design §7).
|
|
@@ -209,8 +233,16 @@ export function registerCreate(program) {
|
|
|
209
233
|
// never throw from telemetry
|
|
210
234
|
}
|
|
211
235
|
}
|
|
212
|
-
const
|
|
213
|
-
|
|
236
|
+
const spec = scaffoldSpec(repoRoot, {
|
|
237
|
+
id: upper,
|
|
238
|
+
core,
|
|
239
|
+
slug,
|
|
240
|
+
title: title || upper,
|
|
241
|
+
template,
|
|
242
|
+
write: true,
|
|
243
|
+
configOverride: global.config,
|
|
244
|
+
});
|
|
245
|
+
(spec.created ? created : skipped).push(spec.path);
|
|
214
246
|
if (options.withPlan) {
|
|
215
247
|
const planTmpl = resolveTemplatePath(config, 'plan');
|
|
216
248
|
const planName = planTmpl ? planTmpl.split('/').pop() : 'PLAN_TEMPLATE.md';
|
|
@@ -239,6 +271,51 @@ function readTemplate(repoRoot, name) {
|
|
|
239
271
|
}
|
|
240
272
|
return readFileSync(path, 'utf8');
|
|
241
273
|
}
|
|
274
|
+
/** Matches a `status:` line inside a scaffolded AC list item, optionally quoted
|
|
275
|
+
* (single or double), whose value is one of the terminal statuses a fresh AC must
|
|
276
|
+
* never be born with. Requires the backreferenced closing quote to match the
|
|
277
|
+
* opening one so `status: 'verified'` and `status: "verified"` both normalize,
|
|
278
|
+
* without touching an unrelated line that merely mentions one of these words. */
|
|
279
|
+
const AC_BORN_VERIFIED_RE = /^(\s+status:\s*)(['"]?)(verified|hand_closed|complete)\b\2/gm;
|
|
280
|
+
/**
|
|
281
|
+
* Issue #54 (born-verified guard): force every scaffolded `acceptance_criteria`
|
|
282
|
+
* item's `status:` to `planned`, regardless of what the resolved template
|
|
283
|
+
* authored. Scoped to the `acceptance_criteria:` block of the YAML frontmatter
|
|
284
|
+
* only — never touches the document's own top-level `status:` field, nor any
|
|
285
|
+
* `status`-shaped text in the markdown body.
|
|
286
|
+
*/
|
|
287
|
+
export function normalizeScaffoldedAcceptanceCriteria(template) {
|
|
288
|
+
const fmMatch = template.match(/^(---\r?\n)([\s\S]*?)(\r?\n---\r?\n)/);
|
|
289
|
+
if (!fmMatch || fmMatch.index === undefined)
|
|
290
|
+
return template;
|
|
291
|
+
const whole = fmMatch[0];
|
|
292
|
+
const open = fmMatch[1];
|
|
293
|
+
const body = fmMatch[2];
|
|
294
|
+
const close = fmMatch[3];
|
|
295
|
+
const acKeyMatch = body.match(/^acceptance_criteria:.*$/m);
|
|
296
|
+
if (!acKeyMatch || acKeyMatch.index === undefined)
|
|
297
|
+
return template;
|
|
298
|
+
const acStart = acKeyMatch.index;
|
|
299
|
+
const acKeyEnd = acStart + acKeyMatch[0].length;
|
|
300
|
+
// The AC block runs until the next top-level frontmatter KEY (a column-0 line
|
|
301
|
+
// matching YAML key syntax, optionally quoted), or the end of the frontmatter
|
|
302
|
+
// body if acceptance_criteria is the last key. Anchoring on key syntax — not
|
|
303
|
+
// merely any column-0 non-space character — matters: a bare column-0 comment
|
|
304
|
+
// (`# ...`) between two AC list items is legal in-block YAML and must not end
|
|
305
|
+
// the block, or the AC after it would escape normalization. Nested lines
|
|
306
|
+
// (given/when/then, etc.) are always indented, so they never end the block, and
|
|
307
|
+
// the closing `---` fence can't appear here (the frontmatter match above is
|
|
308
|
+
// non-greedy, so `body` ends before the first fence).
|
|
309
|
+
const rest = body.slice(acKeyEnd);
|
|
310
|
+
const nextKeyOffset = rest.search(/\n(?=(["']?)[A-Za-z_][\w-]*\1\s*:)/);
|
|
311
|
+
const acBlockEnd = nextKeyOffset === -1 ? body.length : acKeyEnd + nextKeyOffset + 1;
|
|
312
|
+
const acBlock = body.slice(acStart, acBlockEnd);
|
|
313
|
+
const normalizedAcBlock = acBlock.replace(AC_BORN_VERIFIED_RE, '$1$2planned$2');
|
|
314
|
+
if (normalizedAcBlock === acBlock)
|
|
315
|
+
return template;
|
|
316
|
+
const normalizedBody = body.slice(0, acStart) + normalizedAcBlock + body.slice(acBlockEnd);
|
|
317
|
+
return (template.slice(0, fmMatch.index) + open + normalizedBody + close + template.slice(fmMatch.index + whole.length));
|
|
318
|
+
}
|
|
242
319
|
export function specSubdirForId(id, specsPath) {
|
|
243
320
|
return /-UX-/i.test(id) ? 'ux' : specsPath;
|
|
244
321
|
}
|
|
@@ -258,7 +335,7 @@ function writeIfMissing(target, content, created, skipped) {
|
|
|
258
335
|
writeFileSync(target, content, 'utf8');
|
|
259
336
|
created.push(target);
|
|
260
337
|
}
|
|
261
|
-
function slugify(s) {
|
|
338
|
+
export function slugify(s) {
|
|
262
339
|
return s
|
|
263
340
|
.toLowerCase()
|
|
264
341
|
.replace(/[^a-z0-9]+/g, '-')
|
|
@@ -286,9 +363,92 @@ export function nextFreeId(repoRoot, core, kind) {
|
|
|
286
363
|
max = Math.max(max, parseInt(m[1], 10));
|
|
287
364
|
}
|
|
288
365
|
}
|
|
366
|
+
max = Math.max(max, scanOriginRefsMaxId(repoRoot, core, re));
|
|
367
|
+
// Also fold ids burned only in git history or reserved in a sibling branch NAME —
|
|
368
|
+
// the gap the current-tree scans above can't see (issue #60, AC-E3). Base ids only:
|
|
369
|
+
// the helper keys on `<CORE>-<n>`, which never matches the `<CORE>-UX-<n>` sequence.
|
|
370
|
+
if (kind === 'base')
|
|
371
|
+
max = Math.max(max, ...gitClaimedIdNumbers(repoRoot, core));
|
|
289
372
|
const n = String(max + 1).padStart(2, '0');
|
|
290
373
|
return kind === 'ux' ? `${upper}-UX-${n}` : `${upper}-${n}`;
|
|
291
374
|
}
|
|
375
|
+
/**
|
|
376
|
+
* Scaffold a single spec file from the configured template — the reusable core of
|
|
377
|
+
* `create`'s spec-write step (issue #60 A5), extracted so the `promote` verb mints the
|
|
378
|
+
* SAME templated, AC-normalized file the CLI does. Resolves the template tier
|
|
379
|
+
* (`full`→full_spec, `lite`→lite_spec, `micro`→enhancement_single; default full_spec),
|
|
380
|
+
* applies the header, and writes only when `write && !exists`. Returns the target path
|
|
381
|
+
* and whether a file was actually written (false on dry-run or when the file already
|
|
382
|
+
* exists). The #54 born-AC normalization is applied so a scaffolded spec can never
|
|
383
|
+
* inherit a verified/complete AC from a consumer template.
|
|
384
|
+
*/
|
|
385
|
+
export function scaffoldSpec(repoRoot, opts) {
|
|
386
|
+
const upper = opts.id.toUpperCase();
|
|
387
|
+
const config = loadConfig(repoRoot, opts.configOverride);
|
|
388
|
+
const tmplKey = opts.template === 'micro' ? 'enhancement_single' : opts.template === 'lite' ? 'lite_spec' : 'full_spec';
|
|
389
|
+
const tmplPath = resolveTemplatePath(config, tmplKey);
|
|
390
|
+
const tmplName = tmplPath
|
|
391
|
+
? tmplPath.split('/').pop()
|
|
392
|
+
: tmplKey === 'full_spec'
|
|
393
|
+
? 'SPEC_TEMPLATE.md'
|
|
394
|
+
: 'SPEC_TEMPLATE_LITE.md';
|
|
395
|
+
const specSource = normalizeScaffoldedAcceptanceCriteria(readTemplate(repoRoot, tmplName));
|
|
396
|
+
const content = applyHeader(specSource, upper, opts.title || upper);
|
|
397
|
+
const specsDir = join(repoRoot, 'specs', opts.core, specSubdirForId(upper, config.paths.specs));
|
|
398
|
+
const path = join(specsDir, `${upper}-${opts.slug}.md`);
|
|
399
|
+
// `content` is returned regardless of `write` so a caller (the `promote` verb) can
|
|
400
|
+
// transform it — seed ACs, add the design_doc backlink — and control the final write
|
|
401
|
+
// itself, including a dry-run that renders without touching disk.
|
|
402
|
+
if (!opts.write || existsSync(path))
|
|
403
|
+
return { path, created: false, content };
|
|
404
|
+
mkdirSync(specsDir, { recursive: true });
|
|
405
|
+
writeFileSync(path, content, 'utf8');
|
|
406
|
+
return { path, created: true, content };
|
|
407
|
+
}
|
|
408
|
+
/** Bounds on the origin-refs scan below, so a repo with an unusually large number
|
|
409
|
+
* of fetched remote-tracking refs can't turn a `create` call into a hang: each git
|
|
410
|
+
* call is individually timeout-guarded, and the ref count is capped. */
|
|
411
|
+
const ORIGIN_SCAN_GIT_TIMEOUT_MS = 3000;
|
|
412
|
+
const ORIGIN_SCAN_MAX_REFS = 200;
|
|
413
|
+
/**
|
|
414
|
+
* Parallel-agent id collision guard: `nextFreeId`'s filesystem scan is blind to an
|
|
415
|
+
* id already claimed on a fetched-but-not-merged origin branch (a sibling worktree
|
|
416
|
+
* that ran `create` first). Scan `refs/remotes/origin` for the highest id under
|
|
417
|
+
* `specs/<core>` across those branches too. Fails open on any git error — a
|
|
418
|
+
* non-git directory, a repo with no `origin` remote, or a git binary that isn't on
|
|
419
|
+
* PATH all fall back to exactly today's fs-only behavior.
|
|
420
|
+
*/
|
|
421
|
+
function scanOriginRefsMaxId(repoRoot, core, re) {
|
|
422
|
+
let max = 0;
|
|
423
|
+
try {
|
|
424
|
+
const refsResult = runScript(['git', 'for-each-ref', 'refs/remotes/origin', '--format=%(objectname)'], repoRoot, {
|
|
425
|
+
timeoutMs: ORIGIN_SCAN_GIT_TIMEOUT_MS,
|
|
426
|
+
});
|
|
427
|
+
if (refsResult.exitCode !== 0)
|
|
428
|
+
return 0;
|
|
429
|
+
const refs = refsResult.stdout
|
|
430
|
+
.split('\n')
|
|
431
|
+
.map((s) => s.trim())
|
|
432
|
+
.filter(Boolean)
|
|
433
|
+
.slice(0, ORIGIN_SCAN_MAX_REFS);
|
|
434
|
+
for (const sha of refs) {
|
|
435
|
+
const lsResult = runScript(['git', 'ls-tree', '-r', '--name-only', sha, '--', `specs/${core}`], repoRoot, {
|
|
436
|
+
timeoutMs: ORIGIN_SCAN_GIT_TIMEOUT_MS,
|
|
437
|
+
});
|
|
438
|
+
if (lsResult.exitCode !== 0)
|
|
439
|
+
continue;
|
|
440
|
+
for (const f of lsResult.stdout.split('\n')) {
|
|
441
|
+
const m = basename(f).match(re);
|
|
442
|
+
if (m)
|
|
443
|
+
max = Math.max(max, parseInt(m[1], 10));
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
return 0; // non-git dir / git missing → fs-only behavior, exactly today's
|
|
449
|
+
}
|
|
450
|
+
return max;
|
|
451
|
+
}
|
|
292
452
|
export function humanizeName(slug) {
|
|
293
453
|
return slug
|
|
294
454
|
.replace(/[-_]+/g, ' ')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,6 @@ import type { Command } from 'commander';
|
|
|
8
8
|
* vectors are stale and must be rebuilt. Exits non-zero on drift (or a missing
|
|
9
9
|
* manifest/index) so CI / pre-commit can block, with an actionable rebuild hint.
|
|
10
10
|
*
|
|
11
|
-
* Generate the (gitignored) spec-index.json first via
|
|
11
|
+
* Generate the (gitignored) spec-index.json first via `eos-spec index`.
|
|
12
12
|
*/
|
|
13
13
|
export declare function registerFreshness(program: Command): void;
|
|
@@ -12,12 +12,12 @@ const REBUILD_HINT = 'Rebuild the committed embedding vectors for the current co
|
|
|
12
12
|
* vectors are stale and must be rebuilt. Exits non-zero on drift (or a missing
|
|
13
13
|
* manifest/index) so CI / pre-commit can block, with an actionable rebuild hint.
|
|
14
14
|
*
|
|
15
|
-
* Generate the (gitignored) spec-index.json first via
|
|
15
|
+
* Generate the (gitignored) spec-index.json first via `eos-spec index`.
|
|
16
16
|
*/
|
|
17
17
|
export function registerFreshness(program) {
|
|
18
18
|
program
|
|
19
19
|
.command('freshness')
|
|
20
|
-
.description('Check the committed semantic-precedent embeddings against the current spec corpus. Exits non-zero when the corpus has drifted (rebuild needed) or the manifest/index is missing. Generate specs/spec-index.json first
|
|
20
|
+
.description('Check the committed semantic-precedent embeddings against the current spec corpus. Exits non-zero when the corpus has drifted (rebuild needed) or the manifest/index is missing. Generate specs/spec-index.json first via `eos-spec index`.')
|
|
21
21
|
.action(withEventLog('freshness', async (_options, cmd) => {
|
|
22
22
|
const global = getGlobalOptions(cmd);
|
|
23
23
|
const repoRoot = getRepoRoot(global.repoRoot);
|
|
@@ -35,10 +35,10 @@ export function registerFreshness(program) {
|
|
|
35
35
|
ok: false,
|
|
36
36
|
error: {
|
|
37
37
|
code: ErrorCode.IO_ERROR,
|
|
38
|
-
message: 'freshness:
|
|
38
|
+
message: 'freshness: spec index not found — run `eos-spec index` first',
|
|
39
39
|
},
|
|
40
40
|
data: result,
|
|
41
|
-
text: 'freshness:
|
|
41
|
+
text: 'freshness: spec index not found — run `eos-spec index` first.',
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
if (result.reason === 'manifest-missing') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/commands/freshness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,YAAY,GAChB,qGAAqG,CAAC;AAExG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,
|
|
1
|
+
{"version":3,"file":"freshness.js","sourceRoot":"","sources":["../../src/commands/freshness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,YAAY,GAChB,qGAAqG,CAAC;AAExG;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,6OAA6O,CAC9O;SACA,MAAM,CACL,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAc,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC;QAEpF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,0EAA0E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI;aACpH,CAAC,CAAC;QACL,CAAC;QAED,yEAAyE;QACzE,IAAI,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,8DAA8D;iBACxE;gBACD,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,+DAA+D;aACtE,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,kBAAkB,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS,CAAC,QAAQ;oBACxB,OAAO,EAAE,sDAAsD,YAAY,EAAE;iBAC9E;gBACD,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,uDAAuD,YAAY,EAAE;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS,CAAC,iBAAiB;gBACjC,OAAO,EAAE,yEAAyE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,YAAY,EAAE;aAClM;YACD,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACJ,4EAA4E;gBAC5E,6BAA6B,MAAM,CAAC,WAAW,EAAE;gBACjD,6BAA6B,MAAM,CAAC,aAAa,EAAE;gBACnD,EAAE;gBACF,wFAAwF;gBACxF,YAAY;aACb,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
export { buildSpecIndex, extractSummary } from '../lib/spec-index.js';
|
|
3
|
+
export type { SpecIndexEntry } from '../lib/precedent-search.js';
|
|
4
|
+
/**
|
|
5
|
+
* `eos-spec index` — generate specs/spec-index.json, the lexical corpus that
|
|
6
|
+
* `precedent --topic` searches and `build-embeddings` / `freshness` read.
|
|
7
|
+
*
|
|
8
|
+
* Before this command the package consumed the index but shipped NO generator
|
|
9
|
+
* (the remediation hint named a consumer-only `npm run spec:index` script, so
|
|
10
|
+
* the prior-art step was broken everywhere except repos that carried their own
|
|
11
|
+
* generator). The entry shape is the one `searchSpecs` ranks against — the same
|
|
12
|
+
* projection builder's scripts/specs/build-spec-index.mjs produces.
|
|
13
|
+
*
|
|
14
|
+
* The output is a derived, regenerable cache (conventionally gitignored),
|
|
15
|
+
* pretty-printed with stable file-path ordering for clean diffs. Lexical search
|
|
16
|
+
* no longer requires it (searchSpecs falls back to an in-memory build), but the
|
|
17
|
+
* on-disk file is faster for hot search paths and REQUIRED by
|
|
18
|
+
* `build-embeddings` and `freshness`. The write path honors
|
|
19
|
+
* `embeddings.spec_index_path` from specs/config.yaml (default
|
|
20
|
+
* specs/spec-index.json), matching where those two commands read.
|
|
21
|
+
*/
|
|
22
|
+
export declare function registerIndex(program: Command): void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { resolveEmbeddingsPaths } from '../lib/embeddings-source.js';
|
|
4
|
+
import { emit, getGlobalOptions } from '../lib/output.js';
|
|
5
|
+
import { getRepoRoot } from '../lib/repo.js';
|
|
6
|
+
import { buildSpecIndex } from '../lib/spec-index.js';
|
|
7
|
+
import { withEventLog } from '../lib/with-event-log.js';
|
|
8
|
+
// Re-exported here so command-level consumers (and the Phase 2a task contract)
|
|
9
|
+
// can import the generator alongside its command registration.
|
|
10
|
+
export { buildSpecIndex, extractSummary } from '../lib/spec-index.js';
|
|
11
|
+
/**
|
|
12
|
+
* `eos-spec index` — generate specs/spec-index.json, the lexical corpus that
|
|
13
|
+
* `precedent --topic` searches and `build-embeddings` / `freshness` read.
|
|
14
|
+
*
|
|
15
|
+
* Before this command the package consumed the index but shipped NO generator
|
|
16
|
+
* (the remediation hint named a consumer-only `npm run spec:index` script, so
|
|
17
|
+
* the prior-art step was broken everywhere except repos that carried their own
|
|
18
|
+
* generator). The entry shape is the one `searchSpecs` ranks against — the same
|
|
19
|
+
* projection builder's scripts/specs/build-spec-index.mjs produces.
|
|
20
|
+
*
|
|
21
|
+
* The output is a derived, regenerable cache (conventionally gitignored),
|
|
22
|
+
* pretty-printed with stable file-path ordering for clean diffs. Lexical search
|
|
23
|
+
* no longer requires it (searchSpecs falls back to an in-memory build), but the
|
|
24
|
+
* on-disk file is faster for hot search paths and REQUIRED by
|
|
25
|
+
* `build-embeddings` and `freshness`. The write path honors
|
|
26
|
+
* `embeddings.spec_index_path` from specs/config.yaml (default
|
|
27
|
+
* specs/spec-index.json), matching where those two commands read.
|
|
28
|
+
*/
|
|
29
|
+
export function registerIndex(program) {
|
|
30
|
+
program
|
|
31
|
+
.command('index')
|
|
32
|
+
.description('Generate specs/spec-index.json — the lexical corpus precedent --topic searches and build-embeddings/freshness read. Derived + regenerable; honors embeddings.spec_index_path from specs/config.yaml.')
|
|
33
|
+
.action(withEventLog('index', async (_options, cmd) => {
|
|
34
|
+
const global = getGlobalOptions(cmd);
|
|
35
|
+
const repoRoot = getRepoRoot(global.repoRoot);
|
|
36
|
+
const { specIndexPath } = resolveEmbeddingsPaths(repoRoot, global.config);
|
|
37
|
+
const entries = buildSpecIndex(repoRoot);
|
|
38
|
+
const indexPath = join(repoRoot, specIndexPath);
|
|
39
|
+
mkdirSync(dirname(indexPath), { recursive: true });
|
|
40
|
+
writeFileSync(indexPath, `${JSON.stringify({ version: 1, specs: entries }, null, 2)}\n`, 'utf8');
|
|
41
|
+
emit(global, {
|
|
42
|
+
ok: true,
|
|
43
|
+
data: { count: entries.length, path: indexPath },
|
|
44
|
+
text: `index: wrote ${entries.length} spec(s) → ${indexPath}`,
|
|
45
|
+
});
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=index-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-spec.js","sourceRoot":"","sources":["../../src/commands/index-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,sMAAsM,CACvM;SACA,MAAM,CACL,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAc,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAChD,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjG,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;YAChD,IAAI,EAAE,gBAAgB,OAAO,CAAC,MAAM,cAAc,SAAS,EAAE;SAC9D,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* The `promote` verb — the brainstorm→spec handoff, in one engine action (issue #60,
|
|
4
|
+
* P1 engine half). It lives at the command layer because it composes `create`'s
|
|
5
|
+
* scaffolding + id-allocation (the `lib` layer never imports `commands/`, and the
|
|
6
|
+
* scaffolding primitives are command-owned) with the pure lib writers; `promoteDesignDoc`
|
|
7
|
+
* is exported as a plain function (unit-testable, surfaced on the package main entry as
|
|
8
|
+
* the Spec-Studio seam) and `registerPromote` is its thin CLI adapter.
|
|
9
|
+
*
|
|
10
|
+
* `promoteDesignDoc` turns an approved design doc into a collision-safe, AC-bearing,
|
|
11
|
+
* back-linked, claimed spec: allocate a git-aware id → guard the filename → scaffold the
|
|
12
|
+
* template → seed present-but-`planned` placeholder ACs (never born AC-less) → stamp the
|
|
13
|
+
* `design_doc:` backlink → flip the design doc's lifecycle line to the configured shipped
|
|
14
|
+
* marker → take a claim lease. All writes are gated on `opts.write` (dry-run renders
|
|
15
|
+
* without touching disk), mirroring `closeout-core`'s read→transform→write-if-changed
|
|
16
|
+
* model. The protected-branch refusal lives in the command adapter, not here.
|
|
17
|
+
*/
|
|
18
|
+
export type PromoteOptions = {
|
|
19
|
+
/** Path (repo-relative or absolute) to the approved design doc. */
|
|
20
|
+
designDoc: string;
|
|
21
|
+
core: string;
|
|
22
|
+
/** Spec name slug; defaults to the design-doc basename (date prefix + `-design` stripped). */
|
|
23
|
+
slug?: string;
|
|
24
|
+
title?: string;
|
|
25
|
+
template?: 'full' | 'lite' | 'micro';
|
|
26
|
+
/** When false, compute the full result but write nothing (dry-run). */
|
|
27
|
+
write: boolean;
|
|
28
|
+
/** Claim identity; defaults via resolveClaimedBy (env / worktree basename). */
|
|
29
|
+
by?: string;
|
|
30
|
+
ttlMinutes?: number;
|
|
31
|
+
/** Passthrough for the CLI `--config` override (handoff/config resolution). */
|
|
32
|
+
configOverride?: string;
|
|
33
|
+
};
|
|
34
|
+
export type PromoteResult = {
|
|
35
|
+
specId: string;
|
|
36
|
+
/** Absolute path to the (would-be) spec file. */
|
|
37
|
+
specPath: string;
|
|
38
|
+
/** Repo-relative design-doc path recorded as the backlink. */
|
|
39
|
+
designDoc: string;
|
|
40
|
+
acSeeded: number;
|
|
41
|
+
claimed: boolean;
|
|
42
|
+
specWritten: boolean;
|
|
43
|
+
designDocWritten: boolean;
|
|
44
|
+
};
|
|
45
|
+
export declare function promoteDesignDoc(repoRoot: string, opts: PromoteOptions): PromoteResult;
|
|
46
|
+
export declare function registerPromote(program: Command): void;
|