@pmelab/gtd 32.1.0 → 34.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 +66 -53
- package/dist/chunks/{reserved-2fV0mj14.mjs → reserved-BcJgt5_R.mjs} +79 -12
- package/dist/chunks/{tail-BynhCfuv.mjs → tail-CM_fa93v.mjs} +1 -1
- package/dist/testkit.mjs +2 -2
- package/dist/workflows/cleanup.mjs +2 -2
- package/dist/workflows/feature.mjs +174 -40
- package/dist/workflows/fix.mjs +2 -2
- package/dist/workflows/review.mjs +2 -2
- package/dist/workflows/rollout.mjs +1 -1
- package/dist/workflows.mjs +249 -48
- package/package.json +1 -1
- package/skills/authoring/SKILL.md +2 -2
- package/src/testkit/steps.ts +4 -0
- package/src/workflows/feature/acceptance-criteria.feature +8 -0
- package/src/workflows/feature/fast-path.feature +11 -35
- package/src/workflows/feature/feature.test.ts +9 -100
- package/src/workflows/feature/feature.ts +29 -16
- package/src/workflows/feature/flag-mode.feature +2 -91
- package/src/workflows/feature/naive-acceptance.feature +140 -0
- package/src/workflows/feature/one-step-land.feature +11 -34
- package/src/workflows/feature/quality-unresolved.feature +96 -0
- package/src/workflows/feature/refactor-absorbs.feature +17 -25
- package/src/workflows/feature/refactor-first.feature +11 -35
- package/src/workflows/feature/refactor-lens-models.feature +6 -1
- package/src/workflows/feature/refactor-review.feature +67 -360
- package/src/workflows/feature/refactor.ts +4 -3
- package/src/workflows/feature/risk-tier.feature +10 -0
- package/src/workflows/feature/seam-rejection.feature +20 -37
- package/src/workflows/feature/seam.feature +66 -113
- package/src/workflows/feature/seam.test.ts +173 -3
- package/src/workflows/feature/seam.ts +196 -31
- package/src/workflows/review/review-door.feature +108 -0
- package/src/workflows/shared/tail.ts +2 -2
- package/src/workflows/shared/text.test.ts +40 -0
- package/src/workflows/shared/text.ts +110 -16
package/README.md
CHANGED
|
@@ -405,9 +405,10 @@ phone UI does not show them).
|
|
|
405
405
|
|
|
406
406
|
### The workflow it ships with
|
|
407
407
|
|
|
408
|
-
One built-in workflow drives all of that. From where you sit, it has
|
|
408
|
+
One built-in workflow drives all of that. From where you sit, it has three
|
|
409
409
|
moments — everything between them runs without you, with the judged exceptions
|
|
410
|
-
noted in
|
|
410
|
+
noted in step 3 below — plus a fourth, review, only on `refactor-first` or when
|
|
411
|
+
you open the `review` door.
|
|
411
412
|
|
|
412
413
|
1. **You sketch.** Change anything, or write the idea into `.gtd/TODO.md`. Rough
|
|
413
414
|
is fine; it is treated as a sketch, not as work.
|
|
@@ -431,13 +432,15 @@ noted in steps 3 and 4 below.
|
|
|
431
432
|
[the naive pass](#the-naive-pass) below; with [flag mode](#the-naive-pass)
|
|
432
433
|
off, neither runs). Then the change is built test-first, checked against the
|
|
433
434
|
full suite (`testCommand`) and fixed until it passes — so keep that suite
|
|
434
|
-
fast; gtd has no lighter one. Scenario wording is not frozen:
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
435
|
+
fast; gtd has no lighter one. Scenario wording is not frozen: a review's
|
|
436
|
+
`## Scenarios` chunk marks any assertion an existing scenario lost as
|
|
437
|
+
`Weakened:` — **risk: `feature` has no review, so a build turn that weakens a
|
|
438
|
+
scenario reaches `idle` unflagged unless you open the `review` door.** After
|
|
439
|
+
the build the quality lap runs, and the process ends: the feature workflow
|
|
440
|
+
has no human review of the finished change. Two points along the process (one
|
|
441
|
+
with flag mode off) are judged rather than always asking you outright — each
|
|
442
|
+
stops and hands you a verdict to make (`gtd judge answer`, or land with a
|
|
443
|
+
clean tree to accept the conservative default, which never skips work;
|
|
441
444
|
`gtd judge run --provider fixed --answers <path>` — or the
|
|
442
445
|
`GTD_JUDGE_ANSWERS` env var, inline JSON — answers one from a file, piped
|
|
443
446
|
between `gtd judge --json` and `gtd judge answer`;
|
|
@@ -456,8 +459,6 @@ noted in steps 3 and 4 below.
|
|
|
456
459
|
or get rejected and retried?
|
|
457
460
|
- Every red round after the first: was the failure identical, new, or
|
|
458
461
|
progress?
|
|
459
|
-
- After you review: is each of your notes an edit, a question, a nit or
|
|
460
|
-
praise?
|
|
461
462
|
|
|
462
463
|
gtd itself never calls a judge: `gtd loop`, the Claude Code mod and the
|
|
463
464
|
reference driver answer these through `gtd judge run` (auto selection: jev
|
|
@@ -469,18 +470,22 @@ noted in steps 3 and 4 below.
|
|
|
469
470
|
and skip a gate unattended.**
|
|
470
471
|
|
|
471
472
|
Once the change is built, the whole change goes through a qualitative review
|
|
472
|
-
lap
|
|
473
|
-
`
|
|
474
|
-
`
|
|
475
|
-
`
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
473
|
+
lap: six lenses, one turn each, in order — `correctness`, `owasp-security`,
|
|
474
|
+
`ponytail-review`, `test-audit`, `conventions`, `spec-challenge`.
|
|
475
|
+
`correctness`, `owasp-security` and `spec-challenge` run on the planner model
|
|
476
|
+
(`smart`), the other three on the coder model (`base`); a `qualityReviews`
|
|
477
|
+
entry `<lens>=<model>` picks a lens's own. Each traces the change from its
|
|
478
|
+
own angle and records every finding, blocking or not; one fix turn then fixes
|
|
479
|
+
ALL of them once, with no re-review after the fix. A clean turn means
|
|
480
|
+
approval only when that lens found nothing at all. This lap is where code
|
|
481
|
+
quality is looked at, and every round pays for it. It is the last look the
|
|
482
|
+
feature workflow takes: the process ends at `idle` once it is clean (and the
|
|
483
|
+
suite green), with no review rest — **risk: nothing re-reads the code the
|
|
484
|
+
single fix turn writes; only the suite gates it.** Findings the fix cap
|
|
485
|
+
leaves in `.gtd/QUALITY.md` rest at `build.quality-unresolved` until you
|
|
486
|
+
delete or empty the file; the suite then runs on any hand edits. **Nobody
|
|
487
|
+
signs the finished change off unless you open the `review` door** (below).
|
|
488
|
+
The `fix` door repairs a red baseline through this same lap.
|
|
484
489
|
|
|
485
490
|
A red suite that keeps failing past a few fix attempts escalates instead of
|
|
486
491
|
retrying forever: an agent turn reads the failing output and writes
|
|
@@ -491,22 +496,28 @@ noted in steps 3 and 4 below.
|
|
|
491
496
|
instead of a third being written, and editing it is what gets the next
|
|
492
497
|
attempt anywhere new.
|
|
493
498
|
|
|
494
|
-
4. **You review
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
499
|
+
4. **You review — the refactor, or on request.** The feature workflow asks for
|
|
500
|
+
one review only on `refactor-first`: of the refactor slice, before the
|
|
501
|
+
feature is built (see [the naive pass](#the-naive-pass)). For the finished
|
|
502
|
+
change run `gtd door review <commitish>` (`/gtd review [base]`); that review
|
|
503
|
+
hands notes to `fix` instead of re-planning (below). Either way you get a
|
|
504
|
+
review document listing what changed and what to look at. Before you see it,
|
|
505
|
+
an automatic risk-fix pass (`build.review.fix.risks.fixing`) runs. Any risk
|
|
506
|
+
the reviewer names (a note opening with `Risk:`) is fixed first, the suite
|
|
507
|
+
kept green, and the review rewritten — once per review round, so a risk the
|
|
508
|
+
rewrite still names reaches you unfixed; risk: a fix lands with no check that
|
|
509
|
+
the risk was real. Tick the boxes to approve, or write what is wrong. At the
|
|
510
|
+
refactor review, approving moves on to the feature; feedback is judged note
|
|
511
|
+
by note (a third judged point), each as `edit`, `question`, `nit` or
|
|
512
|
+
`praise`. An `edit` re-derives the refactor (in a custom workflow built on
|
|
513
|
+
`buildTail`, it sends the process back to step 2 for re-derived
|
|
514
|
+
requirements). A `question` is answered inline under your note and the
|
|
515
|
+
process stops at the review again — no new plan. A `nit` is fixed in one
|
|
516
|
+
batch, the suite must go green (a red one gets fix turns first), then a fresh
|
|
517
|
+
review of the change stops at the review again. `praise` is dropped; a round
|
|
518
|
+
of only praise signs off. When a round mixes them, questions are answered and
|
|
519
|
+
nits fixed first, then the edits are planned — risk: the planning lap may
|
|
520
|
+
redo nit fixes it touches.
|
|
510
521
|
|
|
511
522
|
Each `edit` note also gets a severity tier from four judge questions
|
|
512
523
|
(security, reversibility, blast radius, new concept). `critical` and `should`
|
|
@@ -526,7 +537,7 @@ noted in steps 3 and 4 below.
|
|
|
526
537
|
You never talk to it. Every exchange is a file in `.gtd/` that you edit in your
|
|
527
538
|
own editor, and every answer you give is a commit. Your test suite is the gate
|
|
528
539
|
throughout: a red baseline stops the process before it starts, and a red build
|
|
529
|
-
is fixed before
|
|
540
|
+
is fixed before the process ends.
|
|
530
541
|
|
|
531
542
|
Prefer a phone or another device over your editor? `gtd ui` opens the file whose
|
|
532
543
|
turn it is as a small web app, over Tailscale — including a step that names no
|
|
@@ -588,19 +599,21 @@ home directory — fails every command until you delete it. See
|
|
|
588
599
|
|
|
589
600
|
#### The naive pass
|
|
590
601
|
|
|
591
|
-
After design the agent first implements the requirements directly
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
602
|
+
After design the agent first implements the requirements directly,
|
|
603
|
+
breadth-first, with a behaviour-level acceptance test per criterion that names
|
|
604
|
+
its ID (`[AC-3] …`) and reaches only code that existed before the pass. The pass
|
|
605
|
+
is sent back while a criterion's ID is missing from its tests, a test imports a
|
|
606
|
+
file it added, or the suite is red on it. A judge checks whether it changed
|
|
607
|
+
anything outside the expected set (tests, steering files; see `seamAllow`).
|
|
608
|
+
Incidental changes land; a needed seam change is refactored first, in its own
|
|
609
|
+
slice with its own quality lap (`refactorQualityReviews`) and review, before the
|
|
610
|
+
feature is implemented; a wrong approach is retried twice, then rests for you to
|
|
611
|
+
steer or overrule it. `gtd slices` lists the `refactor` and `feature` slices. A
|
|
612
|
+
refactor that already carried the whole feature leaves the implementation
|
|
613
|
+
nothing to do: its empty turn passes, and the feature's quality lap covers the
|
|
614
|
+
whole change. Feedback at the refactor review re-runs the refactor, never
|
|
615
|
+
design; a refactor-review change the refactor cannot build is refused, and the
|
|
616
|
+
only way out is `gtd abandon`. A process from 27.5.0 or later whose judge ruled
|
|
604
617
|
`refactor-first` must `gtd abandon` too. Each slice's quality lap reviews only
|
|
605
618
|
that slice. Details in
|
|
606
619
|
[the naive-pass path](docs/configuration.md#the-naive-pass-path).
|
|
@@ -416,6 +416,17 @@ carries it.
|
|
|
416
416
|
What each change does next (then run \`gtd land\`):
|
|
417
417
|
- **Continue** — having undone the sketch by hand, check the test baseline is green and start triage (**start-gate.check**).
|
|
418
418
|
`;
|
|
419
|
+
const qualityUnresolvedMessage = () => `The quality lap's fix turns hit their cap and \`.gtd/QUALITY.md\` still
|
|
420
|
+
holds findings. Nothing reviews the change after this, so the process
|
|
421
|
+
will not end with them open.
|
|
422
|
+
|
|
423
|
+
Fix what matters by hand, then delete or empty \`.gtd/QUALITY.md\` —
|
|
424
|
+
dropping a finding is your call to make.
|
|
425
|
+
|
|
426
|
+
What each change does next (then run \`gtd land\`):
|
|
427
|
+
- **Delete or empty \`.gtd/QUALITY.md\`** — the suite runs on your edits, then the process ends (**idle**).
|
|
428
|
+
- **Anything else** — rests here again.
|
|
429
|
+
`;
|
|
419
430
|
const startGateBlockedMessage = () => `The test baseline is red — gtd will not start new work on a broken suite.
|
|
420
431
|
\`.gtd/FEEDBACK.md\` holds the failing output.
|
|
421
432
|
|
|
@@ -1203,24 +1214,47 @@ Print the closing message and stop — this writes nothing itself.
|
|
|
1203
1214
|
`;
|
|
1204
1215
|
};
|
|
1205
1216
|
const listed = (paths, unreadable = []) => paths.map((path) => ` - \`${displayPath(path)}\`${unreadable.includes(path) ? " (unreadable)" : ""}`).join("\n");
|
|
1217
|
+
const isRed = (retry) => "red" in retry;
|
|
1218
|
+
const isFault = (retry) => "fault" in retry;
|
|
1219
|
+
const pickUp = (hash) => `Pick it up — \`git diff --binary ${hash}^ ${hash} | git apply\``;
|
|
1206
1220
|
const criteriaBinding = (refused) => `- Its \`## Acceptance Criteria\` (\`AC-<n>\`) bind this turn: re-read them from
|
|
1207
1221
|
the file, never from memory, and stop only when each one holds. They are
|
|
1208
1222
|
settled — ${refused ? "a turn that changes them is refused" : "leave them as they are"}`;
|
|
1209
|
-
const
|
|
1223
|
+
const naiveRetry = (retry) => isFault(retry) ? `
|
|
1224
|
+
Your previous attempt's (\`${retry.hash}\`) tests fall short:
|
|
1225
|
+
${retry.fault}
|
|
1226
|
+
${pickUp(retry.hash)} — and fix its tests; do not start over.
|
|
1227
|
+
` : isRed(retry) ? `
|
|
1228
|
+
Your previous attempt (\`${retry.red}\`) left the suite red; \`.gtd/FEEDBACK.md\`
|
|
1229
|
+
holds the output. ${pickUp(retry.red)}
|
|
1230
|
+
— and fix it until the suite is green; do not start over.
|
|
1231
|
+
` : `
|
|
1232
|
+
Your previous attempt was rejected: the judge answered \`reject\` (p=${retry.p}),
|
|
1233
|
+
meaning the naive pass solved the task the wrong way — discard it and
|
|
1234
|
+
re-implement. It changed these files outside the expected set:
|
|
1235
|
+
${listed(retry.strays)}
|
|
1236
|
+
Start over and choose a different approach; do not rebuild the same diff.
|
|
1237
|
+
`;
|
|
1238
|
+
const naivePassPrompt = (retry) => `${stateFileRules}
|
|
1210
1239
|
- Read \`.gtd/REQUIREMENTS.md\`: the settled requirements for this change
|
|
1211
1240
|
${criteriaBinding(false)}
|
|
1212
1241
|
- Implement them the quickest way that works — the naive version. Do not
|
|
1213
1242
|
restructure, abstract or refactor around the change; a later step judges
|
|
1214
1243
|
the shape of your diff and a reviewer makes it fit
|
|
1215
|
-
-
|
|
1244
|
+
- Work breadth-first: rough out every part of the change before finishing any
|
|
1245
|
+
one, so a run cut off midway still shows the whole shape
|
|
1246
|
+
- Write behaviour-level acceptance tests, at least one per criterion, each
|
|
1247
|
+
naming its ID in the test or scenario name (\`[AC-3] …\`). Test through code
|
|
1248
|
+
that existed before this pass — a public entry point, the CLI, an existing
|
|
1249
|
+
module's exports — never a file this pass adds: that is naive structure a
|
|
1250
|
+
later reset and refactor replaces. A pass that leaves a criterion's ID out
|
|
1251
|
+
of its tests, or whose test imports a file it added, is sent back
|
|
1252
|
+
- Run \`${env.testCommand}\` and finish only once it is green with every
|
|
1253
|
+
criterion's test passing: the next step runs it on your diff and sends a red
|
|
1254
|
+
pass back
|
|
1255
|
+
- Leave \`.gtd/\` untouched
|
|
1216
1256
|
- Leave everything uncommitted and finish your turn — do not commit
|
|
1217
|
-
${
|
|
1218
|
-
Your previous attempt was rejected: the judge answered \`reject\` (p=${rejection.p}),
|
|
1219
|
-
meaning the naive pass solved the task the wrong way — discard it and
|
|
1220
|
-
re-implement. It changed these files outside the expected set:
|
|
1221
|
-
${listed(rejection.strays)}
|
|
1222
|
-
Start over and choose a different approach; do not rebuild the same diff.
|
|
1223
|
-
`}`;
|
|
1257
|
+
${retry === void 0 ? "" : naiveRetry(retry)}`;
|
|
1224
1258
|
const implementBuildingPrompt = (reference, tier, amend, afterRefactor, flagMode = true) => `${stateFileRules}
|
|
1225
1259
|
- Read \`.gtd/REQUIREMENTS.md\`: the settled requirements for this change
|
|
1226
1260
|
${criteriaBinding(true)}
|
|
@@ -1245,8 +1279,41 @@ const implementFixPrompt = () => `${stateFileRules}
|
|
|
1245
1279
|
${fixFeedbackPrompt}
|
|
1246
1280
|
- Leave everything uncommitted and finish your turn — do not commit
|
|
1247
1281
|
`;
|
|
1248
|
-
const
|
|
1249
|
-
|
|
1282
|
+
const steerChoices = (overrule) => `Two ways forward (then run \`gtd land\`):
|
|
1283
|
+
- **Steer** — edit \`.gtd/REQUIREMENTS.md\` to redirect the change; the naive
|
|
1284
|
+
pass runs again with a fresh retry budget
|
|
1285
|
+
- **Overrule** — ${overrule}
|
|
1286
|
+
|
|
1287
|
+
An edit together with an approval counts as steer. Only
|
|
1288
|
+
\`.gtd/REQUIREMENTS.md\` is meant to change here: any other edit lands on the
|
|
1289
|
+
branch unjudged.
|
|
1290
|
+
`;
|
|
1291
|
+
const seamSteerMessage = (retry) => isFault(retry) ? `The naive pass failed three times and the retries are spent. The last
|
|
1292
|
+
attempt's tests (\`git show ${retry.hash}\`) fall short:
|
|
1293
|
+
${retry.fault}
|
|
1294
|
+
|
|
1295
|
+
${steerChoices(`land a clean tree to go on with the last attempt as it is:
|
|
1296
|
+
\`seam.check\` runs its suite and the seam judge rules on its shape. Use it
|
|
1297
|
+
when the rule cannot fit this change (tests the globs do not see, or no
|
|
1298
|
+
entry point that existed before). Risk: a criterion may have no test that
|
|
1299
|
+
survives a later refactor — the choice is recorded in history.`)}` : isRed(retry) ? `The naive pass failed three times and the retries are spent. The last
|
|
1300
|
+
attempt left the suite red: \`.gtd/FEEDBACK.md\` holds the last run's output; \`git show ${retry.red}\` shows
|
|
1301
|
+
the last attempt.
|
|
1302
|
+
|
|
1303
|
+
Two ways forward (then run \`gtd land\`):
|
|
1304
|
+
- **Steer** — edit \`.gtd/REQUIREMENTS.md\` to redirect the change; the naive
|
|
1305
|
+
pass runs again with a fresh retry budget
|
|
1306
|
+
- **Overrule** — land a clean tree to go on with the last attempt as it is:
|
|
1307
|
+
the seam judge rules on its shape, and the implementation's health loop
|
|
1308
|
+
must turn the suite green. Risk: the criteria's tests never passed on the
|
|
1309
|
+
naive pass — the choice is recorded in history.
|
|
1310
|
+
|
|
1311
|
+
An edit together with an approval counts as steer. Only
|
|
1312
|
+
\`.gtd/REQUIREMENTS.md\` is meant to change here: any other edit lands on the
|
|
1313
|
+
branch unjudged.
|
|
1314
|
+
` : seamRejectedMessage(retry);
|
|
1315
|
+
const seamRejectedMessage = (rejection) => `The naive pass failed three times and the retries are spent. The judge
|
|
1316
|
+
rejected the last attempt: it changed these files outside the expected set:
|
|
1250
1317
|
${listed(rejection.strays)}
|
|
1251
1318
|
|
|
1252
1319
|
Two ways forward (then run \`gtd land\`):
|
|
@@ -1573,4 +1640,4 @@ const steering = {
|
|
|
1573
1640
|
[REVIEW]: "review"
|
|
1574
1641
|
};
|
|
1575
1642
|
//#endregion
|
|
1576
|
-
export {
|
|
1643
|
+
export { refactorRules as $, buildReviewCollectingPrompt as A, designTriagePrompt as B, planner as C, agentWithSkills as D, reviewing as E, clearCriteriaQuestion as F, implementBuildingPrompt as G, fixReviewNotesPrompt as H, criterionLine as I, normaliseCriteriaScript as J, implementFixPrompt as K, deferNotesScript as L, buildReviewTriageMessage as M, builderSystem as N, buildReviewAnswerQuestionsPrompt as O, clearCriteriaMessage as P, refactorFixPrompt as Q, designGateAnswerMessage as R, fixRisks as S, reviewQuality as T, handOffAwaitReviewMessage as U, finisherSystem as V, idleMessage as W, refactorBuildingPrompt as X, qualityUnresolvedMessage as Y, refactorDroppedRefusal as Z, REVIEW as _, requireFlag as _t, flagModeOn as a, seamByHandMessage as at, fixCheck as b, baseline as c, unwindFailedMessage as ct, guarded as d, envDefaults as dt, reviewEditNotesCapture as et, healthy as f, testFileGlobs as ft, REQUIREMENTS as g, registryEntry as gt, REFACTOR as h, flipProblems as ht, skills as i, reviewerSystem as it, buildReviewFixNitsPrompt as j, buildReviewAwaitAfterDeferMessage as k, escalation as l, unwindFailure as lt, QUALITY as m, flagReferences as mt, summary as n, reviewGateBlockedMessage as nt, flagShipped as o, seamSteerMessage as ot, FEEDBACK as p, flagMentions as pt, naivePassPrompt as q, access as r, reviewNotesCapture as rt, shipped as s, startGateBlockedMessage as st, steering as t, reviewEditsCapture as tt, gate as u, defaults as ut, awaitReview as v, reviewMissing as w, fixQuality as x, coder as y, designSystem as z };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { read, refuse, removeScript, run, scope, showScript, vars } from "../flows.mjs";
|
|
2
2
|
import { fixFindings, lensEntriesOf, lensOf, qualityLap as qualityLap$1, reviewToHandOff } from "../workflow-kit.mjs";
|
|
3
|
-
import { E as reviewing, S as fixRisks, T as reviewQuality, U as handOffAwaitReviewMessage, _ as REVIEW, b as fixCheck, d as guarded, f as healthy, l as escalation, m as QUALITY, v as awaitReview, w as reviewMissing, x as fixQuality } from "./reserved-
|
|
3
|
+
import { E as reviewing, S as fixRisks, T as reviewQuality, U as handOffAwaitReviewMessage, _ as REVIEW, b as fixCheck, d as guarded, f as healthy, l as escalation, m as QUALITY, v as awaitReview, w as reviewMissing, x as fixQuality } from "./reserved-BcJgt5_R.mjs";
|
|
4
4
|
//#region src/workflows/shared/tail.ts
|
|
5
5
|
/** The reviewer's own `.gtd/REVIEW.md`, kept beside the human's notes so `fix` can tell them apart. */
|
|
6
6
|
const REVIEW_ORIG = ".gtd/REVIEW.orig.md";
|
package/dist/testkit.mjs
CHANGED
|
@@ -5,13 +5,13 @@ import { $ as logWarning, $i as NodeInspectSymbol, $n as map$5, $r as make$19, $
|
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
6
|
import * as Crypto from "node:crypto";
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
|
+
import * as Path from "node:path";
|
|
9
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
8
10
|
import { PassThrough } from "node:stream";
|
|
9
11
|
import * as NFS from "node:fs";
|
|
10
12
|
import { existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
11
13
|
import * as OS from "node:os";
|
|
12
14
|
import { homedir, tmpdir } from "node:os";
|
|
13
|
-
import * as Path from "node:path";
|
|
14
|
-
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
15
15
|
import * as ChildProcess from "node:child_process";
|
|
16
16
|
import { execFileSync, execSync, spawnSync } from "node:child_process";
|
|
17
17
|
import * as NodeUrl from "node:url";
|
|
@@ -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 { _t as requireFlag, dt as envDefaults, gt as registryEntry, i as skills, mt as flagReferences, n as summary, o as flagShipped, r as access, t as steering, ut as defaults, y as coder } from "../chunks/reserved-BcJgt5_R.mjs";
|
|
3
|
+
import { a as refusePendingHandOff, r as handOffTail } from "../chunks/tail-CM_fa93v.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 () => {
|