@clemrig/factory 0.18.3 → 0.19.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/README.md +14 -18
- package/dist/app/factory.d.ts +2 -0
- package/dist/app/factory.js +5 -1
- package/dist/app/factory.js.map +1 -1
- package/dist/app/review.d.ts +16 -0
- package/dist/app/review.js +87 -0
- package/dist/app/review.js.map +1 -0
- package/dist/app/workflows/implement.js +3 -7
- package/dist/app/workflows/implement.js.map +1 -1
- package/dist/app/workflows/stages/deliver.d.ts +5 -4
- package/dist/app/workflows/stages/deliver.js +47 -53
- package/dist/app/workflows/stages/deliver.js.map +1 -1
- package/dist/app/workflows/stages/prepare.js +11 -7
- package/dist/app/workflows/stages/prepare.js.map +1 -1
- package/dist/app/workflows/stages/resume.js +0 -4
- package/dist/app/workflows/stages/resume.js.map +1 -1
- package/dist/app/workflows/stages/run.d.ts +1 -2
- package/dist/app/workflows/tidy.js +2 -3
- package/dist/app/workflows/tidy.js.map +1 -1
- package/dist/cli/ui.d.ts +4 -2
- package/dist/cli/ui.js +17 -5
- package/dist/cli/ui.js.map +1 -1
- package/dist/domain/board.d.ts +2 -0
- package/dist/domain/board.js +4 -1
- package/dist/domain/board.js.map +1 -1
- package/dist/domain/description.d.ts +57 -5
- package/dist/domain/description.js +133 -12
- package/dist/domain/description.js.map +1 -1
- package/dist/domain/diff.d.ts +8 -0
- package/dist/domain/diff.js +90 -0
- package/dist/domain/diff.js.map +1 -0
- package/dist/domain/pull-request.d.ts +9 -21
- package/dist/domain/pull-request.js +43 -228
- package/dist/domain/pull-request.js.map +1 -1
- package/dist/domain/review-page.d.ts +171 -0
- package/dist/domain/review-page.js +200 -0
- package/dist/domain/review-page.js.map +1 -0
- package/dist/system/environment.d.ts +6 -0
- package/dist/system/environment.js +19 -0
- package/dist/system/environment.js.map +1 -1
- package/dist/system/factory.d.ts +2 -0
- package/dist/system/factory.js +4 -0
- package/dist/system/factory.js.map +1 -1
- package/dist/system/git.d.ts +5 -1
- package/dist/system/git.js +19 -2
- package/dist/system/git.js.map +1 -1
- package/dist/system/github.d.ts +3 -12
- package/dist/system/github.js +7 -31
- package/dist/system/github.js.map +1 -1
- package/dist/system/run-files.d.ts +14 -0
- package/dist/system/run-files.js +51 -8
- package/dist/system/run-files.js.map +1 -1
- package/package.json +2 -2
- package/prompts/describe.md +36 -15
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { code, step } from "@clemrig/flow";
|
|
2
|
-
import { ghVersionProblem } from "../../../domain/pull-request.js";
|
|
3
2
|
import { parseSpec } from "../../../domain/spec.js";
|
|
4
3
|
import { isTidyBranch, tidySlug } from "../../../domain/tidy.js";
|
|
5
4
|
import { failureFeedback, } from "../../../domain/verification.js";
|
|
6
5
|
import { runBrowser } from "../../../system/browser.js";
|
|
7
6
|
import { runChecks } from "../../../system/checks.js";
|
|
7
|
+
import { uiUrl } from "../../../system/environment.js";
|
|
8
8
|
import * as git from "../../../system/git.js";
|
|
9
9
|
import * as github from "../../../system/github.js";
|
|
10
10
|
import { artifactPath, hasArtifact, isIssue, readArtifact, } from "../../../system/issues.js";
|
|
@@ -25,14 +25,18 @@ async function baseProblems(dir, base) {
|
|
|
25
25
|
problems.push(`${base} must match origin/${base}: push or pull first`);
|
|
26
26
|
return problems;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* The repository on GitHub, when gh is logged in to open its pull request and
|
|
30
|
+
* the review page it links to has a valid address; otherwise why not.
|
|
31
|
+
*/
|
|
29
32
|
async function gitHubProblems(dir) {
|
|
30
33
|
const problems = [];
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
problems.push(
|
|
34
|
+
try {
|
|
35
|
+
uiUrl();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
problems.push(message(error));
|
|
39
|
+
}
|
|
36
40
|
if (!(await github.isAuthenticated(dir))) {
|
|
37
41
|
problems.push("gh is not logged in: run gh auth login");
|
|
38
42
|
return { problems };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,IAAI,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,IAAI,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,OAAO,EACP,YAAY,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAc,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,2GAA2G;AAC3G,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,IAAY;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;QACzC,QAAQ,CAAC,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACnE,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,IACE,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9C,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,CAAC;IACzE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAC3B,GAAW;IAEX,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,KAAK,EAAE,CAAC;IACV,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,4CAA4C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5E,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,KAAK,UAAU,kBAAkB,CAC/B,GAAW,EACX,IAAY,EACZ,IAAY,EACZ,YAAsB;IAEtB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,IAAI,MAAM,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC;YAAE,SAAS;QACzD,IAAI,MAAM,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;YAChC,QAAQ,CAAC,IAAI,CACX,SAAS,IAAI,eAAe,UAAU,mDAAmD,IAAI,8EAA8E,IAAI,GAAG,CACnL,CAAC;;YAEF,QAAQ,CAAC,IAAI,CACX,SAAS,IAAI,eAAe,UAAU,qFAAqF,IAAI,GAAG,CACnI,CAAC;IACN,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,QAAkB;IACrC,OAAO,IAAI,KAAK,CACd,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3E,CAAC;AACJ,CAAC;AAED,2GAA2G;AAC3G,KAAK,UAAU,SAAS,CACtB,GAAW,EACX,MAAuB,EACvB,IAAY,EACZ,GAAQ;IAER,MAAM,MAAM,GAAG,MAAM,SAAS,CAC5B,GAAG,EACH,MAAM,EACN,EAAE,EACF,aAAa,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC,CAClC,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,mCAAmC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CACvG,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc,CAC3B,GAAW,EACX,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CACzB,GAAW,EACX,EAAE,IAAI,EAAE,UAAU,EAAsC,EACxD,SAAiB,EACjB,IAAsB;IAEtB,OAAO,YAAY,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU;YACxC,MAAM,IAAI,KAAK,CACb,wBAAwB,SAAS,SAAS,MAAM,IAAI,UAAU,OAAO,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAC1I,CAAC;QACJ,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,iEAAiE;QACjE,IAAI,IAAI,KAAK,IAAI;YACf,QAAQ,CAAC,IAAI,CACX,SAAS,IAAI,oDAAoD,IAAI,oBAAoB,CAC1F,CAAC;QACJ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,iBAAiB,CAAC,CAAC;aACpD,IAAI,CAAC,IAAI,CAAC,EAAE;YACf,QAAQ,CAAC,IAAI,CACX,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,OAAO,EAAE,CAAC,EACxD,4CAA4C,IAAI,4BAA4B,CAC7E,CAAC;;YAEF,QAAQ,CAAC,IAAI,CACX,GAAG,CAAC,MAAM,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CACxE,CAAC;QACJ,IAAI,MAAM,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;YACtC,QAAQ,CAAC,IAAI,CACX,SAAS,IAAI,4CAA4C,IAAI,sBAAsB,CACpF,CAAC;QACJ,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;QACnE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU;YACvE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,GAAG,CACD,yBAAyB,IAAI,8BAA8B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,yBAAyB,CAC/G,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,YAAY,CAChB,GAAG,EACH,EAAE,IAAI,EAAE,UAAU,EAAE,EACpB,SAAS,IAAI,eAAe,EAC5B,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAC1C,CAAC;QACF,GAAG,CAAC,kBAAkB,IAAI,SAAS,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YACvB,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC7B,UAAU;YACV,GAAG,SAAS;YACZ,IAAI;YACJ,UAAU;YACV,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;YACpC,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;SACrC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,MAAuB;IAEvB,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;QACnE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU;YAAE,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpE,GAAG,CAAC,yBAAyB,IAAI,+BAA+B,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,CACtD,GAAG,EACH,EAAE,IAAI,EAAE,UAAU,EAAE,EACpB,SAAS,IAAI,eAAe,EAC5B,KAAK,IAAI,EAAE;YACT,qEAAqE;YACrE,sCAAsC;YACtC,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACnD,YAAY,CAAC,MAAM,CAAC,CACrB,CAAC;YACF,IAAI,CAAC,OAAO;gBAAE,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YACxD,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACvC,CAAC,CACF,CAAC;QACF,IAAI,OAAO;YACT,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,qCAAqC,OAAO,CAAC,GAAG,EAAE;gBAC1D,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;aAClC,CAAC;QACJ,GAAG,CAAC,kBAAkB,IAAI,SAAS,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,GAAG,IAAI,wCAAwC;YACvD,IAAI,EAAE;gBACJ,IAAI;gBACJ,UAAU;gBACV,GAAG,SAAS;gBACZ,IAAI;gBACJ,UAAU;gBACV,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;gBACpC,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;gBACpC,gBAAgB;aACjB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -9,10 +9,6 @@ import { facts, short, specCommitOf } from "./run.js";
|
|
|
9
9
|
export async function resumeProblem({ dir, state, }) {
|
|
10
10
|
if (state.stage === "prepare")
|
|
11
11
|
return undefined;
|
|
12
|
-
// Its pull request is open: only its screenshots remain to attach, from the
|
|
13
|
-
// run's folder, whatever the repository is on.
|
|
14
|
-
if (state.stage === "attach")
|
|
15
|
-
return undefined;
|
|
16
12
|
// Stopped once its last stage was done, such as by Ctrl-C.
|
|
17
13
|
const { pullRequest } = state.data;
|
|
18
14
|
if (typeof pullRequest === "string")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/resume.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,GAAG,EACH,KAAK,GAC+B;IACpC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChD,
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,10 +17,9 @@ export interface Facts {
|
|
|
17
17
|
/** The spec's Objective, which the pull request recalls. */
|
|
18
18
|
objective: string;
|
|
19
19
|
criteria: Criterion[];
|
|
20
|
-
/** The repository on GitHub: its page
|
|
20
|
+
/** The repository on GitHub: its page. */
|
|
21
21
|
repository: {
|
|
22
22
|
url: string;
|
|
23
|
-
public: boolean;
|
|
24
23
|
};
|
|
25
24
|
/** The agents' browser, when `.factory/` installs one. */
|
|
26
25
|
browser?: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineWorkflow, END, node, retry } from "@clemrig/flow";
|
|
2
2
|
import { TIDY } from "../../domain/tidy.js";
|
|
3
3
|
import { commitSpec, judgeChoice, release, scout, survey, tidyResult, } from "./stages/choose.js";
|
|
4
|
-
import {
|
|
4
|
+
import { deliver, describer, judgeDescription } from "./stages/deliver.js";
|
|
5
5
|
import { implementer, judgeImplementation } from "./stages/implement.js";
|
|
6
6
|
import { commitPlan, judgePlan, planner } from "./stages/plan.js";
|
|
7
7
|
import { prepareTidy } from "./stages/prepare.js";
|
|
@@ -67,8 +67,7 @@ export function tidy(definition) {
|
|
|
67
67
|
ok: "deliver",
|
|
68
68
|
invalid: retry("describe", 2),
|
|
69
69
|
}),
|
|
70
|
-
deliver: node(deliver, { done: END
|
|
71
|
-
attach: node(attach, { ok: END }),
|
|
70
|
+
deliver: node(deliver, { done: END }),
|
|
72
71
|
},
|
|
73
72
|
resumeProblem,
|
|
74
73
|
// Also called for a failed run, which opened no pull request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tidy.js","sourceRoot":"","sources":["../../../src/app/workflows/tidy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,KAAK,EACL,MAAM,EACN,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"tidy.js","sourceRoot":"","sources":["../../../src/app/workflows/tidy.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/ui.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Factory } from "../app/factory.js";
|
|
2
2
|
/**
|
|
3
|
-
* `factory ui`: serves the Kanban of the repository's issues,
|
|
4
|
-
* of its runs under `/runs
|
|
3
|
+
* `factory ui`: serves the Kanban of the repository's issues, the dashboard
|
|
4
|
+
* of its runs under `/runs/` and each delivered run's review page, until
|
|
5
|
+
* Ctrl-C, on `port` or one the system chooses. It also answers the host of
|
|
6
|
+
* `FACTORY_UI_URL`, which a proxy such as `tailscale serve` keeps.
|
|
5
7
|
*/
|
|
6
8
|
export declare function ui(factory: Factory, port?: number, loadError?: string): Promise<number>;
|
package/dist/cli/ui.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
|
-
import { startFactoryUi } from "@clemrig/factory-ui";
|
|
2
|
+
import { startFactoryUi, } from "@clemrig/factory-ui";
|
|
3
3
|
import { dashboardHandler } from "@clemrig/flow-ui";
|
|
4
4
|
import { readBoard } from "../app/board.js";
|
|
5
|
+
import { uiAddress } from "../app/factory.js";
|
|
6
|
+
import { readReviewAnswers, readReviewPage, readReviewScreenshot, saveReviewAnswers, } from "../app/review.js";
|
|
5
7
|
import { presentResult } from "../app/runs.js";
|
|
6
8
|
/**
|
|
7
|
-
* `factory ui`: serves the Kanban of the repository's issues,
|
|
8
|
-
* of its runs under `/runs
|
|
9
|
+
* `factory ui`: serves the Kanban of the repository's issues, the dashboard
|
|
10
|
+
* of its runs under `/runs/` and each delivered run's review page, until
|
|
11
|
+
* Ctrl-C, on `port` or one the system chooses. It also answers the host of
|
|
12
|
+
* `FACTORY_UI_URL`, which a proxy such as `tailscale serve` keeps.
|
|
9
13
|
*/
|
|
10
14
|
export async function ui(factory, port, loadError) {
|
|
11
15
|
const label = basename(factory.dir);
|
|
@@ -17,14 +21,22 @@ export async function ui(factory, port, loadError) {
|
|
|
17
21
|
// Mounted under `/runs/`: the Kanban is one level up.
|
|
18
22
|
home: { label: "Board", href: "../" },
|
|
19
23
|
});
|
|
24
|
+
const address = uiAddress();
|
|
20
25
|
const page = await startFactoryUi({
|
|
21
26
|
title: "factory",
|
|
22
27
|
label,
|
|
23
|
-
//
|
|
28
|
+
// What the factory computes is what the pages show: checked here, where both meet.
|
|
24
29
|
board: () => readBoard(factory, loadError),
|
|
25
30
|
runs,
|
|
31
|
+
review: {
|
|
32
|
+
page: (run) => readReviewPage(factory, run, (file) => `api/review/${encodeURIComponent(run)}/screenshots/${encodeURIComponent(file)}`),
|
|
33
|
+
answers: (run) => readReviewAnswers(factory, run),
|
|
34
|
+
saveAnswers: (run, answers) => saveReviewAnswers(factory, run, answers),
|
|
35
|
+
screenshot: (run, file) => readReviewScreenshot(factory, run, file),
|
|
36
|
+
},
|
|
37
|
+
...(address ? { hosts: [address.host] } : {}),
|
|
26
38
|
}, port);
|
|
27
|
-
process.stdout.write(`factory ui: ${page.url} (runs: ${page.url}runs/;
|
|
39
|
+
process.stdout.write(`factory ui: ${page.url} (runs: ${page.url}runs/; review pages: ${address?.href ?? page.url}review?run=<id>; Ctrl-C to stop)\n`);
|
|
28
40
|
await new Promise((resolve) => {
|
|
29
41
|
const stop = () => {
|
|
30
42
|
process.off("SIGINT", stop);
|
package/dist/cli/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/board.d.ts
CHANGED
|
@@ -47,6 +47,8 @@ export interface IssueCard {
|
|
|
47
47
|
waitsFor: string[];
|
|
48
48
|
/** The newest pull request its deliveries recorded. */
|
|
49
49
|
pullRequest?: string;
|
|
50
|
+
/** The run that recorded it, when it has a review page: one that described its change. */
|
|
51
|
+
review?: string;
|
|
50
52
|
/** The last run of each shown workflow, newest first. */
|
|
51
53
|
runs: RunProgress[];
|
|
52
54
|
}
|
package/dist/domain/board.js
CHANGED
|
@@ -67,7 +67,8 @@ export function boardOf(issues, runs, shown, problems) {
|
|
|
67
67
|
// The last delivery sets the column. A new delivery updates the same pull
|
|
68
68
|
// request: the newest one recorded stays shown.
|
|
69
69
|
const delivery = last(DELIVERY);
|
|
70
|
-
const
|
|
70
|
+
const delivered = own.findLast((run) => pullRequestOf(run) !== undefined);
|
|
71
|
+
const pullRequest = delivered && pullRequestOf(delivered);
|
|
71
72
|
const cardRuns = shown
|
|
72
73
|
.flatMap((workflow) => {
|
|
73
74
|
const run = last(workflow.name);
|
|
@@ -91,6 +92,8 @@ export function boardOf(issues, runs, shown, problems) {
|
|
|
91
92
|
.filter(({ delivered }) => !delivered)
|
|
92
93
|
.map(({ slug }) => slug),
|
|
93
94
|
...(pullRequest ? { pullRequest } : {}),
|
|
95
|
+
// Runs delivered by an earlier factory have no description, nor its page.
|
|
96
|
+
...(delivered?.data.description ? { review: delivered.id } : {}),
|
|
94
97
|
runs: cardRuns,
|
|
95
98
|
},
|
|
96
99
|
};
|
package/dist/domain/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/domain/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAqB,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAExD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,SAAS;IACT,YAAY;IACZ,WAAW;IACX,SAAS;IACT,YAAY;IACZ,MAAM;CACE,CAAC;
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/domain/board.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { z } from "@clemrig/flow";
|
|
2
2
|
import type { ChangedFile } from "./review.js";
|
|
3
|
-
|
|
3
|
+
import type { Criterion } from "./spec.js";
|
|
4
|
+
/** What the review page draws: a mermaid diagram; a diff or a text block shows a shape as it is. */
|
|
4
5
|
export declare const visualKinds: readonly ["mermaid", "diff", "text"];
|
|
5
|
-
/**
|
|
6
|
+
/** The largest screenshot: the review page loads it whole, on a phone too. */
|
|
6
7
|
export declare const maxScreenshotBytes: number;
|
|
8
|
+
/** What a decision departs from: the spec's scope, a test that existed, or the spec's letter. */
|
|
9
|
+
export declare const decisionKinds: readonly ["beyond_spec", "changed_test", "spec_reading"];
|
|
10
|
+
/** What a decision's card shows: one of these, with its own fields. */
|
|
11
|
+
export declare const decisionVisualKinds: readonly ["reading", "diff", "screenshots", "list"];
|
|
7
12
|
/**
|
|
8
13
|
* The describing agent's response: what a reader who forgot the issue needs
|
|
9
|
-
* to review its pull request. As many items as the
|
|
14
|
+
* to review its pull request, on the review page. As many items as the
|
|
15
|
+
* change calls for.
|
|
10
16
|
*/
|
|
11
17
|
export declare const descriptionOutput: z.ZodObject<{
|
|
12
18
|
changes: z.ZodArray<z.ZodString>;
|
|
@@ -45,7 +51,53 @@ export declare const descriptionOutput: z.ZodObject<{
|
|
|
45
51
|
caption: z.ZodString;
|
|
46
52
|
}, z.core.$strict>>;
|
|
47
53
|
noScreenshots: z.ZodOptional<z.ZodString>;
|
|
54
|
+
decisions: z.ZodArray<z.ZodObject<{
|
|
55
|
+
kind: z.ZodEnum<{
|
|
56
|
+
beyond_spec: "beyond_spec";
|
|
57
|
+
changed_test: "changed_test";
|
|
58
|
+
spec_reading: "spec_reading";
|
|
59
|
+
}>;
|
|
60
|
+
title: z.ZodString;
|
|
61
|
+
criterion: z.ZodOptional<z.ZodString>;
|
|
62
|
+
advice: z.ZodEnum<{
|
|
63
|
+
accept: "accept";
|
|
64
|
+
revise: "revise";
|
|
65
|
+
}>;
|
|
66
|
+
recommendation: z.ZodString;
|
|
67
|
+
why: z.ZodString;
|
|
68
|
+
source: z.ZodOptional<z.ZodString>;
|
|
69
|
+
file: z.ZodOptional<z.ZodString>;
|
|
70
|
+
visual: z.ZodOptional<z.ZodObject<{
|
|
71
|
+
kind: z.ZodEnum<{
|
|
72
|
+
diff: "diff";
|
|
73
|
+
list: "list";
|
|
74
|
+
reading: "reading";
|
|
75
|
+
screenshots: "screenshots";
|
|
76
|
+
}>;
|
|
77
|
+
spec: z.ZodOptional<z.ZodString>;
|
|
78
|
+
read: z.ZodOptional<z.ZodString>;
|
|
79
|
+
file: z.ZodOptional<z.ZodString>;
|
|
80
|
+
from: z.ZodOptional<z.ZodNumber>;
|
|
81
|
+
to: z.ZodOptional<z.ZodNumber>;
|
|
82
|
+
files: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
83
|
+
items: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
84
|
+
}, z.core.$strict>>;
|
|
85
|
+
}, z.core.$strict>>;
|
|
86
|
+
manualChecks: z.ZodArray<z.ZodObject<{
|
|
87
|
+
title: z.ZodString;
|
|
88
|
+
expect: z.ZodString;
|
|
89
|
+
why: z.ZodString;
|
|
90
|
+
}, z.core.$strict>>;
|
|
48
91
|
}, z.core.$strict>;
|
|
49
92
|
export type Description = z.output<typeof descriptionOutput>;
|
|
50
|
-
/** What
|
|
51
|
-
export
|
|
93
|
+
/** What a description is checked against: the run's change, criteria, interpretations and deviations. */
|
|
94
|
+
export interface Described {
|
|
95
|
+
files: ChangedFile[];
|
|
96
|
+
/** The change's whole diff. */
|
|
97
|
+
diff: string;
|
|
98
|
+
criteria: Pick<Criterion, "id">[];
|
|
99
|
+
interpretations: number;
|
|
100
|
+
deviations: number;
|
|
101
|
+
}
|
|
102
|
+
/** What is wrong with a description of this change, the screenshots' files aside. */
|
|
103
|
+
export declare function descriptionProblems(description: Description, described: Described): string[];
|
|
@@ -1,14 +1,39 @@
|
|
|
1
1
|
import { z } from "@clemrig/flow";
|
|
2
|
+
import { diffExcerpt } from "./diff.js";
|
|
2
3
|
const text = z.string().trim().min(1);
|
|
3
|
-
|
|
4
|
+
const line = z.number().int().min(1);
|
|
5
|
+
/** What the review page draws: a mermaid diagram; a diff or a text block shows a shape as it is. */
|
|
4
6
|
export const visualKinds = ["mermaid", "diff", "text"];
|
|
5
|
-
/** The image files
|
|
7
|
+
/** The image files the review page shows. */
|
|
6
8
|
const imageExtensions = [".png", ".jpg", ".jpeg", ".gif", ".webp"];
|
|
7
|
-
/**
|
|
9
|
+
/** The largest screenshot: the review page loads it whole, on a phone too. */
|
|
8
10
|
export const maxScreenshotBytes = 10 * 1024 * 1024;
|
|
11
|
+
/** What a decision departs from: the spec's scope, a test that existed, or the spec's letter. */
|
|
12
|
+
export const decisionKinds = [
|
|
13
|
+
"beyond_spec",
|
|
14
|
+
"changed_test",
|
|
15
|
+
"spec_reading",
|
|
16
|
+
];
|
|
17
|
+
/** What a decision's card shows: one of these, with its own fields. */
|
|
18
|
+
export const decisionVisualKinds = [
|
|
19
|
+
"reading",
|
|
20
|
+
"diff",
|
|
21
|
+
"screenshots",
|
|
22
|
+
"list",
|
|
23
|
+
];
|
|
24
|
+
/** The fields each kind of visual takes. */
|
|
25
|
+
const visualFields = {
|
|
26
|
+
reading: { spec: true, read: true },
|
|
27
|
+
diff: { file: true, from: true, to: true },
|
|
28
|
+
screenshots: { files: true },
|
|
29
|
+
list: { items: true },
|
|
30
|
+
};
|
|
31
|
+
/** The longest excerpt of the diff a card shows, in lines of the file. */
|
|
32
|
+
const maxExcerptLines = 60;
|
|
9
33
|
/**
|
|
10
34
|
* The describing agent's response: what a reader who forgot the issue needs
|
|
11
|
-
* to review its pull request. As many items as the
|
|
35
|
+
* to review its pull request, on the review page. As many items as the
|
|
36
|
+
* change calls for.
|
|
12
37
|
*/
|
|
13
38
|
export const descriptionOutput = z.strictObject({
|
|
14
39
|
/** Each change of behavior, as a user, a client or an operator observes it. */
|
|
@@ -41,12 +66,110 @@ export const descriptionOutput = z.strictObject({
|
|
|
41
66
|
screenshots: z.array(z.strictObject({ file: text, caption: text })),
|
|
42
67
|
/** Why there is no screenshot, when there is none. */
|
|
43
68
|
noScreenshots: text.optional(),
|
|
69
|
+
/**
|
|
70
|
+
* What a person decides before merging, one card each: every change beyond
|
|
71
|
+
* the spec, every existing test whose expectation changed, every reading of
|
|
72
|
+
* the spec beyond its letter.
|
|
73
|
+
*/
|
|
74
|
+
decisions: z.array(z.strictObject({
|
|
75
|
+
kind: z.enum(decisionKinds),
|
|
76
|
+
/** The decision, in a sentence. */
|
|
77
|
+
title: text,
|
|
78
|
+
/** The criterion it bears on. */
|
|
79
|
+
criterion: text.optional(),
|
|
80
|
+
/** The answer advised. */
|
|
81
|
+
advice: z.enum(["accept", "revise"]),
|
|
82
|
+
/** Why that answer, in a sentence or two. */
|
|
83
|
+
recommendation: text,
|
|
84
|
+
/** Why it needs a person. */
|
|
85
|
+
why: text,
|
|
86
|
+
/** The interpretation (`I1`…) or deviation (`D1`…) it comes from. */
|
|
87
|
+
source: z
|
|
88
|
+
.string()
|
|
89
|
+
.regex(/^[ID][1-9]\d*$/)
|
|
90
|
+
.optional(),
|
|
91
|
+
/** The changed file to open. */
|
|
92
|
+
file: text.optional(),
|
|
93
|
+
/** What its card shows; the fields of its kind only. */
|
|
94
|
+
visual: z
|
|
95
|
+
.strictObject({
|
|
96
|
+
kind: z.enum(decisionVisualKinds),
|
|
97
|
+
/** `reading`: the spec's words, and the plan's reading of them. */
|
|
98
|
+
spec: text.optional(),
|
|
99
|
+
read: text.optional(),
|
|
100
|
+
/** `diff`: a changed file and lines of its new version (of its old one, for a deleted file). */
|
|
101
|
+
file: text.optional(),
|
|
102
|
+
from: line.optional(),
|
|
103
|
+
to: line.optional(),
|
|
104
|
+
/** `screenshots`: screenshots of the description, by file. */
|
|
105
|
+
files: z.array(text).min(1).optional(),
|
|
106
|
+
/** `list`: a few short items. */
|
|
107
|
+
items: z.array(text).min(1).optional(),
|
|
108
|
+
})
|
|
109
|
+
.optional(),
|
|
110
|
+
})),
|
|
111
|
+
/** What only a person can check, which the run could not: on a real device, with real data. */
|
|
112
|
+
manualChecks: z.array(z.strictObject({
|
|
113
|
+
/** What to do, in a sentence. */
|
|
114
|
+
title: text,
|
|
115
|
+
/** What should happen. */
|
|
116
|
+
expect: text,
|
|
117
|
+
/** Why the run could not check it. */
|
|
118
|
+
why: text,
|
|
119
|
+
})),
|
|
44
120
|
});
|
|
45
|
-
/** What
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const
|
|
121
|
+
/** What is wrong with a decision's visual. */
|
|
122
|
+
function visualProblems(visual, where, { diff }, shots) {
|
|
123
|
+
const fields = Object.keys(visualFields[visual.kind]);
|
|
124
|
+
const given = Object.entries(visual).flatMap(([key, value]) => key !== "kind" && value !== undefined ? [key] : []);
|
|
125
|
+
const problems = [
|
|
126
|
+
...fields
|
|
127
|
+
.filter((field) => !given.includes(field))
|
|
128
|
+
.map((field) => `${where}: ${visual.kind} needs ${field}`),
|
|
129
|
+
...given
|
|
130
|
+
.filter((field) => !fields.includes(field))
|
|
131
|
+
.map((field) => `${where}: ${visual.kind} takes no ${field}`),
|
|
132
|
+
];
|
|
133
|
+
if (problems.length > 0)
|
|
134
|
+
return problems;
|
|
135
|
+
const { file, from, to, files = [] } = visual;
|
|
136
|
+
if (file !== undefined && from !== undefined && to !== undefined) {
|
|
137
|
+
if (to < from || to - from >= maxExcerptLines)
|
|
138
|
+
problems.push(`${where}: from ${from} to ${to}, give at most ${maxExcerptLines} lines, in order`);
|
|
139
|
+
else if (!diffExcerpt(diff, file, from, to))
|
|
140
|
+
problems.push(`${where}: the diff changes no line of ${file} from ${from} to ${to}`);
|
|
141
|
+
}
|
|
142
|
+
for (const shot of files)
|
|
143
|
+
if (!shots.includes(shot))
|
|
144
|
+
problems.push(`${where}: ${shot} is not one of the screenshots`);
|
|
145
|
+
return problems;
|
|
146
|
+
}
|
|
147
|
+
/** What is wrong with the decisions: their sources, criteria, files and visuals. */
|
|
148
|
+
function decisionProblems({ decisions, screenshots }, described, changed) {
|
|
149
|
+
const shots = screenshots.map(({ file }) => file);
|
|
150
|
+
const ids = described.criteria.map(({ id }) => id);
|
|
151
|
+
return decisions.flatMap((decision, index) => {
|
|
152
|
+
const where = `decisions[${index}]`;
|
|
153
|
+
const problems = [];
|
|
154
|
+
if (decision.criterion !== undefined && !ids.includes(decision.criterion))
|
|
155
|
+
problems.push(`${where}: ${decision.criterion} is not a criterion`);
|
|
156
|
+
if (decision.source !== undefined) {
|
|
157
|
+
const count = decision.source[0] === "I"
|
|
158
|
+
? described.interpretations
|
|
159
|
+
: described.deviations;
|
|
160
|
+
if (Number(decision.source.slice(1)) > count)
|
|
161
|
+
problems.push(`${where}: there is no ${decision.source}`);
|
|
162
|
+
}
|
|
163
|
+
if (decision.file !== undefined && !changed.has(decision.file))
|
|
164
|
+
problems.push(`${where}: ${decision.file} is not a changed file`);
|
|
165
|
+
if (decision.visual)
|
|
166
|
+
problems.push(...visualProblems(decision.visual, `${where}.visual`, described, shots));
|
|
167
|
+
return problems;
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/** What is wrong with a description of this change, the screenshots' files aside. */
|
|
171
|
+
export function descriptionProblems(description, described) {
|
|
172
|
+
const changed = new Set(described.files.map(({ path }) => path));
|
|
50
173
|
const problems = [];
|
|
51
174
|
const { start, groups } = description.guide;
|
|
52
175
|
if (!changed.has(start.file))
|
|
@@ -67,12 +190,10 @@ export function descriptionProblems(description, files) {
|
|
|
67
190
|
if (shots.indexOf(file) !== shots.lastIndexOf(file))
|
|
68
191
|
problems.push(`screenshots: ${file} is listed twice`);
|
|
69
192
|
}
|
|
70
|
-
if (shots.length > maxScreenshots)
|
|
71
|
-
problems.push(`screenshots: ${maxScreenshots} at most`);
|
|
72
193
|
if (shots.length === 0 && !description.noScreenshots)
|
|
73
194
|
problems.push("noScreenshots: say why there is no screenshot");
|
|
74
195
|
if (shots.length > 0 && description.noScreenshots)
|
|
75
196
|
problems.push("noScreenshots: give it only when there is no screenshot");
|
|
76
|
-
return problems;
|
|
197
|
+
return [...problems, ...decisionProblems(description, described, changed)];
|
|
77
198
|
}
|
|
78
199
|
//# sourceMappingURL=description.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"description.js","sourceRoot":"","sources":["../../src/domain/description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"description.js","sourceRoot":"","sources":["../../src/domain/description.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The excerpt of `path`'s diff that shows lines `from` to `to` of its new
|
|
3
|
+
* version (of its old one, for a deleted file), with the lines removed just
|
|
4
|
+
* before each of them; each line keeps its mark, the common indentation
|
|
5
|
+
* removed, and `…` separates two hunks. `undefined` when it changes none of
|
|
6
|
+
* these lines.
|
|
7
|
+
*/
|
|
8
|
+
export declare function diffExcerpt(diff: string, path: string, from: number, to: number): string | undefined;
|