@encore-os/eos-spec 0.14.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/create.d.ts +24 -0
- package/dist/commands/create.js +67 -19
- package/dist/commands/create.js.map +1 -1
- 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/index.d.ts +4 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +14 -1
- package/dist/lib/config.js +18 -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/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/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/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;
|
|
@@ -73,6 +76,19 @@ export function resolveVerifyLanes(repoRoot, configOverride) {
|
|
|
73
76
|
return [];
|
|
74
77
|
}
|
|
75
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
|
+
}
|
|
76
92
|
/**
|
|
77
93
|
* Resolve every discovery path from `specs/config.yaml`, fail-safe to the
|
|
78
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"}
|
|
@@ -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":"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"}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AcEntry } from './ac-response-parser.js';
|
|
2
|
+
/**
|
|
3
|
+
* Present-but-`planned` placeholder acceptance criteria, so a spec minted by the
|
|
4
|
+
* `promote` verb is never born AC-less. Presence — not quality — is the bar the
|
|
5
|
+
* BUILDER AC cap (pipeline-config.ts) and `check:handoff` enforce; spec-review
|
|
6
|
+
* judges quality later. Each scaffold carries `status: 'planned'` + `draft: true`
|
|
7
|
+
* and TODO Given/When/Then so a downstream author fills it before review. No AI /
|
|
8
|
+
* `AI_GATEWAY_API_KEY` dependency — this is the deterministic no-AI seed.
|
|
9
|
+
*/
|
|
10
|
+
export declare function placeholderAcs(count?: number): AcEntry[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Present-but-`planned` placeholder acceptance criteria, so a spec minted by the
|
|
3
|
+
* `promote` verb is never born AC-less. Presence — not quality — is the bar the
|
|
4
|
+
* BUILDER AC cap (pipeline-config.ts) and `check:handoff` enforce; spec-review
|
|
5
|
+
* judges quality later. Each scaffold carries `status: 'planned'` + `draft: true`
|
|
6
|
+
* and TODO Given/When/Then so a downstream author fills it before review. No AI /
|
|
7
|
+
* `AI_GATEWAY_API_KEY` dependency — this is the deterministic no-AI seed.
|
|
8
|
+
*/
|
|
9
|
+
export function placeholderAcs(count = 1) {
|
|
10
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
11
|
+
id: `AC-${i + 1}`,
|
|
12
|
+
title: 'TODO — draft this acceptance criterion before spec review',
|
|
13
|
+
status: 'planned',
|
|
14
|
+
draft: true,
|
|
15
|
+
given: ['TODO — precondition'],
|
|
16
|
+
when: ['TODO — action'],
|
|
17
|
+
then: ['TODO — observable outcome'],
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=seed-acs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-acs.js","sourceRoot":"","sources":["../../src/lib/seed-acs.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAK,GAAG,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;QACjB,KAAK,EAAE,2DAA2D;QAClE,MAAM,EAAE,SAAkB;QAC1B,KAAK,EAAE,IAAa;QACpB,KAAK,EAAE,CAAC,qBAAqB,CAAC;QAC9B,IAAI,EAAE,CAAC,eAAe,CAAC;QACvB,IAAI,EAAE,CAAC,2BAA2B,CAAC;KACpC,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create-time guard against the two silent spec-filename traps `spec:lint-ids` can
|
|
3
|
+
* only detect POST-merge:
|
|
4
|
+
*
|
|
5
|
+
* 1. **Grammar over-match** — a slug whose first word is a complete `e<n>`/`p<n>`
|
|
6
|
+
* segment (e.g. `WEB-05-e2-foo.md`) is parsed as the id `WEB-05-E2`, absorbing
|
|
7
|
+
* the slug into the id. (`e2e-…` is safe — the id grammar's boundary fix, #14,
|
|
8
|
+
* only over-matches a *complete* trailing segment.)
|
|
9
|
+
* 2. **Reserved lifecycle token** — a slug containing a lifecycle/artifact token
|
|
10
|
+
* (`review`, `clarification`, …) makes the loader classify the file as a
|
|
11
|
+
* derivative artifact and drop it, so it is never loaded as the intended spec.
|
|
12
|
+
*
|
|
13
|
+
* Throws an `Error` tagged `code: 'INVALID_ARGUMENT'` (with a rename suggestion)
|
|
14
|
+
* unless the round-trip holds both ways: `extractSpecId(filename) === id` AND
|
|
15
|
+
* `resolveSpecFileId(core, filename) === id`. Pure (fs-free) — reuses the id grammar
|
|
16
|
+
* in spec-pure.ts. Wired into `create`/`promote` before the file is written so the
|
|
17
|
+
* trap is refused at mint time, not discovered later.
|
|
18
|
+
*/
|
|
19
|
+
export declare function assertSafeSpecFilename(core: string, id: string, slug: string): void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { extractSpecId, resolveSpecFileId } from './spec-pure.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create-time guard against the two silent spec-filename traps `spec:lint-ids` can
|
|
4
|
+
* only detect POST-merge:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Grammar over-match** — a slug whose first word is a complete `e<n>`/`p<n>`
|
|
7
|
+
* segment (e.g. `WEB-05-e2-foo.md`) is parsed as the id `WEB-05-E2`, absorbing
|
|
8
|
+
* the slug into the id. (`e2e-…` is safe — the id grammar's boundary fix, #14,
|
|
9
|
+
* only over-matches a *complete* trailing segment.)
|
|
10
|
+
* 2. **Reserved lifecycle token** — a slug containing a lifecycle/artifact token
|
|
11
|
+
* (`review`, `clarification`, …) makes the loader classify the file as a
|
|
12
|
+
* derivative artifact and drop it, so it is never loaded as the intended spec.
|
|
13
|
+
*
|
|
14
|
+
* Throws an `Error` tagged `code: 'INVALID_ARGUMENT'` (with a rename suggestion)
|
|
15
|
+
* unless the round-trip holds both ways: `extractSpecId(filename) === id` AND
|
|
16
|
+
* `resolveSpecFileId(core, filename) === id`. Pure (fs-free) — reuses the id grammar
|
|
17
|
+
* in spec-pure.ts. Wired into `create`/`promote` before the file is written so the
|
|
18
|
+
* trap is refused at mint time, not discovered later.
|
|
19
|
+
*/
|
|
20
|
+
export function assertSafeSpecFilename(core, id, slug) {
|
|
21
|
+
const filename = `${id}-${slug}.md`;
|
|
22
|
+
const fail = (why) => {
|
|
23
|
+
const e = new Error(`Refusing to mint "${filename}": ${why}. Rename the slug (e.g. prefix a descriptive word) so the loader keeps this file as ${id}.`);
|
|
24
|
+
e.code = 'INVALID_ARGUMENT';
|
|
25
|
+
throw e;
|
|
26
|
+
};
|
|
27
|
+
if (extractSpecId(filename, core)?.toUpperCase() !== id.toUpperCase()) {
|
|
28
|
+
fail('the id grammar mis-parses this filename (a leading e<n>/p<n> slug word is read as an enhancement suffix)');
|
|
29
|
+
}
|
|
30
|
+
if (resolveSpecFileId(core, filename, undefined) !== id) {
|
|
31
|
+
fail('a reserved lifecycle/artifact token in the slug makes the loader drop this file');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=spec-id-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-id-guard.js","sourceRoot":"","sources":["../../src/lib/spec-id-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAElE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,EAAU,EAAE,IAAY;IAC3E,MAAM,QAAQ,GAAG,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAS,EAAE;QAClC,MAAM,CAAC,GAAG,IAAI,KAAK,CACjB,qBAAqB,QAAQ,MAAM,GAAG,uFAAuF,EAAE,GAAG,CACnI,CAAC;QACD,CAA+B,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC3D,MAAM,CAAC,CAAC;IACV,CAAC,CAAC;IACF,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACtE,IAAI,CAAC,0GAA0G,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC"}
|
package/dist/lib/version.d.ts
CHANGED
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* Please bumps this in lockstep with package.json via the `x-release-please-version`
|
|
5
5
|
* annotation below (release-please-config.json `extra-files`); for a break-glass
|
|
6
6
|
* manual release, bump it together with package.json by hand. */
|
|
7
|
-
export declare const ENGINE_VERSION = "0.
|
|
7
|
+
export declare const ENGINE_VERSION = "0.15.0";
|
package/dist/lib/version.js
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* Please bumps this in lockstep with package.json via the `x-release-please-version`
|
|
5
5
|
* annotation below (release-please-config.json `extra-files`); for a break-glass
|
|
6
6
|
* manual release, bump it together with package.json by hand. */
|
|
7
|
-
export const ENGINE_VERSION = '0.
|
|
7
|
+
export const ENGINE_VERSION = '0.15.0'; // x-release-please-version
|
|
8
8
|
//# sourceMappingURL=version.js.map
|
package/dist/pure.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
export * from './lib/pipeline-map.js';
|
|
9
9
|
export * from './lib/blockers.js';
|
|
10
10
|
export * from './lib/frontmatter.js';
|
|
11
|
+
export * from './lib/design-doc.js';
|
|
11
12
|
export * from './lib/requirements.js';
|
|
12
13
|
export * from './lib/next-action.js';
|
|
13
14
|
export * from './lib/spec-pure.js';
|
|
@@ -17,3 +18,4 @@ export type { PipelineSchema, PredicateRegistry } from './lib/pipeline-schema.js
|
|
|
17
18
|
export * from './lib/completion-gate.js';
|
|
18
19
|
export * from './lib/compliance-signoff.js';
|
|
19
20
|
export type { SessionState } from './lib/session-state.js';
|
|
21
|
+
export * from './lib/handoff.js';
|