@pmelab/gtd 38.0.0 → 38.2.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 +36 -3
- package/dist/chunks/{Schema-DO5ttJaI.mjs → Schema-C6fLlQzx.mjs} +1 -1
- package/dist/chunks/{reserved-sfMdy7v7.mjs → reserved-C3PgP7XB.mjs} +56 -12
- package/dist/chunks/{tail-Cgca5Gp-.mjs → tail-Bkxki2nK.mjs} +1 -1
- package/dist/chunks/{wire-CSsa3Wxd.mjs → wire-BJuZWR3C.mjs} +1 -1
- package/dist/gtd.bundle.mjs +292 -53
- package/dist/testkit.mjs +257 -21
- package/dist/wire.mjs +1 -1
- package/dist/workflows/cleanup.mjs +2 -2
- package/dist/workflows/feature.mjs +158 -42
- 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 +230 -70
- package/package.json +1 -1
- package/src/cli/Cli.test.ts +15 -3
- package/src/cli/Cli.ts +61 -28
- package/src/cli/History.ts +1 -19
- package/src/cli/Metrics.test.ts +224 -0
- package/src/cli/Metrics.ts +310 -0
- package/src/cli/Output.ts +13 -0
- package/src/cli/Program.test.ts +3 -1
- package/src/cli/Program.ts +4 -0
- package/src/testkit/steps.ts +4 -0
- package/src/wire/ContextLimit.ts +1 -1
- package/src/workflows/feature/continuation-cap.feature +65 -0
- package/src/workflows/feature/continuation-rebuild.feature +88 -0
- package/src/workflows/feature/continuation-slices.feature +64 -0
- package/src/workflows/feature/continuation.feature +205 -0
- package/src/workflows/feature/criteria.ts +11 -0
- package/src/workflows/feature/refactor.ts +64 -30
- package/src/workflows/feature/seam.ts +102 -30
- package/src/workflows/shared/continuation.ts +92 -0
- package/src/workflows/shared/options.ts +2 -0
- package/src/workflows/shared/steps.ts +1 -0
- package/src/workflows/shared/text.test.ts +6 -2
- package/src/workflows/shared/text.ts +104 -8
- package/src/workflows/shared/vars.ts +5 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { agent, answered, applyScript, changes, changesSince, check, codeChanges, env, hasThreadFor, head, human, judge, judgeDiffShape, kept, mark, matches, numeric, quote, read, refuse, removeScript, requireAnswers, requireProgress, requireReplies, requireRevert, requireThreadsClosed, restoreScript, revertScript, run, scope, slice, start, vars, wrote } from "../flows.mjs";
|
|
2
2
|
import { lensEntriesOf, review as review$1 } from "../workflow-kit.mjs";
|
|
3
|
-
import { $ as
|
|
4
|
-
import { a as refusePendingHandOff, i as isOptionalObject, n as closeReview, o as tail } from "../chunks/tail-
|
|
3
|
+
import { $ as naiveApplyFailure, A as agentWithSkills, B as coverageQuestion, C as fixCheck, Ct as testFileGlobs, D as reviewMissing, E as planner, F as buildReviewTriageMessage, G as designSystem, H as criterionLine, I as builderSystem, K as designTriagePrompt, L as clearCriteriaMessage, M as buildReviewAwaitAfterDeferMessage, N as buildReviewCollectingPrompt, P as buildReviewFixNitsPrompt, Q as implementFixPrompt, R as clearCriteriaQuestion, S as coder, St as envDefaults, T as fixRisks, U as deferNotesScript, V as coveringPrompt, W as designGateAnswerMessage, X as idleMessage, Z as implementBuildingPrompt, _ as REFACTOR_NOTE, _t as startGateBlockedMessage, a as flagModeOn, at as refactorDroppedRefusal, b as SLICES, bt as unwindFailure, ct as refactorRules, d as guarded, et as naivePassPrompt, f as healthy, ft as reviewNotesCapture, g as REFACTOR, gt as slicingPrompt, h as QUALITY, ht as seamSteerMessage, i as skills, it as refactorBuildingPrompt, j as buildReviewAnswerQuestionsPrompt, k as reviewing, lt as reviewEditNotesCapture, m as HANDOFF, mt as seamByHandMessage, n as summary, nt as oversizedMessage, ot as refactorFixPrompt, p as FEEDBACK, pt as reviewerSystem, r as access, rt as qualityUnresolvedMessage, s as shipped, st as refactorNotePrompt, t as steering, tt as normaliseCriteriaScript, u as gate, ut as reviewEditsCapture, v as REQUIREMENTS, vt as uncoveredMessage, x as awaitReview, xt as defaults, y as REVIEW, yt as unwindFailedMessage, z as coverageMessage } from "../chunks/reserved-C3PgP7XB.mjs";
|
|
4
|
+
import { a as refusePendingHandOff, i as isOptionalObject, n as closeReview, o as tail } from "../chunks/tail-Bkxki2nK.mjs";
|
|
5
5
|
import { posix } from "node:path";
|
|
6
6
|
//#region src/workflows/shared/fences.ts
|
|
7
7
|
const markFenced = (text) => {
|
|
@@ -145,6 +145,13 @@ const skipDesign = (stated) => stated === void 0 ? Promise.resolve(false) : scop
|
|
|
145
145
|
});
|
|
146
146
|
return true;
|
|
147
147
|
});
|
|
148
|
+
/** After a gate that invites narrowing the requirements: an edit must leave valid criteria. */
|
|
149
|
+
const requireCriteriaIfEdited = () => {
|
|
150
|
+
const change = changes().get(REQUIREMENTS);
|
|
151
|
+
if (change === void 0) return;
|
|
152
|
+
if (change.status === "deleted") refuse(`gtd land: criteria-missing: ${REQUIREMENTS} must stay — narrow its criteria, never delete it`);
|
|
153
|
+
requireCriteria(REQUIREMENTS);
|
|
154
|
+
};
|
|
148
155
|
//#endregion
|
|
149
156
|
//#region src/workflows/feature/tier.ts
|
|
150
157
|
/** GTD_FLAG_RISK_TIER: pinned at process start, so a mid-process flip never moves a process. */
|
|
@@ -493,6 +500,53 @@ const reUnwind = async (feedback) => {
|
|
|
493
500
|
requireRevert(edited, base);
|
|
494
501
|
};
|
|
495
502
|
//#endregion
|
|
503
|
+
//#region src/workflows/shared/continuation.ts
|
|
504
|
+
const phase = (name, steered) => ({
|
|
505
|
+
name,
|
|
506
|
+
spent: false,
|
|
507
|
+
count: 0,
|
|
508
|
+
stalled: 0,
|
|
509
|
+
steered
|
|
510
|
+
});
|
|
511
|
+
const own = (fn) => fn();
|
|
512
|
+
const continued = (fn) => scope("continue", fn);
|
|
513
|
+
const afresh = (fn) => scope("fresh", fn);
|
|
514
|
+
const setting = (name, least) => {
|
|
515
|
+
const raw = vars[name] ?? defaults[name];
|
|
516
|
+
const n = Number(raw);
|
|
517
|
+
if (raw.trim() === "" || !Number.isInteger(n) || n < least) refuse(`gtd: ${name} must be a whole number of at least ${least}, got ${JSON.stringify(raw)}`);
|
|
518
|
+
return n;
|
|
519
|
+
};
|
|
520
|
+
/**
|
|
521
|
+
* Run `turn` until one ends without a handoff note: each stopped turn is picked
|
|
522
|
+
* up by a continuation in a fresh conversation. Past `continuations` of them in
|
|
523
|
+
* the phase, or after `continuationStall` in a row that close nothing still
|
|
524
|
+
* open, the phase rests at `oversized` for a person; landing there grants a new round.
|
|
525
|
+
*/
|
|
526
|
+
const continuing = async (phase, turn) => {
|
|
527
|
+
const cap = setting("continuations", 0);
|
|
528
|
+
const stall = setting("continuationStall", 1);
|
|
529
|
+
let last = await turn(void 0, phase.spent ? afresh : own);
|
|
530
|
+
while (last.handoff !== void 0) {
|
|
531
|
+
phase.spent = true;
|
|
532
|
+
const from = last.handoff;
|
|
533
|
+
if (phase.count >= cap || phase.stalled >= stall) {
|
|
534
|
+
await human("oversized", {
|
|
535
|
+
message: oversizedMessage(phase.name, from, phase.count >= cap ? { cap } : { stall }, phase.steered !== void 0),
|
|
536
|
+
label: "Too big for its context",
|
|
537
|
+
acceptClean: true
|
|
538
|
+
});
|
|
539
|
+
phase.steered?.();
|
|
540
|
+
phase.count = 0;
|
|
541
|
+
phase.stalled = 0;
|
|
542
|
+
}
|
|
543
|
+
last = await turn(from, continued);
|
|
544
|
+
phase.count++;
|
|
545
|
+
phase.stalled = from.open.length === 0 || from.open.some((item) => !(last.handoff?.open ?? []).includes(item)) ? 0 : phase.stalled + 1;
|
|
546
|
+
}
|
|
547
|
+
return last.result;
|
|
548
|
+
};
|
|
549
|
+
//#endregion
|
|
496
550
|
//#region src/workflows/feature/refactor.ts
|
|
497
551
|
const REFACTOR_PACKAGE = REFACTOR;
|
|
498
552
|
const isCode = (path) => path !== ".gtd" && !path.startsWith(".gtd/");
|
|
@@ -638,7 +692,7 @@ const guardOf = ({ pattern, strays }, entry) => () => {
|
|
|
638
692
|
requireNoNewFlags(pattern, entry);
|
|
639
693
|
};
|
|
640
694
|
/** Derive, build, check and close one refactor lap; `feedback` is the collected review text of the lap before. */
|
|
641
|
-
const refactorLap = async (p, guard, feedback) => {
|
|
695
|
+
const refactorLap = async (p, guard, refactor, feedback) => {
|
|
642
696
|
const { pattern, strays, reference, note } = p;
|
|
643
697
|
await run("deriving", deriveScript([
|
|
644
698
|
...packageLines(strays, pattern, reference),
|
|
@@ -658,32 +712,48 @@ const refactorLap = async (p, guard, feedback) => {
|
|
|
658
712
|
label: "Deriving the refactor package",
|
|
659
713
|
file: REFACTOR_PACKAGE
|
|
660
714
|
});
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
guard();
|
|
674
|
-
await healthy(async () => {
|
|
675
|
-
await agentWithSkills("fix.suite.fixing", refactorFixPrompt(strays, pattern), {
|
|
676
|
-
label: "Fixing the check",
|
|
677
|
-
file: FEEDBACK,
|
|
715
|
+
const reached = /* @__PURE__ */ new Set();
|
|
716
|
+
await continuing(refactor, async (from, fresh) => {
|
|
717
|
+
await fresh(() => agentWithSkills("building", refactorBuildingPrompt({
|
|
718
|
+
pkg: REFACTOR_PACKAGE,
|
|
719
|
+
strays,
|
|
720
|
+
pattern,
|
|
721
|
+
reference,
|
|
722
|
+
feedback: feedback !== void 0,
|
|
723
|
+
note: note !== void 0,
|
|
724
|
+
from
|
|
725
|
+
}), {
|
|
726
|
+
label: from === void 0 ? "Refactoring" : "Continuing the refactor",
|
|
678
727
|
model: coder(),
|
|
679
728
|
system: builderSystem()
|
|
680
|
-
});
|
|
729
|
+
}));
|
|
730
|
+
const left = read(HANDOFF);
|
|
681
731
|
guard();
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
732
|
+
const snapshot = head();
|
|
733
|
+
for (const c of changes()) reached.add(c.path);
|
|
734
|
+
await healthy(async () => {
|
|
735
|
+
await agentWithSkills("fix.suite.fixing", refactorFixPrompt(strays, pattern), {
|
|
736
|
+
label: "Fixing the check",
|
|
737
|
+
file: FEEDBACK,
|
|
738
|
+
model: coder(),
|
|
739
|
+
system: builderSystem()
|
|
740
|
+
});
|
|
741
|
+
guard();
|
|
742
|
+
}, {
|
|
743
|
+
describeGuard: guard,
|
|
744
|
+
rules: refactorRules(strays, pattern)
|
|
745
|
+
});
|
|
746
|
+
if (left === void 0) return { result: void 0 };
|
|
747
|
+
return {
|
|
748
|
+
result: void 0,
|
|
749
|
+
handoff: {
|
|
750
|
+
snapshot,
|
|
751
|
+
note: left.trim(),
|
|
752
|
+
open: strays.filter((path) => !reached.has(path))
|
|
753
|
+
}
|
|
754
|
+
};
|
|
685
755
|
});
|
|
686
|
-
await run("closing", removeScript([REFACTOR_PACKAGE]), { label: "Closing out the refactor" });
|
|
756
|
+
await run("closing", removeScript([REFACTOR_PACKAGE, HANDOFF]), { label: "Closing out the refactor" });
|
|
687
757
|
};
|
|
688
758
|
const strayAccess = (strays) => ({ write: [
|
|
689
759
|
...strays,
|
|
@@ -697,7 +767,7 @@ const refactorFirst = async (shape, options = {}) => {
|
|
|
697
767
|
name: "refactor",
|
|
698
768
|
access: strayAccess(p.strays)
|
|
699
769
|
}, async () => {
|
|
700
|
-
await refactorLap(p, guardOf(p, head()));
|
|
770
|
+
await refactorLap(p, guardOf(p, head()), phase("refactor"));
|
|
701
771
|
return true;
|
|
702
772
|
});
|
|
703
773
|
};
|
|
@@ -722,9 +792,10 @@ const reviewedRefactor = async (shape, options = {}) => {
|
|
|
722
792
|
unmatched: "gtd land: refactor-feedback: the review feedback changed files but wrote no .gtd/REFACTOR.md — a refactor cannot act on it; revert the change, or `gtd abandon` and restart",
|
|
723
793
|
dropped: refactorDroppedRefusal
|
|
724
794
|
};
|
|
795
|
+
const refactor = phase("refactor");
|
|
725
796
|
let collected;
|
|
726
797
|
for (;;) {
|
|
727
|
-
await refactorLap(p, guard, collected);
|
|
798
|
+
await refactorLap(p, guard, refactor, collected);
|
|
728
799
|
const outcome = await buildTail(entry, {
|
|
729
800
|
green: true,
|
|
730
801
|
guard,
|
|
@@ -835,12 +906,32 @@ const judgeSeam = (tip) => judgeDiffShape("judge", {
|
|
|
835
906
|
allow: (vars.seamAllow ?? defaults.seamAllow).split(",").map((glob) => glob.trim()).filter((glob) => glob !== ""),
|
|
836
907
|
exempt: tip.changes.filter((c) => c.status === "added").map((c) => c.path)
|
|
837
908
|
});
|
|
838
|
-
const naivePass = (retry, slice) => agentWithSkills("naive", naivePassPrompt(retry, sliceIds(slice)), {
|
|
839
|
-
label: retry === void 0 ? "Writing the naive pass" : "Rewriting the naive pass",
|
|
909
|
+
const naivePass = (retry, slice, from) => agentWithSkills("naive", naivePassPrompt(retry, sliceIds(slice), from), {
|
|
910
|
+
label: from !== void 0 ? "Continuing the naive pass" : retry === void 0 ? "Writing the naive pass" : "Rewriting the naive pass",
|
|
840
911
|
keep: true,
|
|
841
912
|
model: coder(),
|
|
842
913
|
system: builderSystem()
|
|
843
914
|
});
|
|
915
|
+
const handoffOf = (tip, slice) => {
|
|
916
|
+
const note = tip.changes.find((c) => c.path === ".gtd/HANDOFF.md" && c.after !== void 0);
|
|
917
|
+
if (note === void 0) return void 0;
|
|
918
|
+
return {
|
|
919
|
+
snapshot: tip.hash,
|
|
920
|
+
note: note.after.trim(),
|
|
921
|
+
open: unnamed(idsOf(REQUIREMENTS, slice), acceptanceTests(tip.changes))
|
|
922
|
+
};
|
|
923
|
+
};
|
|
924
|
+
/** A naive pass, continued until a pass ends without a handoff note: the snapshot is its kept tip. */
|
|
925
|
+
const naiveContinued = (retry, slice, naive) => continuing(naive, async (from, fresh) => {
|
|
926
|
+
const tip = await fresh(async () => {
|
|
927
|
+
await naivePass(retry, slice, from);
|
|
928
|
+
return kept("naive");
|
|
929
|
+
});
|
|
930
|
+
return {
|
|
931
|
+
result: tip,
|
|
932
|
+
handoff: handoffOf(tip, slice)
|
|
933
|
+
};
|
|
934
|
+
});
|
|
844
935
|
const IMPORTED = /(?:\bfrom|\bimport|\brequire\s*\(|\bmock\s*\()\s*\(?\s*(["'`])([^"'`\n]+)\1/g;
|
|
845
936
|
const EXTENSION = /\.[\w-]+$/;
|
|
846
937
|
const ALIAS = /^(?:[@~]\/|#)/;
|
|
@@ -968,6 +1059,32 @@ const applied = async (tip) => {
|
|
|
968
1059
|
await run("applying", applyScript(tip, FEEDBACK, naiveApplyFailure(tip), [".gtd"]), { label: "Applying the naive pass" });
|
|
969
1060
|
return !wrote(".gtd/FEEDBACK.md") && codeChanges().length > 0;
|
|
970
1061
|
};
|
|
1062
|
+
/** `carried` limited to the criteria `.gtd/REQUIREMENTS.md` lists now; a file listing none narrows nothing. */
|
|
1063
|
+
const settled = (carried, slice) => {
|
|
1064
|
+
const listed = idsOf(REQUIREMENTS, slice);
|
|
1065
|
+
if (carried === void 0) return listed;
|
|
1066
|
+
return listed.length === 0 ? carried : carried.filter((id) => listed.includes(id));
|
|
1067
|
+
};
|
|
1068
|
+
const build = (options) => continuing(phase("build", requireCriteriaIfEdited), async (from, fresh) => {
|
|
1069
|
+
await fresh(() => agentWithSkills("building", implementBuildingPrompt(options.reference, options.tier, options.amend, options.afterRefactor, flagModeOn(), options.rebuild, sliceIds(options.slice), from), {
|
|
1070
|
+
label: from === void 0 ? "Implementing" : "Continuing the implementation",
|
|
1071
|
+
model: coder(),
|
|
1072
|
+
system: builderSystem(),
|
|
1073
|
+
...options.afterRefactor === true ? { allowEmpty: true } : {}
|
|
1074
|
+
}));
|
|
1075
|
+
requireCriteriaFrozen(REQUIREMENTS);
|
|
1076
|
+
const note = read(HANDOFF);
|
|
1077
|
+
if (note === void 0) return { result: void 0 };
|
|
1078
|
+
const ids = settled(options.rebuild?.acceptance?.ids, options.slice);
|
|
1079
|
+
return {
|
|
1080
|
+
result: void 0,
|
|
1081
|
+
handoff: {
|
|
1082
|
+
snapshot: head(),
|
|
1083
|
+
note: note.trim(),
|
|
1084
|
+
open: unnamed(ids, acceptanceTests(changesSince(start())))
|
|
1085
|
+
}
|
|
1086
|
+
};
|
|
1087
|
+
});
|
|
971
1088
|
function implement(first, tier, amend) {
|
|
972
1089
|
const options = typeof first === "object" && first !== null ? first : {
|
|
973
1090
|
reference: first,
|
|
@@ -978,14 +1095,12 @@ function implement(first, tier, amend) {
|
|
|
978
1095
|
const since = head();
|
|
979
1096
|
const acceptance = options.rebuild?.acceptance;
|
|
980
1097
|
const built = options.naive === void 0 || !await applied(options.naive);
|
|
981
|
-
if (built) await
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
});
|
|
987
|
-
requireCriteriaFrozen(REQUIREMENTS);
|
|
988
|
-
if (built && acceptance !== void 0) requireAcceptance(acceptance, since);
|
|
1098
|
+
if (built) await build(options);
|
|
1099
|
+
else requireCriteriaFrozen(REQUIREMENTS);
|
|
1100
|
+
if (built && acceptance !== void 0) requireAcceptance({
|
|
1101
|
+
...acceptance,
|
|
1102
|
+
ids: settled(acceptance.ids, options.slice)
|
|
1103
|
+
}, since);
|
|
989
1104
|
await green(built && acceptance !== void 0 ? () => requireAcceptanceKept(acceptance) : void 0);
|
|
990
1105
|
await requireCoverage(options.base, options.slice);
|
|
991
1106
|
await closing(options.more === true);
|
|
@@ -994,10 +1109,11 @@ function implement(first, tier, amend) {
|
|
|
994
1109
|
/** The last slice's closing, for a last slice a steer left with no criterion to build. */
|
|
995
1110
|
const closeOut = () => scope("implement", () => closing(false));
|
|
996
1111
|
/** A slice with `more` after it keeps the criteria and the slicing for the next one. */
|
|
997
|
-
const closing = (more) => run("closing", removeScript(more ? [REFACTOR_NOTE] : [
|
|
1112
|
+
const closing = (more) => run("closing", removeScript(more ? [REFACTOR_NOTE, HANDOFF] : [
|
|
998
1113
|
REQUIREMENTS,
|
|
999
1114
|
REFACTOR_NOTE,
|
|
1000
|
-
SLICES
|
|
1115
|
+
SLICES,
|
|
1116
|
+
HANDOFF
|
|
1001
1117
|
]), { label: "Closing out the implementation" });
|
|
1002
1118
|
/** Resolves `true` when the human steered (edited), `false` on a clean overrule. */
|
|
1003
1119
|
const steer = async (retry) => {
|
|
@@ -1069,10 +1185,10 @@ const decide = (slice) => scope("seam", async () => {
|
|
|
1069
1185
|
again: budget(),
|
|
1070
1186
|
waived: false
|
|
1071
1187
|
};
|
|
1188
|
+
const naive = phase("naive pass", requireCriteriaIfEdited);
|
|
1072
1189
|
let retry;
|
|
1073
1190
|
for (;;) {
|
|
1074
|
-
await
|
|
1075
|
-
const tip = kept("naive");
|
|
1191
|
+
const tip = await naiveContinued(retry, slice, naive);
|
|
1076
1192
|
const outcome = await vetted(tip, vetting, slice) ?? (flagModeOn() ? await ruled(tip, vetting.again) : {
|
|
1077
1193
|
reference: tip.hash,
|
|
1078
1194
|
tip
|
|
@@ -1328,4 +1444,4 @@ const feature = shipped(ordinaryStart);
|
|
|
1328
1444
|
//#region src/workflows/feature/index.ts
|
|
1329
1445
|
var feature_default = feature;
|
|
1330
1446
|
//#endregion
|
|
1331
|
-
export { COMMENT, REFACTOR_PACKAGE, acceptanceFault, access, afterTail, answerProductQuestions, answerReviewQuestions, buildFeature, buildTail, closeOut, collecting, criteriaOf, criterionIds, feature_default as default, defaults, deferNotes, design, envDefaults, feature, fixNits, holdsCallSites, implement, isTestFile, judgeSeam, naiveAcceptance, naivePass, ordinaryStart, planAndBuild, reUnwind, refactorCollecting, refactorFirst, refactorNote, refactorStrays, requireAcceptance, requireAcceptanceKept, requireCriteria, requireCriteriaFrozen, requireNoNewFlags, requireNoTestFiles, requireSlices, requireTestCallSitesOnly, requireWithin, reviewedRefactor, seamBuild, skills, skipDesign, sliceCap, sliceCriteria, sliceIds, slicesOf, slicing, statedCriteria, steering, summary, triage, unwind };
|
|
1447
|
+
export { COMMENT, REFACTOR_PACKAGE, acceptanceFault, access, afterTail, answerProductQuestions, answerReviewQuestions, buildFeature, buildTail, closeOut, collecting, criteriaOf, criterionIds, feature_default as default, defaults, deferNotes, design, envDefaults, feature, fixNits, holdsCallSites, implement, isTestFile, judgeSeam, naiveAcceptance, naivePass, ordinaryStart, planAndBuild, reUnwind, refactorCollecting, refactorFirst, refactorNote, refactorStrays, requireAcceptance, requireAcceptanceKept, requireCriteria, requireCriteriaFrozen, requireCriteriaIfEdited, requireNoNewFlags, requireNoTestFiles, requireSlices, requireTestCallSitesOnly, requireWithin, reviewedRefactor, seamBuild, skills, skipDesign, sliceCap, sliceCriteria, sliceIds, slicesOf, slicing, statedCriteria, steering, summary, triage, unwind };
|
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 { d as reviewNotes, f as reviewRisks } from "../chunks/steering-DVILanVf.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { r as handOffTail, t as REVIEW_ORIG } from "../chunks/tail-
|
|
3
|
+
import { A as agentWithSkills, J as fixReviewNotesPrompt, S as coder, St as envDefaults, c as baseline, i as skills, n as summary, q as finisherSystem, r as access, s as shipped, t as steering, xt as defaults, y as REVIEW } from "../chunks/reserved-C3PgP7XB.mjs";
|
|
4
|
+
import { r as handOffTail, t as REVIEW_ORIG } from "../chunks/tail-Bkxki2nK.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,6 +1,6 @@
|
|
|
1
1
|
import { start } from "../flows.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { a as refusePendingHandOff, r as handOffTail } from "../chunks/tail-
|
|
2
|
+
import { St as envDefaults, dt as reviewGateBlockedMessage, i as skills, n as summary, r as access, s as shipped, t as steering, u as gate, xt as defaults } from "../chunks/reserved-C3PgP7XB.mjs";
|
|
3
|
+
import { a as refusePendingHandOff, r as handOffTail } from "../chunks/tail-Bkxki2nK.mjs";
|
|
4
4
|
//#region src/workflows/review/review.ts
|
|
5
5
|
/**
|
|
6
6
|
* Pure review of everything since `reviewBase`: a green gate, the quality
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { agent, changesSince, glob, head, mark, read, refuse, removeScript, run, scope, vars } from "../flows.mjs";
|
|
2
|
-
import { Et as requireFlag,
|
|
2
|
+
import { Et as flipProblems, Ot as requireFlag, S as coder, St 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 flagMentions, xt as defaults } from "../chunks/reserved-C3PgP7XB.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.";
|