@rsaglobaltech/specgate 1.0.0-rc.1 → 1.0.0-rc.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.
- package/CHANGELOG.md +37 -0
- package/dist/packages/core/src/domain/Approvals.js +19 -4
- package/dist/packages/core/src/domain/Approvals.js.map +1 -1
- package/dist/packages/core/src/domain/ChangeLayers.js +6 -2
- package/dist/packages/core/src/domain/ChangeLayers.js.map +1 -1
- package/dist/packages/core/src/domain/WorkspaceStory.js +259 -0
- package/dist/packages/core/src/domain/WorkspaceStory.js.map +1 -0
- package/dist/scripts/change/instructions.js +8 -0
- package/dist/scripts/change/instructions.js.map +1 -1
- package/dist/scripts/cli/commands/change/ChangeCommand.js +62 -3
- package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
- package/dist/scripts/cli/commands/harness/RunCommand.js +5 -4
- package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
- package/dist/scripts/cli/commands/project/InitProjectCommand.js +9 -14
- package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/DoneCommand.js +22 -0
- package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StatusCommand.js +73 -0
- package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
- package/dist/scripts/cli/commands/spec/StudioCommand.js +6 -6
- package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
- package/dist/scripts/cli/commands/workspace/WorkspaceCommand.js +252 -42
- package/dist/scripts/cli/commands/workspace/WorkspaceCommand.js.map +1 -1
- package/dist/scripts/draft/confined-agent.js +2 -1
- package/dist/scripts/draft/confined-agent.js.map +1 -1
- package/dist/scripts/harness/prompt.js +50 -1
- package/dist/scripts/harness/prompt.js.map +1 -1
- package/dist/scripts/lib/story-part.js +73 -0
- package/dist/scripts/lib/story-part.js.map +1 -0
- package/dist/scripts/lib/surface.js +1 -1
- package/dist/scripts/lib/surface.js.map +1 -1
- package/dist/scripts/lib/temp-file.js +72 -0
- package/dist/scripts/lib/temp-file.js.map +1 -0
- package/dist/scripts/lib/workspace-draft.js +224 -0
- package/dist/scripts/lib/workspace-draft.js.map +1 -0
- package/dist/scripts/lib/workspace-live.js +9 -26
- package/dist/scripts/lib/workspace-live.js.map +1 -1
- package/dist/scripts/lib/workspace.js +325 -6
- package/dist/scripts/lib/workspace.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.storyRel = exports.WORKSPACE_BRIEF = void 0;
|
|
37
|
+
exports.workspaceBrief = workspaceBrief;
|
|
38
|
+
exports.readWorkspaceStories = readWorkspaceStories;
|
|
39
|
+
exports.scaffoldStory = scaffoldStory;
|
|
40
|
+
exports.storyPrompt = storyPrompt;
|
|
41
|
+
exports.draftStoryWithAgent = draftStoryWithAgent;
|
|
42
|
+
exports.storiesPrompt = storiesPrompt;
|
|
43
|
+
exports.proposeStoriesWithAgent = proposeStoriesWithAgent;
|
|
44
|
+
const fs = __importStar(require("node:fs"));
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
46
|
+
const Workspace_1 = require("../../packages/core/src/domain/Workspace");
|
|
47
|
+
const WorkspaceStory_1 = require("../../packages/core/src/domain/WorkspaceStory");
|
|
48
|
+
const confined_agent_1 = require("../draft/confined-agent");
|
|
49
|
+
/**
|
|
50
|
+
* The client's brief in a workspace repository, and the stories it holds
|
|
51
|
+
* (REQ-339..340). A workspace brief names stories, as a project's names
|
|
52
|
+
* modules: each story is split across the repositories it touches.
|
|
53
|
+
*/
|
|
54
|
+
exports.WORKSPACE_BRIEF = path.join("docs", "brief.md");
|
|
55
|
+
/**
|
|
56
|
+
* `docs/brief.md` of the workspace, made from a root `brief.md` the first
|
|
57
|
+
* time — the client's text kept as it is, below a front matter to fill.
|
|
58
|
+
*/
|
|
59
|
+
function workspaceBrief(ws) {
|
|
60
|
+
const file = path.join(ws.dir, exports.WORKSPACE_BRIEF);
|
|
61
|
+
let created = false;
|
|
62
|
+
if (!fs.existsSync(file)) {
|
|
63
|
+
const root = path.join(ws.dir, "brief.md");
|
|
64
|
+
const body = fs.existsSync(root)
|
|
65
|
+
? fs.readFileSync(root, "utf8").replace(/\r\n/g, "\n")
|
|
66
|
+
: "# Brief\n\nPaste the client's brief here as it is.\n";
|
|
67
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
68
|
+
fs.writeFileSync(file, (0, WorkspaceStory_1.workspaceBriefTemplate)(ws.config.name, ws.config.repos.map((r) => r.name)) + body, "utf8");
|
|
69
|
+
created = true;
|
|
70
|
+
}
|
|
71
|
+
const text = fs.readFileSync(file, "utf8");
|
|
72
|
+
return {
|
|
73
|
+
file: exports.WORKSPACE_BRIEF.split(path.sep).join("/"),
|
|
74
|
+
created,
|
|
75
|
+
stories: (0, WorkspaceStory_1.briefStories)((0, WorkspaceStory_1.briefFrontMatter)(text)),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** The stories the workspace brief names, without writing anything. */
|
|
79
|
+
function readWorkspaceStories(ws) {
|
|
80
|
+
const file = path.join(ws.dir, exports.WORKSPACE_BRIEF);
|
|
81
|
+
if (!fs.existsSync(file))
|
|
82
|
+
return [];
|
|
83
|
+
return (0, WorkspaceStory_1.briefStories)((0, WorkspaceStory_1.briefFrontMatter)(fs.readFileSync(file, "utf8")));
|
|
84
|
+
}
|
|
85
|
+
/** The story folder, relative to the workspace repository. */
|
|
86
|
+
const storyRel = (id) => `${Workspace_1.STORIES_DIR}/${id}`;
|
|
87
|
+
exports.storyRel = storyRel;
|
|
88
|
+
/** The story's folder with its `story.yaml` (no parts yet) and a `story.md` to fill. */
|
|
89
|
+
function scaffoldStory(ws, story) {
|
|
90
|
+
const dir = path.join(ws.dir, Workspace_1.STORIES_DIR, story.id);
|
|
91
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
92
|
+
const written = [];
|
|
93
|
+
const yaml = path.join(dir, "story.yaml");
|
|
94
|
+
if (!fs.existsSync(yaml)) {
|
|
95
|
+
fs.writeFileSync(yaml, (0, Workspace_1.renderStory)({ id: story.id, title: story.title, subchanges: [] }), "utf8");
|
|
96
|
+
written.push(`${(0, exports.storyRel)(story.id)}/story.yaml`);
|
|
97
|
+
}
|
|
98
|
+
const md = path.join(dir, "story.md");
|
|
99
|
+
if (!fs.existsSync(md)) {
|
|
100
|
+
fs.writeFileSync(md, (0, WorkspaceStory_1.storyTemplate)(story.title, story.repos), "utf8");
|
|
101
|
+
written.push(`${(0, exports.storyRel)(story.id)}/story.md`);
|
|
102
|
+
}
|
|
103
|
+
// REQ-363: the client's questions, kept apart from the story.
|
|
104
|
+
const questions = path.join(dir, "questions.md");
|
|
105
|
+
if (!fs.existsSync(questions)) {
|
|
106
|
+
fs.writeFileSync(questions, (0, WorkspaceStory_1.storyQuestionsTemplate)(story.id), "utf8");
|
|
107
|
+
written.push(`${(0, exports.storyRel)(story.id)}/questions.md`);
|
|
108
|
+
}
|
|
109
|
+
return written;
|
|
110
|
+
}
|
|
111
|
+
/** What the agent drafting a story is told: the brief, the story, and the format. */
|
|
112
|
+
function storyPrompt(ws, story) {
|
|
113
|
+
const brief = (0, WorkspaceStory_1.briefText)(fs.readFileSync(path.join(ws.dir, exports.WORKSPACE_BRIEF), "utf8"));
|
|
114
|
+
const file = `${(0, exports.storyRel)(story.id)}/story.md`;
|
|
115
|
+
return [
|
|
116
|
+
`# Draft the story ${story.id} of the workspace ${ws.config.name}`,
|
|
117
|
+
"",
|
|
118
|
+
`Write \`${file}\`: the business story "${story.title}", which the repositories ${story.repos
|
|
119
|
+
.map((r) => `\`${r}\``)
|
|
120
|
+
.join(", ")} will each build a part of. Write nothing else.`,
|
|
121
|
+
"",
|
|
122
|
+
"## The rules",
|
|
123
|
+
"",
|
|
124
|
+
"- **Intent:** who needs what, and why, in the client's words — quote the brief where it says it. No technology: each repository's design says how.",
|
|
125
|
+
"- **Acceptance criteria:** one line each, `- AC-1: …`, `- AC-2: …`, each a thing a person can see or check. Only what the brief supports; a number the brief does not give is a question, not a guess.",
|
|
126
|
+
`- **Repositories:** each repository with the criteria it answers, one line each as \`- fleet: AC-1, AC-2\` — from what each repository is (${story.repos
|
|
127
|
+
.map((r) => `\`${r}\` ${roleOf(ws, r)}`)
|
|
128
|
+
.join(", ")}); a criterion two repositories build, both name it (REQ-361).`,
|
|
129
|
+
`- **Questions:** what only the client can decide goes in \`${(0, exports.storyRel)(story.id)}/questions.md\`, one table row each (\`| Q1 | <question> | AC-n | |\`), not in story.md. The story is not split while one is open (REQ-363).`,
|
|
130
|
+
"- Replace the `<!-- … -->` hints with your text; keep the file's headings: `## Intent`, `## Acceptance criteria`, `## Repositories`.",
|
|
131
|
+
"",
|
|
132
|
+
`## The file as it is now: ${file}`,
|
|
133
|
+
"",
|
|
134
|
+
"```markdown",
|
|
135
|
+
fs.readFileSync(path.join(ws.dir, file), "utf8").trimEnd(),
|
|
136
|
+
"```",
|
|
137
|
+
"",
|
|
138
|
+
"## The client's brief",
|
|
139
|
+
"",
|
|
140
|
+
brief.trimEnd(),
|
|
141
|
+
"",
|
|
142
|
+
].join("\n");
|
|
143
|
+
}
|
|
144
|
+
/** An agent drafts the story, confined to its folder (REQ-340). */
|
|
145
|
+
function draftStoryWithAgent(ws, story, command, showOutput) {
|
|
146
|
+
const { command: cmd, added } = (0, confined_agent_1.withWritePermission)(command);
|
|
147
|
+
const prefix = `${(0, exports.storyRel)(story.id)}/`;
|
|
148
|
+
const run = (0, confined_agent_1.runConfinedAgent)({
|
|
149
|
+
projectDir: ws.dir,
|
|
150
|
+
changeId: story.id,
|
|
151
|
+
allowed: (rel) => rel.split(path.sep).join("/").startsWith(prefix),
|
|
152
|
+
command: cmd,
|
|
153
|
+
prompt: storyPrompt(ws, story),
|
|
154
|
+
showOutput,
|
|
155
|
+
});
|
|
156
|
+
// REQ-364: the form's hints go once the agent has written below them.
|
|
157
|
+
const md = path.join(ws.dir, Workspace_1.STORIES_DIR, story.id, "story.md");
|
|
158
|
+
if (run.ok && fs.existsSync(md)) {
|
|
159
|
+
const text = fs.readFileSync(md, "utf8");
|
|
160
|
+
const clean = (0, WorkspaceStory_1.withoutFilledHints)(text);
|
|
161
|
+
if (clean !== text.replace(/\r\n/g, "\n"))
|
|
162
|
+
fs.writeFileSync(md, clean, "utf8");
|
|
163
|
+
}
|
|
164
|
+
return { ...run, permissionAdded: added };
|
|
165
|
+
}
|
|
166
|
+
function roleOf(ws, repo) {
|
|
167
|
+
const r = ws.config.repos.find((x) => x.name === repo);
|
|
168
|
+
return r ? `(${r.role})` : "";
|
|
169
|
+
}
|
|
170
|
+
/** What the agent proposing the brief's stories is told (REQ-360). */
|
|
171
|
+
function storiesPrompt(ws) {
|
|
172
|
+
const text = fs.readFileSync(path.join(ws.dir, exports.WORKSPACE_BRIEF), "utf8");
|
|
173
|
+
return [
|
|
174
|
+
`# Propose the stories of the workspace ${ws.config.name}'s brief`,
|
|
175
|
+
"",
|
|
176
|
+
`Fill \`stories:\` in the front matter at the top of \`${exports.WORKSPACE_BRIEF.split(path.sep).join("/")}\`. Change nothing below the front matter: it is the client's text, and it is put back if it changes. Write no other file.`,
|
|
177
|
+
"",
|
|
178
|
+
"## The rules",
|
|
179
|
+
"",
|
|
180
|
+
"- One line per business story the brief asks for: ` - { id: follow-shipment, title: <the story in the client's words>, repos: [fleet, web] }`.",
|
|
181
|
+
`- \`repos\` names the repositories that build a part of it, from these: ${ws.config.repos
|
|
182
|
+
.map((r) => `\`${r.name}\` (${r.role})`)
|
|
183
|
+
.join(", ")}.`,
|
|
184
|
+
"- In the brief's order; only what the brief asks for. When unsure of a story or of its repositories, still propose it, with a `# check: …` comment on the line above saying what is uncertain.",
|
|
185
|
+
"",
|
|
186
|
+
"## The brief as it is now",
|
|
187
|
+
"",
|
|
188
|
+
"```markdown",
|
|
189
|
+
text.trimEnd(),
|
|
190
|
+
"```",
|
|
191
|
+
"",
|
|
192
|
+
].join("\n");
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* REQ-360: an agent fills the brief's `stories:`, allowed to write only the
|
|
196
|
+
* brief; the client's text below the front matter is put back if it moved.
|
|
197
|
+
*/
|
|
198
|
+
function proposeStoriesWithAgent(ws, command, showOutput) {
|
|
199
|
+
const { command: cmd, added } = (0, confined_agent_1.withWritePermission)(command);
|
|
200
|
+
const file = path.join(ws.dir, exports.WORKSPACE_BRIEF);
|
|
201
|
+
const before = fs.readFileSync(file, "utf8").replace(/\r\n/g, "\n");
|
|
202
|
+
const rel = exports.WORKSPACE_BRIEF.split(path.sep).join("/");
|
|
203
|
+
const run = (0, confined_agent_1.runConfinedAgent)({
|
|
204
|
+
projectDir: ws.dir,
|
|
205
|
+
changeId: "stories",
|
|
206
|
+
allowed: (r) => r.split(path.sep).join("/") === rel,
|
|
207
|
+
command: cmd,
|
|
208
|
+
prompt: storiesPrompt(ws),
|
|
209
|
+
showOutput,
|
|
210
|
+
});
|
|
211
|
+
let textRestored = false;
|
|
212
|
+
if (fs.existsSync(file)) {
|
|
213
|
+
const after = fs.readFileSync(file, "utf8").replace(/\r\n/g, "\n");
|
|
214
|
+
if ((0, WorkspaceStory_1.briefText)(after) !== (0, WorkspaceStory_1.briefText)(before)) {
|
|
215
|
+
const front = /^---\n[\s\S]*?\n---[ \t]*\n/.exec(after);
|
|
216
|
+
const fm = front ? front[0] : (/^---\n[\s\S]*?\n---[ \t]*\n/.exec(before) || [""])[0];
|
|
217
|
+
const body = before.slice((/^---\n[\s\S]*?\n---[ \t]*\n/.exec(before) || [""])[0].length);
|
|
218
|
+
fs.writeFileSync(file, fm + body, "utf8");
|
|
219
|
+
textRestored = true;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return { ...run, permissionAdded: added, textRestored };
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=workspace-draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-draft.js","sourceRoot":"","sources":["../../../scripts/lib/workspace-draft.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,wCAyBC;AAGD,oDAIC;AAMD,sCAyBC;AAGD,kCA+BC;AAGD,kDAwBC;AAQD,sCAsBC;AAMD,0DA6BC;AAlOD,4CAA8B;AAC9B,gDAAkC;AAClC,wEAAoF;AACpF,kFAQuD;AAEvD,4DAAgF;AAIhF;;;;GAIG;AAEU,QAAA,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAU7D;;;GAGG;AACH,SAAgB,cAAc,CAAC,EAAmB;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAe,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;YACtD,CAAC,CAAC,sDAAsD,CAAC;QAC3D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CACd,IAAI,EACJ,IAAA,uCAAsB,EACpB,EAAE,CAAC,MAAM,CAAC,IAAI,EACd,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACnC,GAAG,IAAI,EACR,MAAM,CACP,CAAC;QACF,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,uBAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/C,OAAO;QACP,OAAO,EAAE,IAAA,6BAAY,EAAC,IAAA,iCAAgB,EAAC,IAAI,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,SAAgB,oBAAoB,CAAC,EAAmB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAe,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,IAAA,6BAAY,EAAC,IAAA,iCAAgB,EAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,8DAA8D;AACvD,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,GAAG,uBAAW,IAAI,EAAE,EAAE,CAAC;AAAlD,QAAA,QAAQ,YAA0C;AAE/D,wFAAwF;AACxF,SAAgB,aAAa,CAAC,EAAmB,EAAE,KAAiB;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACrD,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,EAAE,CAAC,aAAa,CACd,IAAI,EACJ,IAAA,uBAAW,EAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,EACjE,MAAM,CACP,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAA,8BAAa,EAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IACD,8DAA8D;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAA,uCAAsB,EAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qFAAqF;AACrF,SAAgB,WAAW,CAAC,EAAmB,EAAE,KAAiB;IAChE,MAAM,KAAK,GAAG,IAAA,0BAAS,EAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAe,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC;IAC9C,OAAO;QACL,qBAAqB,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;QAClE,EAAE;QACF,WAAW,IAAI,2BAA2B,KAAK,CAAC,KAAK,6BAA6B,KAAK,CAAC,KAAK;aAC1F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aACtB,IAAI,CAAC,IAAI,CAAC,iDAAiD;QAC9D,EAAE;QACF,cAAc;QACd,EAAE;QACF,oJAAoJ;QACpJ,wMAAwM;QACxM,8IAA8I,KAAK,CAAC,KAAK;aACtJ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;aACvC,IAAI,CAAC,IAAI,CAAC,gEAAgE;QAC7E,8DAA8D,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC,8IAA8I;QAC9N,sIAAsI;QACtI,EAAE;QACF,6BAA6B,IAAI,EAAE;QACnC,EAAE;QACF,aAAa;QACb,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE;QAC1D,KAAK;QACL,EAAE;QACF,uBAAuB;QACvB,EAAE;QACF,KAAK,CAAC,OAAO,EAAE;QACf,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,mEAAmE;AACnE,SAAgB,mBAAmB,CACjC,EAAmB,EACnB,KAAiB,EACjB,OAAe,EACf,UAAmB;IAEnB,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAA,oCAAmB,EAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC;IACxC,MAAM,GAAG,GAAG,IAAA,iCAAgB,EAAC;QAC3B,UAAU,EAAE,EAAE,CAAC,GAAG;QAClB,QAAQ,EAAE,KAAK,CAAC,EAAE;QAClB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAClE,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC;QAC9B,UAAU;KACX,CAAC,CAAC;IACH,sEAAsE;IACtE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAW,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAChE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAA,mCAAkB,EAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,MAAM,CAAC,EAAmB,EAAE,IAAY;IAC/C,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACvD,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC;AAED,sEAAsE;AACtE,SAAgB,aAAa,CAAC,EAAmB;IAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAe,CAAC,EAAE,MAAM,CAAC,CAAC;IACzE,OAAO;QACL,0CAA0C,EAAE,CAAC,MAAM,CAAC,IAAI,UAAU;QAClE,EAAE;QACF,yDAAyD,uBAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,4HAA4H;QAC9N,EAAE;QACF,cAAc;QACd,EAAE;QACF,iJAAiJ;QACjJ,2EAA2E,EAAE,CAAC,MAAM,CAAC,KAAK;aACvF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC;aACvC,IAAI,CAAC,IAAI,CAAC,GAAG;QAChB,gMAAgM;QAChM,EAAE;QACF,2BAA2B;QAC3B,EAAE;QACF,aAAa;QACb,IAAI,CAAC,OAAO,EAAE;QACd,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,EAAmB,EACnB,OAAe,EACf,UAAmB;IAEnB,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAA,oCAAmB,EAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAe,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,uBAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAA,iCAAgB,EAAC;QAC3B,UAAU,EAAE,EAAE,CAAC,GAAG;QAClB,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG;QACnD,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;QACzB,UAAU;KACX,CAAC,CAAC;IACH,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,IAAA,0BAAS,EAAC,KAAK,CAAC,KAAK,IAAA,0BAAS,EAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1F,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1C,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -38,35 +38,17 @@ exports.readWorkspaceLive = readWorkspaceLive;
|
|
|
38
38
|
exports.workspaceLiveSignature = workspaceLiveSignature;
|
|
39
39
|
const fs = __importStar(require("node:fs"));
|
|
40
40
|
const path = __importStar(require("node:path"));
|
|
41
|
-
const ChangeWorkspace_1 = require("../../packages/core/src/infrastructure/ChangeWorkspace");
|
|
42
|
-
const SpecParser_1 = require("../../packages/core/src/domain/SpecParser");
|
|
43
41
|
const Workspace_1 = require("../../packages/core/src/domain/Workspace");
|
|
44
42
|
const live_model_1 = require("./live-model");
|
|
45
43
|
const in_flight_1 = require("./in-flight");
|
|
46
44
|
const workspace_1 = require("./workspace");
|
|
47
|
-
/** The requirements a sub-change's delta adds or modifies, with their dependencies and scenarios. */
|
|
45
|
+
/** The requirements a sub-change's delta adds or modifies, open or archived, with their dependencies and scenarios. */
|
|
48
46
|
function partRequirements(memberDir, change) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
for (const r of [...(parsed.added || []), ...(parsed.modified || [])]) {
|
|
59
|
-
if (!r.id)
|
|
60
|
-
continue;
|
|
61
|
-
const raw = String((r.trace || {}).depends || "");
|
|
62
|
-
out.push({
|
|
63
|
-
id: r.id.toUpperCase(),
|
|
64
|
-
depends: raw.split(/[,;\s]+/).filter(Boolean),
|
|
65
|
-
scenarios: r.scenarios.map((s) => s.id || "").filter(Boolean),
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return out;
|
|
47
|
+
return (0, workspace_1.changeRequirements)(memberDir, change).map(({ id, depends, scenarios }) => ({
|
|
48
|
+
id,
|
|
49
|
+
depends,
|
|
50
|
+
scenarios,
|
|
51
|
+
}));
|
|
70
52
|
}
|
|
71
53
|
/** Minutes the member's ledger recorded, for the requirements `only` names (all when absent). */
|
|
72
54
|
function ledgerMinutes(memberDir, only) {
|
|
@@ -162,12 +144,13 @@ function readWorkspaceLive(ws) {
|
|
|
162
144
|
const dir = ws.dirs[sc.repo];
|
|
163
145
|
const exists = !!dir && fs.existsSync(dir);
|
|
164
146
|
const base = exists ? (0, workspace_1.subChangeState)(dir, sc.change) : "missing";
|
|
165
|
-
|
|
147
|
+
// REQ-347: an archived part's requirements still count in the story's cost.
|
|
148
|
+
const reqs = exists && base !== "missing" ? partRequirements(dir, sc.change) : [];
|
|
166
149
|
const ids = new Set(reqs.map((r) => r.id));
|
|
167
150
|
const live = lives.get(sc.repo);
|
|
168
151
|
const seen = live ? live.requirements.filter((r) => ids.has(r.req)) : [];
|
|
169
152
|
const blockedBy = [
|
|
170
|
-
...new Set(reqs.flatMap((r) => r.depends.filter((d) => {
|
|
153
|
+
...new Set((base === "open" ? reqs : []).flatMap((r) => r.depends.filter((d) => {
|
|
171
154
|
const q = (0, Workspace_1.splitQualified)(d);
|
|
172
155
|
return !!q && !in_flight_1.DELIVERED.includes(statusOf(q.repo, q.id));
|
|
173
156
|
}))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-live.js","sourceRoot":"","sources":["../../../scripts/lib/workspace-live.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"workspace-live.js","sourceRoot":"","sources":["../../../scripts/lib/workspace-live.ts"],"names":[],"mappings":"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"}
|