@zigrivers/scaffold 3.5.1 → 3.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/cli/commands/complete.d.ts.map +1 -1
  2. package/dist/cli/commands/complete.js +5 -2
  3. package/dist/cli/commands/complete.js.map +1 -1
  4. package/dist/cli/commands/next.d.ts.map +1 -1
  5. package/dist/cli/commands/next.js +11 -43
  6. package/dist/cli/commands/next.js.map +1 -1
  7. package/dist/cli/commands/reset.d.ts.map +1 -1
  8. package/dist/cli/commands/reset.js +5 -2
  9. package/dist/cli/commands/reset.js.map +1 -1
  10. package/dist/cli/commands/rework.d.ts.map +1 -1
  11. package/dist/cli/commands/rework.js +11 -44
  12. package/dist/cli/commands/rework.js.map +1 -1
  13. package/dist/cli/commands/run.d.ts.map +1 -1
  14. package/dist/cli/commands/run.js +26 -60
  15. package/dist/cli/commands/run.js.map +1 -1
  16. package/dist/cli/commands/run.test.js +57 -62
  17. package/dist/cli/commands/run.test.js.map +1 -1
  18. package/dist/cli/commands/skip.d.ts.map +1 -1
  19. package/dist/cli/commands/skip.js +5 -2
  20. package/dist/cli/commands/skip.js.map +1 -1
  21. package/dist/cli/commands/status.d.ts.map +1 -1
  22. package/dist/cli/commands/status.js +13 -44
  23. package/dist/cli/commands/status.js.map +1 -1
  24. package/dist/core/dependency/graph.d.ts +1 -1
  25. package/dist/core/dependency/graph.d.ts.map +1 -1
  26. package/dist/core/dependency/graph.js +7 -6
  27. package/dist/core/dependency/graph.js.map +1 -1
  28. package/dist/core/dependency/graph.test.js +86 -0
  29. package/dist/core/dependency/graph.test.js.map +1 -1
  30. package/dist/core/pipeline/context.d.ts +5 -0
  31. package/dist/core/pipeline/context.d.ts.map +1 -0
  32. package/dist/core/pipeline/context.js +28 -0
  33. package/dist/core/pipeline/context.js.map +1 -0
  34. package/dist/core/pipeline/context.test.d.ts +2 -0
  35. package/dist/core/pipeline/context.test.d.ts.map +1 -0
  36. package/dist/core/pipeline/context.test.js +33 -0
  37. package/dist/core/pipeline/context.test.js.map +1 -0
  38. package/dist/core/pipeline/resolver.d.ts +6 -0
  39. package/dist/core/pipeline/resolver.d.ts.map +1 -0
  40. package/dist/core/pipeline/resolver.js +56 -0
  41. package/dist/core/pipeline/resolver.js.map +1 -0
  42. package/dist/core/pipeline/resolver.test.d.ts +2 -0
  43. package/dist/core/pipeline/resolver.test.d.ts.map +1 -0
  44. package/dist/core/pipeline/resolver.test.js +101 -0
  45. package/dist/core/pipeline/resolver.test.js.map +1 -0
  46. package/dist/core/pipeline/types.d.ts +24 -0
  47. package/dist/core/pipeline/types.d.ts.map +1 -0
  48. package/dist/core/pipeline/types.js +2 -0
  49. package/dist/core/pipeline/types.js.map +1 -0
  50. package/package.json +1 -1
  51. package/dist/core/assembly/methodology-resolver.d.ts +0 -11
  52. package/dist/core/assembly/methodology-resolver.d.ts.map +0 -1
  53. package/dist/core/assembly/methodology-resolver.js +0 -19
  54. package/dist/core/assembly/methodology-resolver.js.map +0 -1
  55. package/dist/core/assembly/methodology-resolver.test.d.ts +0 -2
  56. package/dist/core/assembly/methodology-resolver.test.d.ts.map +0 -1
  57. package/dist/core/assembly/methodology-resolver.test.js +0 -87
  58. package/dist/core/assembly/methodology-resolver.test.js.map +0 -1
  59. package/dist/utils/eligible.d.ts +0 -9
  60. package/dist/utils/eligible.d.ts.map +0 -1
  61. package/dist/utils/eligible.js +0 -50
  62. package/dist/utils/eligible.js.map +0 -1
@@ -0,0 +1,101 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { resolvePipeline } from './resolver.js';
3
+ import { loadPipelineContext } from './context.js';
4
+ describe('resolvePipeline', () => {
5
+ it('returns a DependencyGraph with nodes', () => {
6
+ const ctx = loadPipelineContext(process.cwd());
7
+ const pipeline = resolvePipeline(ctx);
8
+ expect(pipeline.graph.nodes.size).toBeGreaterThan(50);
9
+ });
10
+ it('returns a preset matching the config methodology', () => {
11
+ const ctx = loadPipelineContext(process.cwd());
12
+ const pipeline = resolvePipeline(ctx);
13
+ expect(pipeline.preset).not.toBeNull();
14
+ expect(pipeline.preset.name).toBeDefined();
15
+ });
16
+ it('returns overlay with steps record', () => {
17
+ const ctx = loadPipelineContext(process.cwd());
18
+ const pipeline = resolvePipeline(ctx);
19
+ expect(typeof pipeline.overlay.steps).toBe('object');
20
+ expect(Object.keys(pipeline.overlay.steps).length).toBeGreaterThan(50);
21
+ });
22
+ it('returns stepMeta map keyed by step name', () => {
23
+ const ctx = loadPipelineContext(process.cwd());
24
+ const pipeline = resolvePipeline(ctx);
25
+ expect(pipeline.stepMeta.has('create-prd')).toBe(true);
26
+ expect(pipeline.stepMeta.get('create-prd')?.phase).toBe('pre');
27
+ });
28
+ it('returns computeEligible that accepts steps and returns string[]', () => {
29
+ const ctx = loadPipelineContext(process.cwd());
30
+ const pipeline = resolvePipeline(ctx);
31
+ const eligible = pipeline.computeEligible({});
32
+ expect(Array.isArray(eligible)).toBe(true);
33
+ expect(eligible.length).toBeGreaterThan(0);
34
+ });
35
+ it('applies custom enablement overrides when config has custom steps', () => {
36
+ const ctx = loadPipelineContext(process.cwd());
37
+ if (ctx.config) {
38
+ ctx.config.custom = {
39
+ steps: { 'create-prd': { enabled: false } },
40
+ };
41
+ }
42
+ const pipeline = resolvePipeline(ctx);
43
+ const prdNode = pipeline.graph.nodes.get('create-prd');
44
+ expect(prdNode?.enabled).toBe(false);
45
+ });
46
+ it('custom-enables a step absent from preset (e.g., mvp + custom enable review-prd)', () => {
47
+ const ctx = loadPipelineContext(process.cwd());
48
+ if (ctx.config) {
49
+ ctx.config.methodology = 'mvp';
50
+ ctx.config.custom = {
51
+ steps: { 'review-prd': { enabled: true } },
52
+ };
53
+ }
54
+ const pipeline = resolvePipeline(ctx);
55
+ const node = pipeline.graph.nodes.get('review-prd');
56
+ expect(node?.enabled).toBe(true);
57
+ });
58
+ it('graph nodes have overlay-appended deps (user-stories depends on review-gdd for game)', () => {
59
+ const ctx = loadPipelineContext(process.cwd());
60
+ if (ctx.config) {
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Zod defaults fill fields at runtime
62
+ ctx.config.project = { projectType: 'game', gameConfig: { engine: 'custom' } };
63
+ }
64
+ const pipeline = resolvePipeline(ctx);
65
+ const node = pipeline.graph.nodes.get('user-stories');
66
+ expect(node?.dependencies).toContain('review-gdd');
67
+ });
68
+ it('graph nodes have overlay-replaced deps (platform-parity-review uses review-game-ui for game)', () => {
69
+ const ctx = loadPipelineContext(process.cwd());
70
+ if (ctx.config) {
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Zod defaults fill fields at runtime
72
+ ctx.config.project = { projectType: 'game', gameConfig: { engine: 'custom' } };
73
+ }
74
+ const pipeline = resolvePipeline(ctx);
75
+ const node = pipeline.graph.nodes.get('platform-parity-review');
76
+ expect(node?.dependencies).toContain('review-game-ui');
77
+ expect(node?.dependencies).not.toContain('review-ux');
78
+ });
79
+ it('computeEligible blocks user-stories when review-gdd is not completed (game project)', () => {
80
+ const ctx = loadPipelineContext(process.cwd());
81
+ if (ctx.config) {
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Zod defaults fill fields at runtime
83
+ ctx.config.project = { projectType: 'game', gameConfig: { engine: 'custom' } };
84
+ }
85
+ const pipeline = resolvePipeline(ctx);
86
+ const state = {
87
+ 'review-prd': { status: 'completed', source: 'pipeline' },
88
+ };
89
+ const eligible = pipeline.computeEligible(state);
90
+ expect(eligible).not.toContain('user-stories');
91
+ });
92
+ it('handles null config gracefully (fallback to deep, frontmatter maps preserved)', () => {
93
+ const ctx = loadPipelineContext(process.cwd());
94
+ ctx.config = null;
95
+ const pipeline = resolvePipeline(ctx);
96
+ expect(pipeline.preset).not.toBeNull();
97
+ expect(pipeline.graph.nodes.size).toBeGreaterThan(50);
98
+ expect(Object.keys(pipeline.overlay.knowledge).length).toBeGreaterThan(0);
99
+ });
100
+ });
101
+ //# sourceMappingURL=resolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.test.js","sourceRoot":"","sources":["../../../src/core/pipeline/resolver.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { MetaPromptFile, MetaPromptFrontmatter } from '../../types/frontmatter.js';
2
+ import type { ScaffoldConfig, MethodologyPreset, DependencyGraph, ScaffoldError, ScaffoldWarning, StepStateEntry } from '../../types/index.js';
3
+ import type { OverlayState } from '../assembly/overlay-state-resolver.js';
4
+ export interface PipelineContext {
5
+ projectRoot: string;
6
+ metaPrompts: Map<string, MetaPromptFile>;
7
+ config: ScaffoldConfig | null;
8
+ configErrors: ScaffoldError[];
9
+ configWarnings: ScaffoldWarning[];
10
+ presets: {
11
+ mvp: MethodologyPreset | null;
12
+ deep: MethodologyPreset | null;
13
+ custom: MethodologyPreset | null;
14
+ };
15
+ methodologyDir: string;
16
+ }
17
+ export interface ResolvedPipeline {
18
+ graph: DependencyGraph;
19
+ preset: MethodologyPreset;
20
+ overlay: OverlayState;
21
+ stepMeta: Map<string, MetaPromptFrontmatter>;
22
+ computeEligible: (steps: Record<string, StepStateEntry>) => string[];
23
+ }
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/pipeline/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvF,OAAO,KAAK,EACV,cAAc,EAAE,iBAAiB,EACjC,eAAe,EAAE,aAAa,EAAE,eAAe,EAC/C,cAAc,EACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEzE,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACxC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;IAC7B,YAAY,EAAE,aAAa,EAAE,CAAA;IAC7B,cAAc,EAAE,eAAe,EAAE,CAAA;IACjC,OAAO,EAAE;QACP,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAA;QAC7B,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;QAC9B,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;KACjC,CAAA;IACD,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAA;IACtB,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,MAAM,EAAE,CAAA;CACrE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/pipeline/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zigrivers/scaffold",
3
- "version": "3.5.1",
3
+ "version": "3.5.3",
4
4
  "description": "AI-powered software project scaffolding pipeline",
5
5
  "type": "module",
6
6
  "workspaces": ["packages/*"],
@@ -1,11 +0,0 @@
1
- import type { ScaffoldConfig, MethodologyPreset } from '../../types/index.js';
2
- export type EnablementProvenance = 'custom-override' | 'conditional-detection' | 'preset-default';
3
- /**
4
- * Resolve whether a step is enabled using precedence:
5
- * custom-override > preset-default
6
- */
7
- export declare function resolveEnablement(step: string, config: ScaffoldConfig, preset: MethodologyPreset): {
8
- enabled: boolean;
9
- provenance: EnablementProvenance;
10
- };
11
- //# sourceMappingURL=methodology-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7E,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,uBAAuB,GAAG,gBAAgB,CAAA;AAEjG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,iBAAiB,GACxB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,oBAAoB,CAAA;CAAE,CAexD"}
@@ -1,19 +0,0 @@
1
- /**
2
- * Resolve whether a step is enabled using precedence:
3
- * custom-override > preset-default
4
- */
5
- export function resolveEnablement(step, config, preset) {
6
- // 1. Custom override in config
7
- const customStep = config.custom?.steps?.[step];
8
- if (customStep?.enabled !== undefined) {
9
- return { enabled: customStep.enabled, provenance: 'custom-override' };
10
- }
11
- // 2. Preset default
12
- const presetStep = preset.steps[step];
13
- if (presetStep !== undefined) {
14
- return { enabled: presetStep.enabled, provenance: 'preset-default' };
15
- }
16
- // 3. Not in preset — assume disabled
17
- return { enabled: false, provenance: 'preset-default' };
18
- }
19
- //# sourceMappingURL=methodology-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-resolver.js","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,MAAsB,EACtB,MAAyB;IAEzB,+BAA+B;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,UAAU,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA;IACvE,CAAC;IAED,oBAAoB;IACpB,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;IACtE,CAAC;IAED,qCAAqC;IACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;AACzD,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=methodology-resolver.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.test.ts"],"names":[],"mappings":""}
@@ -1,87 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import path from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import { resolveEnablement } from './methodology-resolver.js';
5
- import { loadPreset } from './preset-loader.js';
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
- const fixtureDir = path.resolve(__dirname, '../../../tests/fixtures/methodology');
8
- function makeConfig(overrides = {}) {
9
- return {
10
- version: 2,
11
- methodology: 'deep',
12
- platforms: ['claude-code'],
13
- ...overrides,
14
- };
15
- }
16
- function loadFixturePreset(name) {
17
- const { preset } = loadPreset(path.join(fixtureDir, `${name}.yml`), []);
18
- if (!preset)
19
- throw new Error(`Failed to load preset: ${name}`);
20
- return preset;
21
- }
22
- describe('resolveEnablement', () => {
23
- it('preset-default returns enabled from preset', () => {
24
- const preset = loadFixturePreset('deep');
25
- const config = makeConfig();
26
- const result = resolveEnablement('create-prd', config, preset);
27
- expect(result.enabled).toBe(true);
28
- expect(result.provenance).toBe('preset-default');
29
- });
30
- it('custom-override takes precedence over preset', () => {
31
- const preset = loadFixturePreset('deep');
32
- const config = makeConfig({
33
- custom: {
34
- steps: { 'create-prd': { enabled: false } },
35
- },
36
- });
37
- const result = resolveEnablement('create-prd', config, preset);
38
- expect(result.enabled).toBe(false);
39
- expect(result.provenance).toBe('custom-override');
40
- });
41
- it('custom-override can enable a step', () => {
42
- // Use a step that doesn't exist in mvp preset, then enable via custom
43
- const preset = loadFixturePreset('mvp');
44
- const config = makeConfig({
45
- methodology: 'mvp',
46
- custom: {
47
- steps: { 'review-prd': { enabled: true } },
48
- },
49
- });
50
- const result = resolveEnablement('review-prd', config, preset);
51
- expect(result.enabled).toBe(true);
52
- expect(result.provenance).toBe('custom-override');
53
- });
54
- it('step not in preset returns enabled=false', () => {
55
- const preset = loadFixturePreset('mvp');
56
- const config = makeConfig({ methodology: 'mvp' });
57
- // 'domain-modeling' not in mvp.yml fixture
58
- const result = resolveEnablement('domain-modeling', config, preset);
59
- expect(result.enabled).toBe(false);
60
- expect(result.provenance).toBe('preset-default');
61
- });
62
- it('MVP preset: create-prd enabled, domain-modeling disabled', () => {
63
- const preset = loadFixturePreset('mvp');
64
- const config = makeConfig({ methodology: 'mvp' });
65
- const createPrdResult = resolveEnablement('create-prd', config, preset);
66
- expect(createPrdResult.enabled).toBe(true);
67
- expect(createPrdResult.provenance).toBe('preset-default');
68
- const domainModelingResult = resolveEnablement('domain-modeling', config, preset);
69
- expect(domainModelingResult.enabled).toBe(false);
70
- expect(domainModelingResult.provenance).toBe('preset-default');
71
- });
72
- it('review-prd is enabled in deep preset', () => {
73
- const preset = loadFixturePreset('deep');
74
- const config = makeConfig();
75
- const result = resolveEnablement('review-prd', config, preset);
76
- expect(result.enabled).toBe(true);
77
- expect(result.provenance).toBe('preset-default');
78
- });
79
- it('step not in any preset returns enabled=false with preset-default provenance', () => {
80
- const preset = loadFixturePreset('deep');
81
- const config = makeConfig();
82
- const result = resolveEnablement('nonexistent-step', config, preset);
83
- expect(result.enabled).toBe(false);
84
- expect(result.provenance).toBe('preset-default');
85
- });
86
- });
87
- //# sourceMappingURL=methodology-resolver.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodology-resolver.test.js","sourceRoot":"","sources":["../../../src/core/assembly/methodology-resolver.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { StepStateEntry } from '../types/index.js';
2
- /**
3
- * Build a computeEligibleFn for the given project root.
4
- * Discovers meta-prompts, loads the methodology preset, applies project-type
5
- * overlay, and returns a function that computes next-eligible steps from
6
- * current state.steps.
7
- */
8
- export declare function buildComputeEligibleFn(projectRoot: string): (steps: Record<string, StepStateEntry>) => string[];
9
- //# sourceMappingURL=eligible.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eligible.d.ts","sourceRoot":"","sources":["../../src/utils/eligible.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,GAClB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,MAAM,EAAE,CAmCrD"}
@@ -1,50 +0,0 @@
1
- // src/utils/eligible.ts
2
- // Shared helper: build a computeEligibleFn from a project root.
3
- // Used by commands that mutate state (complete, skip, reset) to keep
4
- // next_eligible accurate after each mutation.
5
- import { discoverMetaPrompts } from '../core/assembly/meta-prompt-loader.js';
6
- import { loadAllPresets } from '../core/assembly/preset-loader.js';
7
- import { resolveOverlayState } from '../core/assembly/overlay-state-resolver.js';
8
- import { buildGraph } from '../core/dependency/graph.js';
9
- import { computeEligible } from '../core/dependency/eligibility.js';
10
- import { loadConfig } from '../config/loader.js';
11
- import { createOutputContext } from '../cli/output/context.js';
12
- import { getPackagePipelineDir, getPackageMethodologyDir } from './fs.js';
13
- /**
14
- * Build a computeEligibleFn for the given project root.
15
- * Discovers meta-prompts, loads the methodology preset, applies project-type
16
- * overlay, and returns a function that computes next-eligible steps from
17
- * current state.steps.
18
- */
19
- export function buildComputeEligibleFn(projectRoot) {
20
- const pipelineDir = getPackagePipelineDir(projectRoot);
21
- const metaPrompts = discoverMetaPrompts(pipelineDir);
22
- const knownSteps = [...metaPrompts.keys()];
23
- const { config } = loadConfig(projectRoot, knownSteps);
24
- const methodology = config?.methodology ?? 'deep';
25
- const methodologyDir = getPackageMethodologyDir(projectRoot);
26
- const presets = loadAllPresets(methodologyDir, knownSteps);
27
- const preset = methodology === 'mvp'
28
- ? presets.mvp
29
- : methodology === 'custom'
30
- ? presets.custom ?? presets.deep
31
- : presets.deep;
32
- // Apply project-type overlay if configured
33
- const output = createOutputContext('auto');
34
- const overlayState = config
35
- ? resolveOverlayState({
36
- config,
37
- methodologyDir,
38
- metaPrompts,
39
- presetSteps: preset?.steps ?? {},
40
- output,
41
- })
42
- : { steps: preset?.steps ?? {} };
43
- const overlayStepsMap = new Map(Object.entries(overlayState.steps));
44
- const metaPromptList = [...metaPrompts.values()].map(m => m.frontmatter);
45
- return (steps) => {
46
- const graph = buildGraph(metaPromptList, overlayStepsMap);
47
- return computeEligible(graph, steps);
48
- };
49
- }
50
- //# sourceMappingURL=eligible.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eligible.js","sourceRoot":"","sources":["../../src/utils/eligible.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,gEAAgE;AAChE,qEAAqE;AACrE,8CAA8C;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAGzE;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAmB;IAEnB,MAAM,WAAW,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;IAE1C,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,IAAI,MAAM,CAAA;IAEjD,MAAM,cAAc,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,WAAW,KAAK,KAAK;QAClC,CAAC,CAAC,OAAO,CAAC,GAAG;QACb,CAAC,CAAC,WAAW,KAAK,QAAQ;YACxB,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI;YAChC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;IAElB,2CAA2C;IAC3C,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,YAAY,GAAG,MAAM;QACzB,CAAC,CAAC,mBAAmB,CAAC;YACpB,MAAM;YACN,cAAc;YACd,WAAW;YACX,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM;SACP,CAAC;QACF,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,EAAE,CAAA;IAElC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACnE,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAExE,OAAO,CAAC,KAAqC,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;QACzD,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC,CAAA;AACH,CAAC"}