@pmelab/gtd 45.2.0 → 46.0.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/.claude-plugin/plugin.json +1 -1
- package/README.md +9 -24
- package/dist/chunks/{reserved-FWrjy7zo.mjs → reserved-BENPy6IJ.mjs} +3 -28
- package/dist/chunks/{review-Dhl4vvDe.mjs → review-DcbgUwr7.mjs} +6 -17
- package/dist/chunks/{tail-B-Es6Hwj.mjs → tail-CDNMZ-2E.mjs} +1 -1
- package/dist/gtd.bundle.mjs +5 -7
- package/dist/testkit.mjs +5 -7
- package/dist/workflows/cleanup.mjs +2 -2
- package/dist/workflows/feature.mjs +3 -3
- package/dist/workflows/fix.mjs +2 -2
- package/dist/workflows/review.mjs +14 -4
- package/dist/workflows/rollout.mjs +1 -1
- package/dist/workflows.mjs +17 -228
- package/package.json +1 -6
- package/src/install/ConfigScaffold.ts +1 -2
- package/src/install/Install.ts +4 -5
- package/src/workflows/index.ts +1 -2
- package/src/workflows/review/review.ts +15 -3
- package/src/workflows/shared/lenses.ts +1 -5
- package/src/workflows/shared/options.ts +1 -21
- package/src/workflows/shared/review.ts +2 -19
- package/src/workflows/shared/skills.test.ts +0 -2
- package/src/workflows/shared/skills.ts +0 -3
- package/src/workflows/shared/text.ts +2 -5
- package/src/workflows/shared/vars.ts +0 -8
- package/dist/workflows/tests.mjs +0 -193
- package/src/workflows/tests/index.ts +0 -6
- package/src/workflows/tests/tests-options.feature +0 -52
- package/src/workflows/tests/tests.feature +0 -266
- package/src/workflows/tests/tests.test.ts +0 -51
- package/src/workflows/tests/tests.ts +0 -270
package/README.md
CHANGED
|
@@ -741,21 +741,6 @@ hand or leave it for cleanup.
|
|
|
741
741
|
|
|
742
742
|
The delivery model these workflows implement: [Delivery model](SDLC.md).
|
|
743
743
|
|
|
744
|
-
### Reviving skipped tests
|
|
745
|
-
|
|
746
|
-
The opt-in `tests` workflow revisits tests nobody runs. Export `tests` from
|
|
747
|
-
`@pmelab/gtd/workflows/tests` and run `gtd door tests` (or
|
|
748
|
-
`gtd --workflow tests`). On a green baseline an agent sweeps the whole
|
|
749
|
-
repository — every skipped test plus the `test-audit` skill's findings — into
|
|
750
|
-
`.gtd/TESTS.md`, one section per test file. Each file is then rewritten in its
|
|
751
|
-
own turn until nothing in it is skipped and the suite is green. A test the agent
|
|
752
|
-
calls obsolete stays skipped and is proposed for deletion: the review in
|
|
753
|
-
`.gtd/REVIEW.md` gives each proposal `delete it`, `keep it skipped` or
|
|
754
|
-
`_your answer_`, and refuses sign-off until each holds one tick. An agent turn
|
|
755
|
-
that deletes a test file is refused. Skip detection is a factory option with
|
|
756
|
-
JavaScript/TypeScript and cucumber defaults; see
|
|
757
|
-
[Reviving skipped tests](docs/configuration.md#reviving-skipped-tests).
|
|
758
|
-
|
|
759
744
|
## Checking a range for stray files
|
|
760
745
|
|
|
761
746
|
```sh
|
|
@@ -894,15 +879,15 @@ approvals as `approvals` (`[]` when none), and `gtd history show` prints each as
|
|
|
894
879
|
gtd is one package, `@pmelab/gtd`, and every entrypoint shares its version and
|
|
895
880
|
[SemVer promise](https://github.com/pmelab/gtd/blob/main/COMPATIBILITY.md).
|
|
896
881
|
|
|
897
|
-
| Import
|
|
898
|
-
|
|
|
899
|
-
| `@pmelab/gtd/flows`
|
|
900
|
-
| `@pmelab/gtd/wire`
|
|
901
|
-
| `@pmelab/gtd/steering`
|
|
902
|
-
| `@pmelab/gtd/workflow-kit`
|
|
903
|
-
| `@pmelab/gtd/workflows`
|
|
904
|
-
| `@pmelab/gtd/workflows/feature`, `@pmelab/gtd/workflows/review`, `@pmelab/gtd/workflows/fix`, `@pmelab/gtd/workflows/rollout`, `@pmelab/gtd/workflows/cleanup
|
|
905
|
-
| `@pmelab/gtd/testkit`
|
|
882
|
+
| Import | What it is |
|
|
883
|
+
| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
884
|
+
| `@pmelab/gtd/flows` | The flow API a workflow is written in: the steps (`agent`, `human`, `run`, …), `scope` and `slice` (named spans of a process), workflow factories, `defineConfig` and `FLOWS_PROTOCOL`. |
|
|
885
|
+
| `@pmelab/gtd/wire` | The driver protocol: `WIRE_SCHEMA`, the exit codes and the types of every `--json` document. |
|
|
886
|
+
| `@pmelab/gtd/steering` | The steering-file formats (`qa`, `review`) and the review-note readers. |
|
|
887
|
+
| `@pmelab/gtd/workflow-kit` | Policy-free building blocks to compose a workflow from: health checks, quality laps, scenario freezing, review tails. |
|
|
888
|
+
| `@pmelab/gtd/workflows` | Every shipped workflow and all its parts in one module; also resolvable as `@pmelab/gtd/workflow`. |
|
|
889
|
+
| `@pmelab/gtd/workflows/feature`, `@pmelab/gtd/workflows/review`, `@pmelab/gtd/workflows/fix`, `@pmelab/gtd/workflows/rollout`, `@pmelab/gtd/workflows/cleanup` | One shipped workflow each: its factory as the default export, its parts, and the reserved exports (`defaults`, `envDefaults`, `summary`, `steering`, `skills`, `access`). `gtd install` imports these. |
|
|
890
|
+
| `@pmelab/gtd/testkit` | Runs any workflow against the real engine, in an in-memory or a real repository. Needs `vitest` and `quickpickle`, optional peer dependencies. |
|
|
906
891
|
|
|
907
892
|
Types come from the TypeScript sources the package ships. Configs never need an
|
|
908
893
|
install for any of these but `./testkit`: gtd resolves a `gtd.config.ts`'s
|
|
@@ -226,11 +226,6 @@ const testFileGlobs = [
|
|
|
226
226
|
"**/__tests__/**"
|
|
227
227
|
];
|
|
228
228
|
const defaultFlagRegistry = "src/flags/index.ts";
|
|
229
|
-
/** The `tests` workflow's own process settings: where it looks for skipped tests, and how a skip reads. */
|
|
230
|
-
const testsDefaults = {
|
|
231
|
-
testFiles: testFileGlobs.join(", "),
|
|
232
|
-
skipPattern: "^\\s*(?:(?:describe|context|suite|it|test|specify)\\.(?:skip|todo)\\b|x(?:describe|context|it|test|specify)\\s*\\(|(?:@\\S+\\s+)*@(?:skip|ignore)(?:\\s|$))"
|
|
233
|
-
};
|
|
234
229
|
/** Process settings. */
|
|
235
230
|
const defaults = {
|
|
236
231
|
reviewBase: "",
|
|
@@ -563,7 +558,7 @@ const composedReview = (base, report) => {
|
|
|
563
558
|
return name;
|
|
564
559
|
};
|
|
565
560
|
const chunk = (title, body) => `## ${title}\n\n${body.trim()}`;
|
|
566
|
-
const answerBoxes =
|
|
561
|
+
const answerBoxes = `${ANSWER_LEAD}\n\n- [ ] ${ANSWER_FIX}\n- [ ] ${ANSWER_WONT_FIX}\n- [ ] ${FREE_TEXT_PLACEHOLDER}`;
|
|
567
562
|
const conflicts = (report.standards?.undecided ?? []).map((c) => chunk(unique(conflictTitle(c)), conflictBody(c)));
|
|
568
563
|
const added = report.standards?.added ?? [];
|
|
569
564
|
const notes = report.notes.map((n) => ({
|
|
@@ -575,7 +570,7 @@ const composedReview = (base, report) => {
|
|
|
575
570
|
...report.nitFix === void 0 ? [] : [chunk("Fixed from your notes", `Your nits and fix-as-suggested notes were worked on in ${short(report.nitFix)}; the notes you answered are left out — check the diff.`)],
|
|
576
571
|
...weakened.length === 0 ? [] : [chunk("Weakened scenarios", `These scenarios lost an assertion the review base had:\n\n${weakened.join("\n")}`)],
|
|
577
572
|
...conflicts,
|
|
578
|
-
...notes.map((n) => chunk(n.title, `${n.unresolved === true ? `_The fixer left this unresolved._\n\n${unboxed(n.body)}` : n.unclear === true ? `_A fix turn removed this while renaming another finding — check whether it was fixed._\n\n${unboxed(n.body)}` : unboxed(n.body) || "_No detail given._"}\n\n${answerBoxes
|
|
573
|
+
...notes.map((n) => chunk(n.title, `${n.unresolved === true ? `_The fixer left this unresolved._\n\n${unboxed(n.body)}` : n.unclear === true ? `_A fix turn removed this while renaming another finding — check whether it was fixed._\n\n${unboxed(n.body)}` : unboxed(n.body) || "_No detail given._"}\n\n${answerBoxes}`)),
|
|
579
574
|
...report.fixed.length === 0 ? [] : [chunk("Fixed automatically", report.fixed.map((f) => `- ${f.title} (${short(f.commit)})`).join("\n"))],
|
|
580
575
|
...added.length === 0 ? [] : [chunk("Standards added", `Learned from your answers and kept in \`${STANDARDS}\`:\n\n${added.map((s) => `- ${s}`).join("\n")}`)],
|
|
581
576
|
...report.noise.length === 0 ? [] : [chunk("Dropped as noise", report.noise.map((f) => `- ${f.title} (p=${f.p})`).join("\n"))]
|
|
@@ -1944,24 +1939,6 @@ const flagShipped = (flow, name) => defineWorkflow(standardSchemaV1(FlagOptions,
|
|
|
1944
1939
|
base: void 0
|
|
1945
1940
|
};
|
|
1946
1941
|
});
|
|
1947
|
-
const TestsOptions = Struct({
|
|
1948
|
-
...ShippedOptions.fields,
|
|
1949
|
-
testFiles: setting,
|
|
1950
|
-
skipPattern: setting
|
|
1951
|
-
});
|
|
1952
|
-
const testsShipped = (flow) => defineWorkflow(standardSchemaV1(TestsOptions, {
|
|
1953
|
-
onExcessProperty: "error",
|
|
1954
|
-
errors: "all"
|
|
1955
|
-
}), ({ contextLimit, ...options }) => ({
|
|
1956
|
-
flow: limited(flow, contextLimit),
|
|
1957
|
-
defaults: over({
|
|
1958
|
-
...defaults,
|
|
1959
|
-
...testsDefaults
|
|
1960
|
-
}, options),
|
|
1961
|
-
envDefaults: over(envDefaults, options),
|
|
1962
|
-
doors: { tests: {} },
|
|
1963
|
-
base: void 0
|
|
1964
|
-
}));
|
|
1965
1942
|
//#endregion
|
|
1966
1943
|
//#region src/workflows/shared/skills.ts
|
|
1967
1944
|
const skills = (vars) => {
|
|
@@ -1977,8 +1954,6 @@ const skills = (vars) => {
|
|
|
1977
1954
|
design: ["spec-driven-development", "planning-and-task-breakdown"],
|
|
1978
1955
|
notes: ["incremental-implementation", "code-simplification"],
|
|
1979
1956
|
feedback: ["test-driven-development", "incremental-implementation"],
|
|
1980
|
-
tests: ["test-audit", "test-driven-development"],
|
|
1981
|
-
"tests.health": ["debugging-and-error-recovery"],
|
|
1982
1957
|
...build,
|
|
1983
1958
|
...Object.fromEntries(Object.entries(build).map(([name, list]) => [`refactor.${name}`, list])),
|
|
1984
1959
|
refactor: ["ponytail"],
|
|
@@ -2011,4 +1986,4 @@ const steering = {
|
|
|
2011
1986
|
[REVIEW]: "review"
|
|
2012
1987
|
};
|
|
2013
1988
|
//#endregion
|
|
2014
|
-
export {
|
|
1989
|
+
export { naiveApplyFailure as $, reviewMissing as A, conflictTitle as At, coverageMessage as B, requireFlag as Bt, coder as C, unwindFailure as Ct, fixQuality as D, STANDARDS as Dt, fixNits as E, testFileGlobs as Et, buildReviewTriageMessage as F, standardKey as Ft, designSystem as G, coveringPrompt as H, builderSystem as I, flagMentions as It, fixReviewNotesPrompt as J, designTriagePrompt as K, clearCriteriaMessage as L, flagReferences as Lt, reviewing as M, oneLine as Mt, agentWithSkills as N, parseStandards as Nt, fixRisks as O, conflictBody as Ot, buildReviewCollectingPrompt as P, renderStandards as Pt, implementFixPrompt as Q, clearCriteriaQuestion as R, flipProblems as Rt, awaitReview as S, unwindFailedMessage as St, fixCheck as T, envDefaults as Tt, criterionLine as U, coverageQuestion as V, designGateAnswerMessage as W, idleMessage as X, handOffAwaitReviewMessage as Y, implementBuildingPrompt as Z, REFACTOR_NOTE as _, seamByHandMessage as _t, flagModeOn as a, qualityUnresolvedMessage as at, SLICES as b, startGateBlockedMessage as bt, baseline as c, refactorFixPrompt as ct, guarded as d, reviewEditNotesCapture as dt, naivePassPrompt as et, healthy as f, reviewEditsCapture as ft, REFACTOR as g, reviewerSystem as gt, QUALITY as h, reviewNotesCapture as ht, skills as i, qualityTriageMessage as it, reviewQuality as j, isConflictTitle as jt, planner as k, conflictFor as kt, escalation as l, refactorNotePrompt as lt, HANDOFF as m, reviewGateBlockedMessage as mt, summary as n, oversizedMessage as nt, flagShipped as o, refactorBuildingPrompt as ot, FEEDBACK as p, reviewFeedbackFixPrompt as pt, finisherSystem as q, access as r, qualityFindingsFile as rt, shipped as s, refactorDroppedRefusal as st, steering as t, normaliseCriteriaScript as tt, gate as u, refactorRules as ut, REQUIREMENTS as v, seamSteerMessage as vt, collecting as w, defaults as wt, answerReviewQuestions as x, uncoveredMessage as xt, REVIEW as y, slicingPrompt as yt, composedReview as z, registryEntry as zt };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { answered, changesSince, head, judge, numeric, read,
|
|
1
|
+
import { answered, changesSince, head, judge, numeric, read, requireRevert, restoreScript, run, showScript, vars, writeScript } from "../flows.mjs";
|
|
2
2
|
import { removedAssertions, review } from "../workflow-kit.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { i as isOptionalObject, n as closeReview, o as tail, s as NO_FINDINGS } from "./tail-
|
|
3
|
+
import { A as reviewMissing, At as conflictTitle, Dt as STANDARDS, E as fixNits, F as buildReviewTriageMessage, Ft as standardKey, Mt as oneLine, Nt as parseStandards, O as fixRisks, Ot as conflictBody, Pt as renderStandards, S as awaitReview, T as fixCheck, d as guarded, dt as reviewEditNotesCapture, f as healthy, ft as reviewEditsCapture, h as QUALITY, ht as reviewNotesCapture, jt as isConflictTitle, kt as conflictFor, w as collecting, x as answerReviewQuestions, y as REVIEW, z as composedReview } from "./reserved-BENPy6IJ.mjs";
|
|
4
|
+
import { i as isOptionalObject, n as closeReview, o as tail, s as NO_FINDINGS } from "./tail-CDNMZ-2E.mjs";
|
|
5
5
|
//#region src/workflows/shared/learn.ts
|
|
6
6
|
const SUMMARY_MAX = 200;
|
|
7
7
|
const BANNER = /^_(?:The fixer left this unresolved\.|A fix turn removed this while renaming another finding — check whether it was fixed\.|No detail given\.)_\s*/;
|
|
@@ -303,7 +303,7 @@ const composing = (base, report, carry, nitFix, answered = /* @__PURE__ */ new S
|
|
|
303
303
|
* praise dropped.
|
|
304
304
|
*/
|
|
305
305
|
const humanReview = (base, escalations = { rounds: 0 }, options = {}) => {
|
|
306
|
-
const { guard, guardRests, fixAccess, rules
|
|
306
|
+
const { guard, guardRests, fixAccess, rules } = options;
|
|
307
307
|
const feedback = options.feedback ?? {
|
|
308
308
|
file: ".gtd/REQUIREMENTS.md",
|
|
309
309
|
collecting,
|
|
@@ -328,7 +328,7 @@ const humanReview = (base, escalations = { rounds: 0 }, options = {}) => {
|
|
|
328
328
|
guardRests,
|
|
329
329
|
rules
|
|
330
330
|
}),
|
|
331
|
-
awaitReview
|
|
331
|
+
awaitReview,
|
|
332
332
|
reviewMissing,
|
|
333
333
|
collecting: feedback.collecting,
|
|
334
334
|
triage: triage(severities),
|
|
@@ -388,17 +388,6 @@ const callForm = (first, second, [third, fourth, ...extra]) => {
|
|
|
388
388
|
if (typeof second === "string") return legacyForm(first, second, third, fourth);
|
|
389
389
|
if (typeof first === "string") return currentForm(first, second, third, fourth);
|
|
390
390
|
};
|
|
391
|
-
/** Build the concerns a review round collected into `.gtd/REQUIREMENTS.md`, then remove it. */
|
|
392
|
-
const fixFeedback = async () => {
|
|
393
|
-
await agentWithSkills("feedback.fixing", reviewFeedbackFixPrompt(), {
|
|
394
|
-
label: "Fixing your review feedback",
|
|
395
|
-
file: REQUIREMENTS,
|
|
396
|
-
model: coder(),
|
|
397
|
-
system: finisherSystem(),
|
|
398
|
-
allowEmpty: true
|
|
399
|
-
});
|
|
400
|
-
await run("feedback.closing", removeScript([REQUIREMENTS]), { label: "Closing the feedback" });
|
|
401
|
-
};
|
|
402
391
|
/**
|
|
403
392
|
* Undo the human's review-round code edits. A path changed since the human
|
|
404
393
|
* left it is not overwritten; requireRevert names it instead.
|
|
@@ -416,4 +405,4 @@ const reUnwind = async (feedback) => {
|
|
|
416
405
|
requireRevert(edited, base);
|
|
417
406
|
};
|
|
418
407
|
//#endregion
|
|
419
|
-
export { reUnwind as
|
|
408
|
+
export { reUnwind as i, humanReview as n, isCode as r, buildTail as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { answered, head, judge, mark, numeric, read, refuse, removeScript, run, scope, sectionBodies, showScript, vars, writeScript } from "../flows.mjs";
|
|
2
2
|
import { fixFindings, lensEntriesOf, lensOf, qualityLap as qualityLap$1, reviewToHandOff } from "../workflow-kit.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { A as reviewMissing, D as fixQuality, M as reviewing, O as fixRisks, S as awaitReview, T as fixCheck, Y as handOffAwaitReviewMessage, d as guarded, f as healthy, h as QUALITY, it as qualityTriageMessage, j as reviewQuality, l as escalation, rt as qualityFindingsFile, y as REVIEW } from "./reserved-BENPy6IJ.mjs";
|
|
4
4
|
//#region src/workflows/shared/lenses.ts
|
|
5
5
|
const NO_FINDINGS = {
|
|
6
6
|
notes: [],
|
package/dist/gtd.bundle.mjs
CHANGED
|
@@ -21606,11 +21606,10 @@ rather than starting the review; \`gtd-door fix\` on a GREEN suite is a no-op
|
|
|
21606
21606
|
straight back to \`idle\` — the exec'd \`gtd-build\` exits immediately on it.
|
|
21607
21607
|
\`gtd doors\` lists the doors a repository offers (those of the workflows its
|
|
21608
21608
|
config exports — the bundled \`fix\` and \`review [base]\`, plus the opt-in
|
|
21609
|
-
\`rollout <flag>\` (turn a release flag default-on)
|
|
21610
|
-
(remove it)
|
|
21611
|
-
|
|
21612
|
-
\`@pmelab/gtd/workflows/cleanup\`
|
|
21613
|
-
\`@pmelab/gtd/workflows/tests\` — plus any it declares). Refuses with
|
|
21609
|
+
\`rollout <flag>\` (turn a release flag default-on) and \`cleanup <flag>\`
|
|
21610
|
+
(remove it), which a config adds by exporting \`rollout\` from
|
|
21611
|
+
\`@pmelab/gtd/workflows/rollout\` and \`cleanup\` from
|
|
21612
|
+
\`@pmelab/gtd/workflows/cleanup\` — plus any it declares). Refuses with
|
|
21614
21613
|
\`usage: gtd-door <name> [args...]\` on stderr and exit \`2\` when the name is
|
|
21615
21614
|
missing — nothing was even attempted. Default path: \`~/.local/bin/gtd-door\`.
|
|
21616
21615
|
|
|
@@ -21723,8 +21722,7 @@ const CONFIG_SCAFFOLD = `// The workflows gtd runs here: gtd's shipped feature,
|
|
|
21723
21722
|
// its own doors: \`gtd door review [base]\` and \`gtd door fix\`. Export \`rollout\`
|
|
21724
21723
|
// from \`@pmelab/gtd/workflows/rollout\` and \`cleanup\` from
|
|
21725
21724
|
// \`@pmelab/gtd/workflows/cleanup\` to add \`gtd door rollout <flag>\` and
|
|
21726
|
-
// \`gtd door cleanup <flag
|
|
21727
|
-
// to add \`gtd door tests\`.
|
|
21725
|
+
// \`gtd door cleanup <flag>\`.
|
|
21728
21726
|
export {
|
|
21729
21727
|
feature as default,
|
|
21730
21728
|
feature,
|
package/dist/testkit.mjs
CHANGED
|
@@ -6643,11 +6643,10 @@ rather than starting the review; \`gtd-door fix\` on a GREEN suite is a no-op
|
|
|
6643
6643
|
straight back to \`idle\` — the exec'd \`gtd-build\` exits immediately on it.
|
|
6644
6644
|
\`gtd doors\` lists the doors a repository offers (those of the workflows its
|
|
6645
6645
|
config exports — the bundled \`fix\` and \`review [base]\`, plus the opt-in
|
|
6646
|
-
\`rollout <flag>\` (turn a release flag default-on)
|
|
6647
|
-
(remove it)
|
|
6648
|
-
|
|
6649
|
-
\`@pmelab/gtd/workflows/cleanup\`
|
|
6650
|
-
\`@pmelab/gtd/workflows/tests\` — plus any it declares). Refuses with
|
|
6646
|
+
\`rollout <flag>\` (turn a release flag default-on) and \`cleanup <flag>\`
|
|
6647
|
+
(remove it), which a config adds by exporting \`rollout\` from
|
|
6648
|
+
\`@pmelab/gtd/workflows/rollout\` and \`cleanup\` from
|
|
6649
|
+
\`@pmelab/gtd/workflows/cleanup\` — plus any it declares). Refuses with
|
|
6651
6650
|
\`usage: gtd-door <name> [args...]\` on stderr and exit \`2\` when the name is
|
|
6652
6651
|
missing — nothing was even attempted. Default path: \`~/.local/bin/gtd-door\`.
|
|
6653
6652
|
|
|
@@ -6760,8 +6759,7 @@ const CONFIG_SCAFFOLD = `// The workflows gtd runs here: gtd's shipped feature,
|
|
|
6760
6759
|
// its own doors: \`gtd door review [base]\` and \`gtd door fix\`. Export \`rollout\`
|
|
6761
6760
|
// from \`@pmelab/gtd/workflows/rollout\` and \`cleanup\` from
|
|
6762
6761
|
// \`@pmelab/gtd/workflows/cleanup\` to add \`gtd door rollout <flag>\` and
|
|
6763
|
-
// \`gtd door cleanup <flag
|
|
6764
|
-
// to add \`gtd door tests\`.
|
|
6762
|
+
// \`gtd door cleanup <flag>\`.
|
|
6765
6763
|
export {
|
|
6766
6764
|
feature as default,
|
|
6767
6765
|
feature,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { agent, changes, glob, read, refuse, scope, start, vars } from "../flows.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { a as refusePendingHandOff, r as handOffTail } from "../chunks/tail-
|
|
2
|
+
import { Bt as requireFlag, C as coder, Lt as flagReferences, Tt as envDefaults, i as skills, n as summary, o as flagShipped, r as access, t as steering, wt as defaults, zt as registryEntry } from "../chunks/reserved-BENPy6IJ.mjs";
|
|
3
|
+
import { a as refusePendingHandOff, r as handOffTail } from "../chunks/tail-CDNMZ-2E.mjs";
|
|
4
4
|
//#region src/workflows/cleanup/cleanup.ts
|
|
5
5
|
const removingPrompt = (name, registry) => `Clean up the release flag "${name}", which is default-on: delete its entry in ${registry}, and remove every \`GTD_FLAG_${name.toUpperCase()}\` check from the shipped sources. Keep the flag-on path; delete code only the off path reached, including tests that pin the off path.`;
|
|
6
6
|
const cleanupFlow = async () => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { agent, answered, applyScript, changes, changesSince, check, codeChanges, env, hasThreadFor, head, human, judge, judgeDiffShape, kept, mark, matches, quote, read, refuse, removeScript, requireAnswers, requireProgress, requireReplies, requireThreadsClosed, revertScript, run, scope, slice, start, vars, wrote } from "../flows.mjs";
|
|
2
2
|
import { lensEntriesOf } from "../workflow-kit.mjs";
|
|
3
|
-
import { $ as
|
|
4
|
-
import { a as refusePendingHandOff, o as tail } from "../chunks/tail-
|
|
5
|
-
import {
|
|
3
|
+
import { $ as naiveApplyFailure, B as coverageMessage, C as coder, Ct as unwindFailure, E as fixNits, Et as testFileGlobs, G as designSystem, H as coveringPrompt, I as builderSystem, K as designTriagePrompt, L as clearCriteriaMessage, N as agentWithSkills, P as buildReviewCollectingPrompt, Q as implementFixPrompt, R as clearCriteriaQuestion, St as unwindFailedMessage, T as fixCheck, Tt as envDefaults, U as criterionLine, V as coverageQuestion, W as designGateAnswerMessage, X as idleMessage, Z as implementBuildingPrompt, _ as REFACTOR_NOTE, _t as seamByHandMessage, a as flagModeOn, at as qualityUnresolvedMessage, b as SLICES, bt as startGateBlockedMessage, ct as refactorFixPrompt, et as naivePassPrompt, f as healthy, g as REFACTOR, gt as reviewerSystem, h as QUALITY, i as skills, k as planner, lt as refactorNotePrompt, m as HANDOFF, n as summary, nt as oversizedMessage, ot as refactorBuildingPrompt, p as FEEDBACK, r as access, s as shipped, st as refactorDroppedRefusal, t as steering, tt as normaliseCriteriaScript, u as gate, ut as refactorRules, v as REQUIREMENTS, vt as seamSteerMessage, w as collecting, wt as defaults, x as answerReviewQuestions, xt as uncoveredMessage, yt as slicingPrompt } from "../chunks/reserved-BENPy6IJ.mjs";
|
|
4
|
+
import { a as refusePendingHandOff, o as tail } from "../chunks/tail-CDNMZ-2E.mjs";
|
|
5
|
+
import { i as reUnwind, n as humanReview, r as isCode$1, t as buildTail } from "../chunks/review-DcbgUwr7.mjs";
|
|
6
6
|
import { posix } from "node:path";
|
|
7
7
|
//#region src/workflows/shared/fences.ts
|
|
8
8
|
const markFenced = (text) => {
|
package/dist/workflows/fix.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { read, refuse, removeScript, run, scope, start } from "../flows.mjs";
|
|
2
2
|
import { g as reviewRisks, h as reviewNotes } from "../chunks/steering-D7hWeMgE.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { r as handOffTail, t as REVIEW_ORIG } from "../chunks/tail-
|
|
3
|
+
import { C as coder, J as fixReviewNotesPrompt, N as agentWithSkills, Tt as envDefaults, c as baseline, i as skills, n as summary, q as finisherSystem, r as access, s as shipped, t as steering, wt as defaults, y as REVIEW } from "../chunks/reserved-BENPy6IJ.mjs";
|
|
4
|
+
import { r as handOffTail, t as REVIEW_ORIG } from "../chunks/tail-CDNMZ-2E.mjs";
|
|
5
5
|
//#region src/workflows/fix/fix.ts
|
|
6
6
|
/**
|
|
7
7
|
* Fix every note a human left in a handed-off `.gtd/REVIEW.md` and every
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
import { read, refuse, start } from "../flows.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { a as refusePendingHandOff } from "../chunks/tail-
|
|
4
|
-
import {
|
|
1
|
+
import { read, refuse, removeScript, run, start } from "../flows.mjs";
|
|
2
|
+
import { C as coder, N as agentWithSkills, Tt as envDefaults, i as skills, mt as reviewGateBlockedMessage, n as summary, pt as reviewFeedbackFixPrompt, q as finisherSystem, r as access, s as shipped, t as steering, u as gate, v as REQUIREMENTS, wt as defaults } from "../chunks/reserved-BENPy6IJ.mjs";
|
|
3
|
+
import { a as refusePendingHandOff } from "../chunks/tail-CDNMZ-2E.mjs";
|
|
4
|
+
import { i as reUnwind, t as buildTail } from "../chunks/review-DcbgUwr7.mjs";
|
|
5
5
|
//#region src/workflows/review/review.ts
|
|
6
|
+
const fixFeedback = async () => {
|
|
7
|
+
await agentWithSkills("feedback.fixing", reviewFeedbackFixPrompt(), {
|
|
8
|
+
label: "Fixing your review feedback",
|
|
9
|
+
file: REQUIREMENTS,
|
|
10
|
+
model: coder(),
|
|
11
|
+
system: finisherSystem(),
|
|
12
|
+
allowEmpty: true
|
|
13
|
+
});
|
|
14
|
+
await run("feedback.closing", removeScript([REQUIREMENTS]), { label: "Closing the feedback" });
|
|
15
|
+
};
|
|
6
16
|
/**
|
|
7
17
|
* The feature's review of everything since `reviewBase` — a green gate, the
|
|
8
18
|
* triaged quality lap, then the human review — with no design phase: a
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { agent, changesSince, glob, head, mark, read, refuse, removeScript, run, scope, vars } from "../flows.mjs";
|
|
2
|
-
import { Bt as
|
|
2
|
+
import { Bt as requireFlag, C as coder, It as flagMentions, Rt as flipProblems, Tt as envDefaults, i as skills, n as summary, o as flagShipped, p as FEEDBACK, r as access, t as steering, u as gate, wt as defaults } from "../chunks/reserved-BENPy6IJ.mjs";
|
|
3
3
|
//#region src/workflows/rollout/rollout.ts
|
|
4
4
|
const flippingPrompt = (name, registry) => `Roll out the release flag "${name}": in ${registry}, set \`defaultOn: true\` on its entry. Change nothing else — no other entry, no other field, no other file, no comments.`;
|
|
5
5
|
const suiteBlockedMessage = () => "The suite is red after the rollout. Fix it by hand — a rollout may only touch the flag's registry entry — then land.";
|