@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
package/dist/lib/config.js
CHANGED
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { parse as parseYaml } from 'yaml';
|
|
4
4
|
import { DEFAULT_GENERATED_TESTS_DIR, DEFAULT_MIGRATIONS_DIR, DEFAULT_VERIFIES_BACKLINK_ROOTS, DEFAULT_VERIFIES_SCAN_ROOTS, } from './discovery-defaults.js';
|
|
5
|
+
import { handoffConfig } from './handoff.js';
|
|
5
6
|
let cached = null;
|
|
6
7
|
let cachedPath = null;
|
|
7
8
|
export function loadConfig(repoRoot, configOverride) {
|
|
@@ -27,9 +28,11 @@ export function coresFromConfig(config) {
|
|
|
27
28
|
export function isKnownCoreFromConfig(config, core) {
|
|
28
29
|
return coresFromConfig(config).includes(core.toLowerCase());
|
|
29
30
|
}
|
|
30
|
-
/** Resolve a flat template key (e.g. 'full_spec', 'plan') to its path relative to repo
|
|
31
|
+
/** Resolve a flat template key (e.g. 'full_spec', 'plan') to its path relative to repo
|
|
32
|
+
* root. Null-safe: a config with no `templates:` block resolves to null, so the caller
|
|
33
|
+
* falls back to the conventional `specs/_templates/<NAME>.md` default. */
|
|
31
34
|
export function resolveTemplatePath(config, key) {
|
|
32
|
-
const val = config.templates[key];
|
|
35
|
+
const val = config.templates?.[key];
|
|
33
36
|
if (typeof val === 'string')
|
|
34
37
|
return val;
|
|
35
38
|
return null;
|
|
@@ -57,6 +60,35 @@ export function verifiesScanRoots(config) {
|
|
|
57
60
|
export function verifiesBacklinkRoots(config) {
|
|
58
61
|
return config.paths?.verifies_backlink_roots ?? DEFAULT_VERIFIES_BACKLINK_ROOTS;
|
|
59
62
|
}
|
|
63
|
+
/** Config-driven `verify-acs` Vitest lanes (Phase 2a Task 2). Absent ⇒ []. */
|
|
64
|
+
export function verifyLanes(config) {
|
|
65
|
+
return config.verify_lanes ?? [];
|
|
66
|
+
}
|
|
67
|
+
/** Resolve `verify_lanes` from `specs/config.yaml`, fail-safe to `[]` when the repo has
|
|
68
|
+
* no config file (or the key is absent) — so a repo without lane config keeps every
|
|
69
|
+
* non-root backing file deferred exactly as before this feature. Kept separate from
|
|
70
|
+
* `resolveDiscoveryPaths` so its `DiscoveryPaths` result shape is unaffected. */
|
|
71
|
+
export function resolveVerifyLanes(repoRoot, configOverride) {
|
|
72
|
+
try {
|
|
73
|
+
return verifyLanes(loadConfig(repoRoot, configOverride));
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Resolve the brainstorm→spec `handoff:` block from `specs/config.yaml`, per-key
|
|
80
|
+
* merged over `DEFAULT_HANDOFF` and fail-safe to the documented defaults when the
|
|
81
|
+
* repo has no config file (or no `handoff:` key). Mirrors `resolveVerifyLanes`. The
|
|
82
|
+
* `promote` verb reads this so its behavior is config-tuned per repo but identical
|
|
83
|
+
* by default across every eos-spec repo. */
|
|
84
|
+
export function resolveHandoff(repoRoot, configOverride) {
|
|
85
|
+
try {
|
|
86
|
+
return handoffConfig(loadConfig(repoRoot, configOverride));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return handoffConfig({});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
60
92
|
/**
|
|
61
93
|
* Resolve every discovery path from `specs/config.yaml`, fail-safe to the
|
|
62
94
|
* fork-layout defaults when the config (or an individual key) is absent — so a
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure design-doc lifecycle transforms — the `promote` verb's counterpart to the
|
|
3
|
+
* spec-side `setDesignDoc` frontmatter writer (frontmatter.ts). Fs-free (rides
|
|
4
|
+
* `/pure`) so a browser consumer (Spec Studio) can preview the flip client-side.
|
|
5
|
+
*
|
|
6
|
+
* When a design doc is promoted into an eos-spec, its prose lifecycle line
|
|
7
|
+
* (`- **Status:** Approved …`) is flipped to the configured shipped marker with the
|
|
8
|
+
* new spec id interpolated (`Shipped — see <ID>`) — the signal `check:handoff`
|
|
9
|
+
* keys on to know a design doc has landed. Both the lifecycle label and the shipped
|
|
10
|
+
* marker are parameterizable so a repo's `handoff:` config (design-doc.ts's caller)
|
|
11
|
+
* drives the exact strings; the defaults match `DEFAULT_HANDOFF`.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Flip the first prose lifecycle line of `designDocText` to `<shippedMarker> <specId>`.
|
|
15
|
+
*
|
|
16
|
+
* - Matches a line of the form `[- ][**]<label>[**]: <value>` (list-dash, bold, and
|
|
17
|
+
* the trailing colon are all optional) where `<label>` derives from `lifecycleLine`
|
|
18
|
+
* (default `Status:`), preserving the exact decoration and only swapping the value.
|
|
19
|
+
* - Idempotent and safe: a value already in a TERMINAL state (Shipped/Superseded/
|
|
20
|
+
* Deprecated/Deferred) is left byte-for-byte untouched.
|
|
21
|
+
* - When no lifecycle line exists, appends `- **<label>:** <shippedMarker> <specId>`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function setDesignDocStatusShipped(designDocText: string, specId: string, opts?: {
|
|
24
|
+
lifecycleLine?: string;
|
|
25
|
+
shippedMarker?: string;
|
|
26
|
+
}): string;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure design-doc lifecycle transforms — the `promote` verb's counterpart to the
|
|
3
|
+
* spec-side `setDesignDoc` frontmatter writer (frontmatter.ts). Fs-free (rides
|
|
4
|
+
* `/pure`) so a browser consumer (Spec Studio) can preview the flip client-side.
|
|
5
|
+
*
|
|
6
|
+
* When a design doc is promoted into an eos-spec, its prose lifecycle line
|
|
7
|
+
* (`- **Status:** Approved …`) is flipped to the configured shipped marker with the
|
|
8
|
+
* new spec id interpolated (`Shipped — see <ID>`) — the signal `check:handoff`
|
|
9
|
+
* keys on to know a design doc has landed. Both the lifecycle label and the shipped
|
|
10
|
+
* marker are parameterizable so a repo's `handoff:` config (design-doc.ts's caller)
|
|
11
|
+
* drives the exact strings; the defaults match `DEFAULT_HANDOFF`.
|
|
12
|
+
*/
|
|
13
|
+
/** Statuses a promotion must never overwrite — a doc already Shipped (idempotence),
|
|
14
|
+
* or one deliberately parked (Superseded/Deprecated/Deferred). */
|
|
15
|
+
const TERMINAL = /^(Shipped|Superseded|Deprecated|Deferred)\b/i;
|
|
16
|
+
/**
|
|
17
|
+
* Flip the first prose lifecycle line of `designDocText` to `<shippedMarker> <specId>`.
|
|
18
|
+
*
|
|
19
|
+
* - Matches a line of the form `[- ][**]<label>[**]: <value>` (list-dash, bold, and
|
|
20
|
+
* the trailing colon are all optional) where `<label>` derives from `lifecycleLine`
|
|
21
|
+
* (default `Status:`), preserving the exact decoration and only swapping the value.
|
|
22
|
+
* - Idempotent and safe: a value already in a TERMINAL state (Shipped/Superseded/
|
|
23
|
+
* Deprecated/Deferred) is left byte-for-byte untouched.
|
|
24
|
+
* - When no lifecycle line exists, appends `- **<label>:** <shippedMarker> <specId>`.
|
|
25
|
+
*/
|
|
26
|
+
export function setDesignDocStatusShipped(designDocText, specId, opts = {}) {
|
|
27
|
+
const label = (opts.lifecycleLine ?? 'Status:').replace(/:\s*$/, '');
|
|
28
|
+
const shippedMarker = opts.shippedMarker ?? 'Shipped — see';
|
|
29
|
+
const shipped = `${shippedMarker} ${specId}`;
|
|
30
|
+
const escLabel = label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
31
|
+
// Group 1 = the decorated prefix through the whitespace after the colon; group 2 =
|
|
32
|
+
// the value. Bold markers (`**`) may wrap either the label or the whole `label:`
|
|
33
|
+
// (both `**Status:**` and `**Status**:` occur), and a list dash is optional.
|
|
34
|
+
const statusLine = new RegExp(`^(\\s*(?:-\\s*)?\\*{0,2}${escLabel}\\*{0,2}\\s*:\\s*\\*{0,2}\\s*)(.*)$`, 'm');
|
|
35
|
+
const m = designDocText.match(statusLine);
|
|
36
|
+
if (!m)
|
|
37
|
+
return `${designDocText.replace(/\n*$/, '')}\n\n- **${label}:** ${shipped}\n`;
|
|
38
|
+
if (TERMINAL.test(m[2].trim()))
|
|
39
|
+
return designDocText; // already shipped / parked — never touch
|
|
40
|
+
return designDocText.replace(statusLine, (_full, prefix) => `${prefix}${shipped}`);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=design-doc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-doc.js","sourceRoot":"","sources":["../../src/lib/design-doc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;mEACmE;AACnE,MAAM,QAAQ,GAAG,8CAA8C,CAAC;AAEhE;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,aAAqB,EACrB,MAAc,EACd,OAA2D,EAAE;IAE7D,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,eAAe,CAAC;IAC5D,MAAM,OAAO,GAAG,GAAG,aAAa,IAAI,MAAM,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC9D,mFAAmF;IACnF,iFAAiF;IACjF,6EAA6E;IAC7E,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,2BAA2B,QAAQ,qCAAqC,EAAE,GAAG,CAAC,CAAC;IAE7G,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC;QAAE,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,KAAK,OAAO,OAAO,IAAI,CAAC;IACtF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,yCAAyC;IAChG,OAAO,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAC;AACrF,CAAC"}
|
package/dist/lib/exec.d.ts
CHANGED
|
@@ -3,4 +3,9 @@ export type RunResult = {
|
|
|
3
3
|
stdout: string;
|
|
4
4
|
stderr: string;
|
|
5
5
|
};
|
|
6
|
-
|
|
6
|
+
/** `timeoutMs` bounds the child process (spawnSync kills it and returns a null
|
|
7
|
+
* `status` on expiry, which we surface as `exitCode: -1`) — opt-in so existing
|
|
8
|
+
* callers (long-running builds, etc.) keep today's unbounded behavior. */
|
|
9
|
+
export declare function runScript(args: string[], cwd: string, opts?: {
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
}): RunResult;
|
package/dist/lib/exec.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
-
|
|
2
|
+
/** `timeoutMs` bounds the child process (spawnSync kills it and returns a null
|
|
3
|
+
* `status` on expiry, which we surface as `exitCode: -1`) — opt-in so existing
|
|
4
|
+
* callers (long-running builds, etc.) keep today's unbounded behavior. */
|
|
5
|
+
export function runScript(args, cwd, opts) {
|
|
3
6
|
const result = spawnSync(args[0], args.slice(1), {
|
|
4
7
|
cwd,
|
|
5
8
|
encoding: 'utf8',
|
|
6
9
|
env: process.env,
|
|
10
|
+
timeout: opts?.timeoutMs,
|
|
7
11
|
});
|
|
8
12
|
return {
|
|
9
13
|
exitCode: result.status ?? -1,
|
package/dist/lib/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQ/C,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,GAAW;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQ/C;;2EAE2E;AAC3E,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,GAAW,EAAE,IAA6B;IAClF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAChD,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,IAAI,EAAE,SAAS;KACzB,CAAC,CAAC;IACH,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -13,6 +13,10 @@ export type SpecFrontmatter = {
|
|
|
13
13
|
supersedes?: unknown;
|
|
14
14
|
pipeline_status?: string;
|
|
15
15
|
research_appendix?: string;
|
|
16
|
+
/** Backlink(s) to the approved design doc(s) this spec realizes — a scalar path
|
|
17
|
+
* when one, a YAML block list when several (the `promote` verb / `check:handoff`
|
|
18
|
+
* `extractDesignDocRefs` read either form). Written by {@link setDesignDoc}. */
|
|
19
|
+
design_doc?: unknown;
|
|
16
20
|
acceptance_criteria?: unknown[];
|
|
17
21
|
user_stories?: unknown[];
|
|
18
22
|
/** Typed functional requirements (FR-*) — consumed by `verify-acs` alongside AC/US. */
|
|
@@ -72,6 +76,17 @@ export declare function setSupersededBy(text: string, id: string): string;
|
|
|
72
76
|
* the SUCCESSOR spec by `archive --superseded-by` (#1077).
|
|
73
77
|
*/
|
|
74
78
|
export declare function addSupersedes(text: string, id: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Idempotently record the design-doc backlink(s) on a spec's frontmatter. Writes a
|
|
81
|
+
* quoted `design_doc:` scalar for a single ref and a YAML block list for several,
|
|
82
|
+
* preserving any refs already present (a scalar is promoted to a block list when a
|
|
83
|
+
* second ref is added). Empty refs are ignored; returns the text unchanged when no
|
|
84
|
+
* new ref would be added or when there is no frontmatter block. Values are JSON-quoted
|
|
85
|
+
* so a path with a `:` or leading `-` round-trips through the YAML parser. The inverse
|
|
86
|
+
* of `check:handoff`'s `extractDesignDocRefs` reader — the `promote` verb writes this
|
|
87
|
+
* so a minted spec carries the brainstorm→spec backlink the handoff guard expects.
|
|
88
|
+
*/
|
|
89
|
+
export declare function setDesignDoc(text: string, refs: string[]): string;
|
|
75
90
|
/**
|
|
76
91
|
* Idempotently set `artifacts.tasks: <rel>` inside the leading frontmatter block.
|
|
77
92
|
* Replaces an existing `tasks:` child under `artifacts:`, inserts one under an
|
package/dist/lib/frontmatter.js
CHANGED
|
@@ -93,6 +93,40 @@ export function addSupersedes(text, id) {
|
|
|
93
93
|
const newBlock = keyRe.test(block) ? block.replace(keyRe, flow) : `${block}\n${flow}`;
|
|
94
94
|
return text.replace(FRONTMATTER_RE, () => `---\n${newBlock}\n---`);
|
|
95
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Idempotently record the design-doc backlink(s) on a spec's frontmatter. Writes a
|
|
98
|
+
* quoted `design_doc:` scalar for a single ref and a YAML block list for several,
|
|
99
|
+
* preserving any refs already present (a scalar is promoted to a block list when a
|
|
100
|
+
* second ref is added). Empty refs are ignored; returns the text unchanged when no
|
|
101
|
+
* new ref would be added or when there is no frontmatter block. Values are JSON-quoted
|
|
102
|
+
* so a path with a `:` or leading `-` round-trips through the YAML parser. The inverse
|
|
103
|
+
* of `check:handoff`'s `extractDesignDocRefs` reader — the `promote` verb writes this
|
|
104
|
+
* so a minted spec carries the brainstorm→spec backlink the handoff guard expects.
|
|
105
|
+
*/
|
|
106
|
+
export function setDesignDoc(text, refs) {
|
|
107
|
+
const match = FRONTMATTER_RE.exec(text);
|
|
108
|
+
if (!match)
|
|
109
|
+
return text;
|
|
110
|
+
const block = match[1];
|
|
111
|
+
const existing = (() => {
|
|
112
|
+
const v = readFrontmatter(text).design_doc;
|
|
113
|
+
if (Array.isArray(v))
|
|
114
|
+
return v.filter((x) => typeof x === 'string');
|
|
115
|
+
return typeof v === 'string' ? [v] : [];
|
|
116
|
+
})();
|
|
117
|
+
const merged = [...existing];
|
|
118
|
+
for (const r of refs)
|
|
119
|
+
if (r && !merged.includes(r))
|
|
120
|
+
merged.push(r);
|
|
121
|
+
if (merged.length === existing.length && merged.every((v, i) => v === existing[i]))
|
|
122
|
+
return text; // idempotent
|
|
123
|
+
const yamlValue = merged.length === 1
|
|
124
|
+
? `design_doc: ${JSON.stringify(merged[0])}`
|
|
125
|
+
: `design_doc:\n${merged.map((r) => ` - ${JSON.stringify(r)}`).join('\n')}`;
|
|
126
|
+
const keyRe = /^design_doc:.*$(\r?\n[ \t]+-.*$)*/m;
|
|
127
|
+
const newBlock = keyRe.test(block) ? block.replace(keyRe, () => yamlValue) : `${block}\n${yamlValue}`;
|
|
128
|
+
return text.replace(FRONTMATTER_RE, () => `---\n${newBlock}\n---`);
|
|
129
|
+
}
|
|
96
130
|
/**
|
|
97
131
|
* Idempotently set `artifacts.tasks: <rel>` inside the leading frontmatter block.
|
|
98
132
|
* Replaces an existing `tasks:` child under `artifacts:`, inserts one under an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/lib/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/lib/frontmatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAwCzD,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,IAAI,GAAG,oBAAoB,MAAM,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;QAClD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC;QAC9C,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACxB,4EAA4E;IAC5E,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,MAAc;IACpD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,IAAI,GAAG,WAAW,MAAM,EAAE,CAAC;IACjC,kFAAkF;IAClF,mFAAmF;IACnF,MAAM,YAAY,GAAG,cAAc,CAAC;IACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACpG,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,EAAU;IACtD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,IAAI,GAAG,kBAAkB,EAAE,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACtH,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,EAAU;IACpD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;QAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,CAAC,CAAC,EAAE,CAAC;IACL,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,aAAa;IACrD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7D,MAAM,KAAK,GAAG,oCAAoC,CAAC;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC;IACtF,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAc;IACvD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,aAAa;IAC9G,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,KAAK,CAAC;QACjB,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5C,CAAC,CAAC,gBAAgB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACjF,MAAM,KAAK,GAAG,oCAAoC,CAAC;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,SAAS,EAAE,CAAC;IACtG,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAW;IACxD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,IAAI,QAAkB,CAAC;IACvB,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,oEAAoE;QACpE,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;YAAE,GAAG,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAClE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,UAAU,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACnG,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YACnE,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACtB,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,UAAU,GAAG,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,YAAoB,EACpB,UAAoC;IAEpC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAE,EAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAE,SAAiC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnH,MAAM,OAAO,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAErG,iFAAiF;IACjF,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,iFAAiF;IACjF,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IAClD,qEAAqE;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,IAAiB,EACjB,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,WAAW,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IACrD,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC;IAC3C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,GAAG,KAAK,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAY,CAAC;QAC3C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAyB,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,OAAkB;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,QAAgB,CAAC;IACrB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,mBAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5G,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3F,4EAA4E;QAC5E,qDAAqD;QACrD,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,uEAAuE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;IACnH,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,GAAG,KAAK,KAAK,aAAa,CAAC,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,OAAgE,EAChE,EAAU,EACV,MAA8B;IAE9B,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,yBAAyB,KAAK,YAAY,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAAE,MAAM,CAAC,qCAAqC;QACvE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,CAAC;YACZ,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;YAAE,MAAM,CAAC,2BAA2B;QAC9F,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACrC,SAAS,GAAG,CAAC,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC/D,MAAM,UAAU,GAAG,GAAG,MAAM,aAAa,MAAM,EAAE,CAAC;IAElD,IAAI,QAAkB,CAAC;IACvB,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,SAAS,CAAE,CAAC,IAAI,EAAE,KAAK,WAAW,MAAM,EAAE;YAAE,OAAO,IAAI,CAAC;QAClE,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QACtB,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAW;IACnD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,QAAkB,CAAC;IACvB,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClB,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;YAAE,GAAG,EAAE,CAAC;QACnE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,GAAG,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACnF,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,QAAQ,OAAO,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec-id numbers for `core` claimed in git but maybe not on the working tree — the
|
|
3
|
+
* gap the filesystem scan (and the current-tree origin scan `scanOriginRefsMaxId`)
|
|
4
|
+
* can't see: an id burned by a spec file that lived in *any* branch's history, or one
|
|
5
|
+
* reserved only in a sibling branch **name** (e.g. `switchboard/WEB-51`). Folded into
|
|
6
|
+
* `nextFreeId`'s max so a parallel worktree/branch can't hand out a colliding id.
|
|
7
|
+
*
|
|
8
|
+
* **Fail-open → `[]`** on any git error (missing binary, no remote, non-git dir), so
|
|
9
|
+
* allocation degrades to exactly today's filesystem-only behavior offline.
|
|
10
|
+
*/
|
|
11
|
+
export declare function gitClaimedIdNumbers(repoRoot: string, core: string): number[];
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { runScript } from './exec.js';
|
|
2
|
+
/** Each git call is timeout-guarded so a slow/large history can't hang a `create`. */
|
|
3
|
+
const GIT_ID_SCAN_TIMEOUT_MS = 3000;
|
|
4
|
+
function safeRun(args, repoRoot) {
|
|
5
|
+
try {
|
|
6
|
+
const r = runScript(args, repoRoot, { timeoutMs: GIT_ID_SCAN_TIMEOUT_MS });
|
|
7
|
+
return r.exitCode === 0 ? r.stdout : null;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return null; // git missing / non-git dir → treat as "nothing claimed in git"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Spec-id numbers for `core` claimed in git but maybe not on the working tree — the
|
|
15
|
+
* gap the filesystem scan (and the current-tree origin scan `scanOriginRefsMaxId`)
|
|
16
|
+
* can't see: an id burned by a spec file that lived in *any* branch's history, or one
|
|
17
|
+
* reserved only in a sibling branch **name** (e.g. `switchboard/WEB-51`). Folded into
|
|
18
|
+
* `nextFreeId`'s max so a parallel worktree/branch can't hand out a colliding id.
|
|
19
|
+
*
|
|
20
|
+
* **Fail-open → `[]`** on any git error (missing binary, no remote, non-git dir), so
|
|
21
|
+
* allocation degrades to exactly today's filesystem-only behavior offline.
|
|
22
|
+
*/
|
|
23
|
+
export function gitClaimedIdNumbers(repoRoot, core) {
|
|
24
|
+
const CORE = core.toUpperCase();
|
|
25
|
+
const nums = new Set();
|
|
26
|
+
// Segment-bounded id number: `<CORE>-<n>` at a start/`/`/`-` boundary, no trailing
|
|
27
|
+
// digit (so `WEB-51` yields 51, never 5). Case-insensitive for defensive matching.
|
|
28
|
+
const idRe = new RegExp(`(?:^|[/-])${CORE}-(\\d+)(?!\\d)`, 'gi');
|
|
29
|
+
// 1) spec files touched anywhere in all-branch history under specs/<core>/.
|
|
30
|
+
const log = safeRun(['git', 'log', '--all', '--name-only', '--pretty=format:'], repoRoot);
|
|
31
|
+
if (log !== null) {
|
|
32
|
+
for (const line of log.split('\n')) {
|
|
33
|
+
if (!line.startsWith(`specs/${core}/`))
|
|
34
|
+
continue; // ignore unrelated paths (WEB-999 under src/)
|
|
35
|
+
const base = line.slice(line.lastIndexOf('/') + 1);
|
|
36
|
+
idRe.lastIndex = 0;
|
|
37
|
+
let m = idRe.exec(base);
|
|
38
|
+
while (m) {
|
|
39
|
+
nums.add(Number(m[1]));
|
|
40
|
+
m = idRe.exec(base);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 2) ids reserved only in a remote branch NAME.
|
|
45
|
+
const ls = safeRun(['git', 'ls-remote', '--heads', 'origin'], repoRoot);
|
|
46
|
+
if (ls !== null) {
|
|
47
|
+
idRe.lastIndex = 0;
|
|
48
|
+
let m = idRe.exec(ls);
|
|
49
|
+
while (m) {
|
|
50
|
+
nums.add(Number(m[1]));
|
|
51
|
+
m = idRe.exec(ls);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return [...nums];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=git-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-ids.js","sourceRoot":"","sources":["../../src/lib/git-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,sFAAsF;AACtF,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,SAAS,OAAO,CAAC,IAAc,EAAE,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,gEAAgE;IAC/E,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,IAAY;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,mFAAmF;IACnF,mFAAmF;IACnF,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,aAAa,IAAI,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAEjE,4EAA4E;IAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1F,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,GAAG,CAAC;gBAAE,SAAS,CAAC,8CAA8C;YAChG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,GAA2B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,GAA2B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brainstorm→spec handoff configuration — the additive, defaulted `handoff:` block
|
|
3
|
+
* a repo's `specs/config.yaml` may carry to tune the `promote` verb. Fs-free (rides
|
|
4
|
+
* `/pure`, like discovery-defaults.ts) so a client can read the resolved shape; the
|
|
5
|
+
* fs-bound resolver `resolveHandoff` (config.ts) wraps `loadConfig` around this pure
|
|
6
|
+
* per-key merge. A repo with NO `handoff:` block behaves exactly as before — every
|
|
7
|
+
* field falls back to {@link DEFAULT_HANDOFF}.
|
|
8
|
+
*/
|
|
9
|
+
export type HandoffConfig = {
|
|
10
|
+
/** Where approved design docs live (the `promote` verb resolves `--design-doc` under this). */
|
|
11
|
+
design_docs_dir?: string;
|
|
12
|
+
/** The design-doc prose lifecycle line `promote` flips (e.g. `Status:`). */
|
|
13
|
+
lifecycle_line?: string;
|
|
14
|
+
/** The value written on promotion, with `<ID>` appended (e.g. `Shipped — see`). */
|
|
15
|
+
shipped_marker?: string;
|
|
16
|
+
/** Intent→template-tier map (e.g. `{ feature: full, enhancement: lite }`). */
|
|
17
|
+
template_map?: Record<string, string>;
|
|
18
|
+
};
|
|
19
|
+
/** Documented fallbacks — a repo without a `handoff:` block gets exactly these. */
|
|
20
|
+
export declare const DEFAULT_HANDOFF: Required<HandoffConfig>;
|
|
21
|
+
/** Per-key merge of a repo's `handoff:` block over {@link DEFAULT_HANDOFF}. Absent or
|
|
22
|
+
* partial ⇒ defaults fill every missing key (back-compat is the load-bearing case).
|
|
23
|
+
* Structurally typed on `{ handoff? }` so a full `SpecConfig` satisfies it without a
|
|
24
|
+
* cross-module type import. */
|
|
25
|
+
export declare function handoffConfig(config: {
|
|
26
|
+
handoff?: HandoffConfig;
|
|
27
|
+
}): Required<HandoffConfig>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Documented fallbacks — a repo without a `handoff:` block gets exactly these. */
|
|
2
|
+
export const DEFAULT_HANDOFF = {
|
|
3
|
+
design_docs_dir: 'docs/superpowers/specs',
|
|
4
|
+
lifecycle_line: 'Status:',
|
|
5
|
+
shipped_marker: 'Shipped — see',
|
|
6
|
+
template_map: {},
|
|
7
|
+
};
|
|
8
|
+
/** Per-key merge of a repo's `handoff:` block over {@link DEFAULT_HANDOFF}. Absent or
|
|
9
|
+
* partial ⇒ defaults fill every missing key (back-compat is the load-bearing case).
|
|
10
|
+
* Structurally typed on `{ handoff? }` so a full `SpecConfig` satisfies it without a
|
|
11
|
+
* cross-module type import. */
|
|
12
|
+
export function handoffConfig(config) {
|
|
13
|
+
const h = config.handoff ?? {};
|
|
14
|
+
return {
|
|
15
|
+
design_docs_dir: h.design_docs_dir ?? DEFAULT_HANDOFF.design_docs_dir,
|
|
16
|
+
lifecycle_line: h.lifecycle_line ?? DEFAULT_HANDOFF.lifecycle_line,
|
|
17
|
+
shipped_marker: h.shipped_marker ?? DEFAULT_HANDOFF.shipped_marker,
|
|
18
|
+
template_map: h.template_map ?? DEFAULT_HANDOFF.template_map,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/lib/handoff.ts"],"names":[],"mappings":"AAmBA,mFAAmF;AACnF,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,eAAe,EAAE,wBAAwB;IACzC,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,eAAe;IAC/B,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF;;;gCAGgC;AAChC,MAAM,UAAU,aAAa,CAAC,MAAmC;IAC/D,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC/B,OAAO;QACL,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,eAAe,CAAC,eAAe;QACrE,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,eAAe,CAAC,cAAc;QAClE,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,eAAe,CAAC,cAAc;QAClE,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,eAAe,CAAC,YAAY;KAC7D,CAAC;AACJ,CAAC"}
|
|
@@ -13,11 +13,13 @@ export declare const ENCORE1_PIPELINE_SCHEMA: PipelineSchema;
|
|
|
13
13
|
* data — a faithful transcription of the imperative PIPELINE/STATUS_ORDER in
|
|
14
14
|
* encoreos-builder's `tools/eos-spec/src/lib/pipeline-map.ts`. Distinct from
|
|
15
15
|
* encore1: a 6-value statusOrder (no regulatory_grounded/compliance_reviewed/
|
|
16
|
-
* ux_reviewed)
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
16
|
+
* ux_reviewed) and NO regulated-only stages. It carries a SINGLE honest cap — the
|
|
17
|
+
* acceptance-criteria cap (A10, issue #60) that holds an AC-less spec below
|
|
18
|
+
* `planned` — because the draft-acs/generate-tests gates carry no `completesStatus`
|
|
19
|
+
* (they never advance the stage enum), so an AC-less spec would otherwise walk
|
|
20
|
+
* straight to `tasks_generated`. Aside from that cap, builder's computeStage is a
|
|
21
|
+
* pure "highest done completesStatus". Proven against the captured builder baseline
|
|
22
|
+
* by `pipeline-parity.builder.test.ts`. */
|
|
21
23
|
export declare const BUILDER_PIPELINE_SCHEMA: PipelineSchema;
|
|
22
24
|
/** Resolve the pipeline schema a repo's config selects. Pure. Absent/unknown
|
|
23
25
|
* `pipeline.layout` ⇒ ENCORE1 (the engine's active default); 'builder' ⇒ the
|
|
@@ -182,11 +182,13 @@ export const ENCORE1_PIPELINE_SCHEMA = {
|
|
|
182
182
|
* data — a faithful transcription of the imperative PIPELINE/STATUS_ORDER in
|
|
183
183
|
* encoreos-builder's `tools/eos-spec/src/lib/pipeline-map.ts`. Distinct from
|
|
184
184
|
* encore1: a 6-value statusOrder (no regulatory_grounded/compliance_reviewed/
|
|
185
|
-
* ux_reviewed)
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
185
|
+
* ux_reviewed) and NO regulated-only stages. It carries a SINGLE honest cap — the
|
|
186
|
+
* acceptance-criteria cap (A10, issue #60) that holds an AC-less spec below
|
|
187
|
+
* `planned` — because the draft-acs/generate-tests gates carry no `completesStatus`
|
|
188
|
+
* (they never advance the stage enum), so an AC-less spec would otherwise walk
|
|
189
|
+
* straight to `tasks_generated`. Aside from that cap, builder's computeStage is a
|
|
190
|
+
* pure "highest done completesStatus". Proven against the captured builder baseline
|
|
191
|
+
* by `pipeline-parity.builder.test.ts`. */
|
|
190
192
|
export const BUILDER_PIPELINE_SCHEMA = {
|
|
191
193
|
statusOrder: ['stub', 'clarified', 'validated', 'reviewed', 'planned', 'tasks_generated'],
|
|
192
194
|
stages: [
|
|
@@ -256,7 +258,16 @@ export const BUILDER_PIPELINE_SCHEMA = {
|
|
|
256
258
|
completesStatus: 'tasks_generated',
|
|
257
259
|
},
|
|
258
260
|
],
|
|
259
|
-
|
|
261
|
+
// Acceptance-criteria honest cap (A10, issue #60): the builder `draft-acs` stage
|
|
262
|
+
// carries no `completesStatus`, so without this a spec walks silently past it and a
|
|
263
|
+
// PLAN+TASKS spec reaches `tasks_generated` with ZERO acceptance criteria —
|
|
264
|
+
// unverifiable by construction. The cap holds such a spec BELOW `planned` (so it
|
|
265
|
+
// stops at `reviewed`), forcing ACs before the ladder advances. Stricter than
|
|
266
|
+
// encore1's AC cap (`capBelow: 'tasks_generated'`) by design — the builder funnel
|
|
267
|
+
// blocks AC-less planning too. Uses `hasAcceptanceCriteria` (already in
|
|
268
|
+
// DEFAULT_PREDICATES; true on presence, independent of user stories). The `promote`
|
|
269
|
+
// verb seeds placeholder ACs precisely so a minted spec clears this cap.
|
|
270
|
+
caps: [{ unless: 'hasAcceptanceCriteria', capBelow: 'planned' }],
|
|
260
271
|
};
|
|
261
272
|
/** Resolve the pipeline schema a repo's config selects. Pure. Absent/unknown
|
|
262
273
|
* `pipeline.layout` ⇒ ENCORE1 (the engine's active default); 'builder' ⇒ the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../../src/lib/pipeline-config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../../src/lib/pipeline-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,39 @@ export interface PrecedentHit {
|
|
|
8
8
|
score: number;
|
|
9
9
|
matchedFields: string[];
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* One spec-index entry — the shape `eos-spec index` writes to
|
|
13
|
+
* specs/spec-index.json and this ranker scores against (the projection builder's
|
|
14
|
+
* scripts/specs/build-spec-index.mjs established). The frontmatter-derived
|
|
15
|
+
* arrays pass through untyped: this consumer treats every nested shape as
|
|
16
|
+
* untrusted (see the {@link IndexSpec} note) and degrades per-field, so the
|
|
17
|
+
* generator does not narrow them either.
|
|
18
|
+
*/
|
|
19
|
+
export interface SpecIndexEntry {
|
|
20
|
+
id: string;
|
|
21
|
+
core: string;
|
|
22
|
+
title: string;
|
|
23
|
+
status: string | null;
|
|
24
|
+
file: string;
|
|
25
|
+
/** Bounded `## Summary` prose — the domain-vocabulary paraphrase-recall field. */
|
|
26
|
+
summary: string;
|
|
27
|
+
user_stories: unknown[];
|
|
28
|
+
acceptance_criteria: unknown[];
|
|
29
|
+
/** From the frontmatter's `requirements` spelling. */
|
|
30
|
+
functional_requirements: unknown[];
|
|
31
|
+
/** Not modeled in eos-spec frontmatter — always [] from the generator. */
|
|
32
|
+
non_functional_requirements: unknown[];
|
|
33
|
+
/** Not modeled in eos-spec frontmatter — always [] from the generator. */
|
|
34
|
+
success_metrics: unknown[];
|
|
35
|
+
tags: unknown[];
|
|
36
|
+
}
|
|
11
37
|
export declare function __resetIndexCache(): void;
|
|
12
38
|
/** Ranked lexical search over specs/spec-index.json (no markdown re-parse).
|
|
13
|
-
*
|
|
39
|
+
* When the index file is missing, falls back to building the index in memory
|
|
40
|
+
* from the spec corpus via {@link buildSpecIndex} — slower (a full corpus walk
|
|
41
|
+
* per call, uncached) but never stale, and it keeps `precedent --topic`
|
|
42
|
+
* first-class in repos without a generated index on disk. Run `eos-spec index`
|
|
43
|
+
* to materialize the file when search is hot. */
|
|
14
44
|
export declare function searchSpecs(topic: string, opts: {
|
|
15
45
|
core?: string;
|
|
16
46
|
repoRoot: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { buildSpecIndex } from './spec-index.js';
|
|
3
4
|
const DEFAULT_LIMIT = 15;
|
|
4
5
|
// Score tiers, strongest first: word-boundary phrase > all-tokens > partial
|
|
5
6
|
// (per matched token, title x2). The body's all-tokens tier is cross-field-UNION
|
|
@@ -97,12 +98,12 @@ function loadIndexCached(indexPath) {
|
|
|
97
98
|
return index;
|
|
98
99
|
}
|
|
99
100
|
/** Ranked lexical search over specs/spec-index.json (no markdown re-parse).
|
|
100
|
-
*
|
|
101
|
+
* When the index file is missing, falls back to building the index in memory
|
|
102
|
+
* from the spec corpus via {@link buildSpecIndex} — slower (a full corpus walk
|
|
103
|
+
* per call, uncached) but never stale, and it keeps `precedent --topic`
|
|
104
|
+
* first-class in repos without a generated index on disk. Run `eos-spec index`
|
|
105
|
+
* to materialize the file when search is hot. */
|
|
101
106
|
export function searchSpecs(topic, opts) {
|
|
102
|
-
const indexPath = join(opts.repoRoot, 'specs', 'spec-index.json');
|
|
103
|
-
if (!existsSync(indexPath)) {
|
|
104
|
-
throw new Error(`spec index not found at ${indexPath} — run \`npm run spec:index\` first`);
|
|
105
|
-
}
|
|
106
107
|
const tokens = tokenize(topic);
|
|
107
108
|
if (tokens.length === 0)
|
|
108
109
|
return [];
|
|
@@ -110,7 +111,13 @@ export function searchSpecs(topic, opts) {
|
|
|
110
111
|
const tokenRes = tokenRegexes(tokens);
|
|
111
112
|
const core = opts.core?.toLowerCase();
|
|
112
113
|
const limit = opts.limit ?? DEFAULT_LIMIT;
|
|
113
|
-
const
|
|
114
|
+
const indexPath = join(opts.repoRoot, 'specs', 'spec-index.json');
|
|
115
|
+
// Fallback entries are the same untrusted input the ranker already defends
|
|
116
|
+
// against (SpecIndexEntry's arrays are unknown[] by design), so the cast only
|
|
117
|
+
// re-labels them as such.
|
|
118
|
+
const index = existsSync(indexPath)
|
|
119
|
+
? loadIndexCached(indexPath)
|
|
120
|
+
: { specs: buildSpecIndex(opts.repoRoot) };
|
|
114
121
|
const hits = [];
|
|
115
122
|
for (const spec of asArray(index.specs)) {
|
|
116
123
|
if (!spec)
|