@pmelab/gtd 51.0.1 → 52.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.
Files changed (62) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +41 -38
  3. package/dist/chunks/{reserved-CUkk9XgL.mjs → reserved-D0MKVFFa.mjs} +28 -34
  4. package/dist/chunks/{review-BaCXlIT2.mjs → review-ZzUQH1KZ.mjs} +11 -9
  5. package/dist/chunks/{steering-DtUVUz9l.mjs → steering-CLhu8C7q.mjs} +262 -52
  6. package/dist/chunks/{tail-CX6Pdsql.mjs → tail-I1-vVq0P.mjs} +1 -1
  7. package/dist/gtd.bundle.mjs +198 -43
  8. package/dist/steering.mjs +2 -2
  9. package/dist/testkit.mjs +1 -1
  10. package/dist/web/main.css +1 -1
  11. package/dist/web/main.js +510 -147
  12. package/dist/workflow-kit.mjs +1 -1
  13. package/dist/workflows/cleanup.mjs +2 -2
  14. package/dist/workflows/feature.mjs +181 -222
  15. package/dist/workflows/fix.mjs +3 -3
  16. package/dist/workflows/review.mjs +3 -3
  17. package/dist/workflows/rollout.mjs +1 -1
  18. package/dist/workflows.mjs +478 -313
  19. package/package.json +1 -1
  20. package/src/steering/FORMATS.md +4 -1
  21. package/src/steering/SteeringFormat.ts +7 -1
  22. package/src/steering/contract.test.ts +2 -1
  23. package/src/steering/fixtures/review/sectioned.md +31 -0
  24. package/src/steering/fixtures/review/sectioned.read.json +119 -0
  25. package/src/steering/index.ts +4 -0
  26. package/src/steering/qa.ts +1 -1
  27. package/src/steering/review.test.ts +270 -4
  28. package/src/steering/review.ts +328 -69
  29. package/src/workflows/feature/criteria.test.ts +39 -1
  30. package/src/workflows/feature/criteria.ts +21 -7
  31. package/src/workflows/feature/fast-path.feature +1 -6
  32. package/src/workflows/feature/feature.ts +1 -2
  33. package/src/workflows/feature/flag-mode.feature +1 -6
  34. package/src/workflows/feature/green.ts +22 -0
  35. package/src/workflows/feature/hands-on-skip.feature +344 -0
  36. package/src/workflows/feature/lens-models.feature +0 -4
  37. package/src/workflows/feature/lens-review.feature +6 -8
  38. package/src/workflows/feature/one-step-land.feature +1 -6
  39. package/src/workflows/feature/prototype-rounds.feature +1 -1
  40. package/src/workflows/feature/prototype.feature +10 -9
  41. package/src/workflows/feature/prototype.ts +48 -17
  42. package/src/workflows/feature/refactor-absorbs.feature +3 -8
  43. package/src/workflows/feature/refactor-first.feature +3 -8
  44. package/src/workflows/feature/refactor-rebuild.feature +7 -12
  45. package/src/workflows/feature/refactor-review.feature +52 -72
  46. package/src/workflows/feature/review-answers.feature +90 -5
  47. package/src/workflows/feature/review-gate.feature +11 -53
  48. package/src/workflows/feature/reviewer-walkthrough.feature +29 -12
  49. package/src/workflows/feature/seam-rejection.feature +1 -6
  50. package/src/workflows/feature/seam.feature +1 -6
  51. package/src/workflows/feature/seam.test.ts +1 -1
  52. package/src/workflows/feature/seam.ts +2 -3
  53. package/src/workflows/feature/severity-budget.feature +7 -7
  54. package/src/workflows/feature/severity-sorted-review.feature +50 -54
  55. package/src/workflows/feature/slice-findings.feature +5 -15
  56. package/src/workflows/feature/slicing.feature +4 -24
  57. package/src/workflows/feature/standards.feature +0 -4
  58. package/src/workflows/shared/review.ts +26 -6
  59. package/src/workflows/shared/text.test.ts +45 -11
  60. package/src/workflows/shared/text.ts +45 -38
  61. package/src/workflows/feature/coverage.feature +0 -165
  62. package/src/workflows/feature/coverage.ts +0 -120
@@ -1,11 +1,21 @@
1
- import { changes, human, read, refuse, scope, vars } from "../../flows/index.js"
1
+ import { answered, changes, human, judge, read, refuse, scope, vars } from "../../flows/index.js"
2
2
  import { HEADING, markFenced } from "../shared/fences.js"
3
3
  import { coder, PROTOTYPE, REQUIREMENTS } from "../shared/steps.js"
4
4
  import * as t from "../shared/text.js"
5
5
  import { defaults } from "../shared/vars.js"
6
6
  import type { Guard } from "../shared/health.js"
7
- import { green } from "./coverage.js"
8
- import { criterionIds, requireCriteriaFrozen, sliceIds, type CriteriaSlice } from "./criteria.js"
7
+ import { green } from "./green.js"
8
+ import {
9
+ criteriaOf,
10
+ criterionIds,
11
+ handsOnIds,
12
+ requireCriteriaFrozen,
13
+ sliceIds,
14
+ type CriteriaSlice,
15
+ } from "./criteria.js"
16
+
17
+ /** Only a `no` at this or above skips a criterion: no verdict, or an unsure one, sends it to the hands-on test. */
18
+ const UNOBSERVABLE_MIN_P = 0.5
9
19
 
10
20
  /** The `prototypeRounds` setting. Anything but a non-negative integer fails rather than guess a cap. */
11
21
  export const prototypeRounds = (): number => {
@@ -55,11 +65,11 @@ export const reportOf = (text: string): Report => {
55
65
 
56
66
  /**
57
67
  * The report the testing turn left, refused unless it is the only change and
58
- * names every criterion once, with its open items: another slice's criteria
59
- * are not this slice's to fix.
68
+ * names each of `ids` once, with its open items: any other criterion is not
69
+ * this test's to fix.
60
70
  */
61
71
  const requireReport = (
62
- slice: CriteriaSlice | undefined,
72
+ ids: readonly string[],
63
73
  retest: boolean,
64
74
  ): { readonly unguided: boolean; readonly open: readonly Item[] } => {
65
75
  const others = changes()
@@ -79,27 +89,45 @@ const requireReport = (
79
89
  // Only a first test with nothing else in it: a chunk beside it was tested after all, and a
80
90
  // re-test's open items must reach a person, not slip past as untested.
81
91
  if (report.unguided && report.items.length === 0 && !retest) return { unguided: true, open: [] }
82
- const requirements = read(REQUIREMENTS) ?? ""
83
- const ids = criterionIds(requirements, slice)
84
- const elsewhere = criterionIds(requirements).filter((id) => !ids.includes(id))
92
+ const elsewhere = criterionIds(read(REQUIREMENTS) ?? "").filter((id) => !ids.includes(id))
85
93
  const count = (id: string): number => report.items.filter((i) => i.subject === id).length
86
94
  const wrong = ids.filter((id) => count(id) !== 1)
87
95
  if (wrong.length > 0)
88
96
  refuse(
89
97
  `gtd land: prototype-report: ${PROTOTYPE} needs exactly one chunk headed \`## <ID>: pass|fail|blocked\` for ${wrong.join(", ")}`,
90
98
  )
91
- // A mistyped ID stays open: only another slice's criteria are not this one's to fix.
99
+ // A mistyped ID stays open: only a known criterion outside `ids` is not this test's to fix.
92
100
  const open = report.items.filter((i) => i.verdict !== "pass" && !elsewhere.includes(i.subject))
93
101
  return { unguided: false, open }
94
102
  }
95
103
 
104
+ /**
105
+ * The slice's criteria a person can observe by using the change, by the
106
+ * judge: those tagged `(no hands-on)` are never asked about.
107
+ */
108
+ const observable = async (slice: CriteriaSlice | undefined): Promise<string[]> => {
109
+ const requirements = read(REQUIREMENTS) ?? ""
110
+ const own = handsOnIds(requirements, slice)
111
+ const criteria = (criteriaOf(requirements) ?? []).filter((c) => own.includes(c.id))
112
+ if (criteria.length === 0) return []
113
+ const { answers } = await judge("observable", {
114
+ questions: criteria.map(t.observableQuestion),
115
+ evidence: { requirements },
116
+ message: t.observableMessage(),
117
+ label: "Judging which criteria to test by hand",
118
+ })
119
+ return own.filter((id) => !answered(answers[id], "no", UNOBSERVABLE_MIN_P))
120
+ }
121
+
96
122
  const frozen = (): void => requireCriteriaFrozen(REQUIREMENTS)
97
123
 
98
124
  const testing = async (
99
125
  slice: CriteriaSlice | undefined,
126
+ ids: readonly string[],
100
127
  retest: boolean,
101
128
  ): Promise<ReturnType<typeof requireReport>> => {
102
- await t.agentWithSkills("testing", t.prototypeTestingPrompt(sliceIds(slice), retest), {
129
+ const skipped = criterionIds(read(REQUIREMENTS) ?? "", slice).filter((id) => !ids.includes(id))
130
+ await t.agentWithSkills("testing", t.prototypeTestingPrompt(sliceIds(slice), skipped, retest), {
103
131
  label: retest ? "Re-testing the slice by hand" : "Testing the slice by hand",
104
132
  file: PROTOTYPE,
105
133
  model: coder(),
@@ -107,7 +135,7 @@ const testing = async (
107
135
  // A test that saw exactly what the last round saw leaves the report as it was.
108
136
  allowEmpty: true,
109
137
  })
110
- return requireReport(slice, retest)
138
+ return requireReport(ids, retest)
111
139
  }
112
140
 
113
141
  const fixing = async (slice: CriteriaSlice | undefined, guard?: Guard): Promise<void> => {
@@ -138,10 +166,11 @@ const askPerson = async (name: string, message: string, label: string): Promise<
138
166
  }
139
167
 
140
168
  /**
141
- * Use the slice by hand: a testing turn reports on every criterion, a fix turn
142
- * takes each failure, and the slice is tested again — until the report is
143
- * clean, or `prototypeRounds` fixes are spent and a person decides. `guard`
144
- * holds every fix turn, as it holds the implementation's.
169
+ * Use the slice by hand: a testing turn reports on every criterion a person
170
+ * can observe, a fix turn takes each failure, and the slice is tested again —
171
+ * until the report is clean, or `prototypeRounds` fixes are spent and a person
172
+ * decides. A slice with no such criterion is not tested by hand. `guard` holds
173
+ * every fix turn, as it holds the implementation's.
145
174
  */
146
175
  export const prototypeTest = async (
147
176
  slice: CriteriaSlice | undefined,
@@ -150,10 +179,12 @@ export const prototypeTest = async (
150
179
  const cap = prototypeRounds()
151
180
  if (cap === 0) return
152
181
  await scope("prototype", async () => {
182
+ const ids = await observable(slice)
183
+ if (ids.length === 0) return
153
184
  let fixes = 0
154
185
  let retest = false
155
186
  for (;;) {
156
- const { unguided, open } = await testing(slice, retest)
187
+ const { unguided, open } = await testing(slice, ids, retest)
157
188
  retest = !unguided
158
189
  if (unguided) {
159
190
  const instructed = await askPerson(
@@ -96,9 +96,9 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
96
96
 
97
97
  <!-- base: 0000000 -->
98
98
 
99
- ## calc
99
+ ## Walkthrough
100
100
 
101
- _critical: judge unsure_
101
+ ### calc
102
102
 
103
103
  - [x] ./src/calc.ts#1-2
104
104
  subtract next to add
@@ -109,10 +109,6 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
109
109
  """
110
110
  And step "implement.health.check" changes nothing
111
111
  And step "implement.closing" runs its script
112
- And judge step "implement.coverage" answers:
113
- """
114
- [{"id":"AC-1","answer":"yes","p":0.9}]
115
- """
116
112
  When gtd lands
117
113
  And the process is driven
118
114
  Then the process rests at "build.quality.correctness.reviewing"
@@ -128,8 +124,7 @@ Feature: a refactor that carried the whole feature still gets a quality lap over
128
124
  gtd(human): refactor.build.review.await-review → refactor.build.review.closing
129
125
  gtd(check): refactor.build.review.closing → implement.building
130
126
  gtd(agent): implement.building → implement.health.check
131
- gtd(check): implement.health.check → implement.coverage
132
- gtd(judge): implement.coverage → implement.closing
127
+ gtd(check): implement.health.check → implement.closing
133
128
  gtd(check): implement.closing → build.quality.correctness.reviewing
134
129
  gtd(agent): build.quality.correctness.reviewing → build.review.reviewing
135
130
  """
@@ -100,9 +100,9 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
100
100
 
101
101
  <!-- base: 0000000 -->
102
102
 
103
- ## calc
103
+ ## Walkthrough
104
104
 
105
- _critical: judge unsure_
105
+ ### calc
106
106
 
107
107
  - [x] ./src/calc.ts#1-2
108
108
  add built on the shared op
@@ -124,10 +124,6 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
124
124
  """
125
125
  And step "implement.health.check" changes nothing
126
126
  And step "implement.closing" runs its script
127
- And judge step "implement.coverage" answers:
128
- """
129
- [{"id":"AC-1","answer":"yes","p":0.9}]
130
- """
131
127
  When the process is driven
132
128
  Then the process rests at "build.review.reviewing"
133
129
  And "src/calc.ts" contains "op(a, b, 1)"
@@ -153,8 +149,7 @@ Feature: a refactor-first judgment walks one fixed path to the review gate
153
149
  gtd(human): refactor.build.review.await-review → refactor.build.review.closing
154
150
  gtd(check): refactor.build.review.closing → implement.building
155
151
  gtd(agent): implement.building → implement.health.check
156
- gtd(check): implement.health.check → implement.coverage
157
- gtd(judge): implement.coverage → implement.closing
152
+ gtd(check): implement.health.check → implement.closing
158
153
  gtd(check): implement.closing → build.review.reviewing
159
154
  """
160
155
  And the commit "gtd(human): idle → unwind" has a body containing "Gtd-Var: flag_risk_tier=0"
@@ -110,9 +110,9 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
110
110
 
111
111
  <!-- base: 0000000 -->
112
112
 
113
- ## calc
113
+ ## Walkthrough
114
114
 
115
- _critical: judge unsure_
115
+ ### calc
116
116
 
117
117
  - [x] ./src/calc.ts#1-2
118
118
  add built on the shared op
@@ -181,9 +181,9 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
181
181
 
182
182
  <!-- base: 0000000 -->
183
183
 
184
- ## calc
184
+ ## Walkthrough
185
185
 
186
- _critical: judge unsure_
186
+ ### calc
187
187
 
188
188
  - [x] ./src/calc.ts#1-2
189
189
  add built on the shared op
@@ -234,9 +234,9 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
234
234
 
235
235
  <!-- base: 0000000 -->
236
236
 
237
- ## calc
237
+ ## Walkthrough
238
238
 
239
- _critical: judge unsure_
239
+ ### calc
240
240
 
241
241
  - [x] ./src/calc.ts#1-2
242
242
  add built on the shared op
@@ -259,10 +259,6 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
259
259
  """
260
260
  And step "implement.health.check" changes nothing
261
261
  And step "implement.closing" runs its script
262
- And judge step "implement.coverage" answers:
263
- """
264
- [{"id":"AC-1","answer":"yes","p":0.9}]
265
- """
266
262
  When the process is driven
267
263
  Then the process rests at "build.review.reviewing"
268
264
  And "src/calc.ts" contains "op(a, b, -1)"
@@ -282,8 +278,7 @@ Feature: refactor-first writes a refactor note, refactors on its own, then rebui
282
278
  gtd(human): refactor.build.review.await-review → refactor.build.review.closing
283
279
  gtd(check): refactor.build.review.closing → implement.building
284
280
  gtd(agent): implement.building → implement.health.check
285
- gtd(check): implement.health.check → implement.coverage
286
- gtd(judge): implement.coverage → implement.closing
281
+ gtd(check): implement.health.check → implement.closing
287
282
  gtd(check): implement.closing → build.review.reviewing
288
283
  """
289
284
  And the output lines of gtd "slices" start with:
@@ -303,9 +303,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
303
303
 
304
304
  <!-- base: 0000000 -->
305
305
 
306
- ## calc
306
+ ## Walkthrough
307
307
 
308
- _critical: judge unsure_
308
+ ### calc
309
309
 
310
310
  - [ ] ./src/calc.ts#1-2
311
311
  add built on the shared op[^why]
@@ -342,9 +342,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
342
342
 
343
343
  <!-- base: 0000000 -->
344
344
 
345
- ## calc
345
+ ## Walkthrough
346
346
 
347
- _critical: judge unsure_
347
+ ### calc
348
348
 
349
349
  - [ ] ./src/calc.ts#1-2
350
350
  add built on the shared op
@@ -382,9 +382,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
382
382
 
383
383
  <!-- base: 0000000 -->
384
384
 
385
- ## calc
385
+ ## Walkthrough
386
386
 
387
- _critical: judge unsure_
387
+ ### calc
388
388
 
389
389
  - [ ] ./src/calc.ts#1-1
390
390
  why a shared op?
@@ -475,9 +475,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
475
475
 
476
476
  <!-- base: 0000000 -->
477
477
 
478
- ## calc
478
+ ## Walkthrough
479
479
 
480
- _critical: judge unsure_
480
+ ### calc
481
481
 
482
482
  - [ ] ./src/calc.ts#1-2
483
483
  add built on the shared op — this should change behaviour, not just structure
@@ -521,9 +521,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
521
521
 
522
522
  <!-- base: 0000000 -->
523
523
 
524
- ## calc
524
+ ## Walkthrough
525
525
 
526
- _critical: judge unsure_
526
+ ### calc
527
527
 
528
528
  - [ ] ./src/calc.ts#1-2 rename the helper
529
529
  add built on the shared op
@@ -550,9 +550,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
550
550
 
551
551
  <!-- base: 0000000 -->
552
552
 
553
- ## calc
553
+ ## Walkthrough
554
554
 
555
- _critical: judge unsure_
555
+ ### calc
556
556
 
557
557
  - [ ] ./src/calc.ts#1-2
558
558
  add built on the shared op, lovely work
@@ -571,9 +571,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
571
571
 
572
572
  <!-- base: 0000000 -->
573
573
 
574
- ## calc
574
+ ## Walkthrough
575
575
 
576
- _critical: judge unsure_
576
+ ### calc
577
577
 
578
578
  - [ ] ./src/calc.ts#1-2
579
579
  add built on the shared op[^q]
@@ -615,10 +615,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
615
615
  """
616
616
  And step "implement.health.check" changes nothing
617
617
  And step "implement.closing" runs its script
618
- And judge step "implement.coverage" answers:
619
- """
620
- [{"id":"AC-1","answer":"yes","p":0.9}]
621
- """
622
618
  When the process is driven
623
619
  Then the process rests at "refactor.build.review.await-review"
624
620
  Given a file ".gtd/REVIEW.md" with:
@@ -627,9 +623,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
627
623
 
628
624
  <!-- base: 0000000 -->
629
625
 
630
- ## calc
626
+ ## Walkthrough
631
627
 
632
- _critical: judge unsure_
628
+ ### calc
633
629
 
634
630
  - [ ] ./src/calc.ts#1-2
635
631
  add built on the shared op[^q]
@@ -661,9 +657,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
661
657
 
662
658
  <!-- base: 0000000 -->
663
659
 
664
- ## calc
660
+ ## Walkthrough
665
661
 
666
- _critical: judge unsure_
662
+ ### calc
667
663
 
668
664
  - [ ] ./src/calc.ts#1-2
669
665
  add built on the shared op[^q]
@@ -702,10 +698,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
702
698
  """
703
699
  And step "implement.health.check" changes nothing
704
700
  And step "implement.closing" runs its script
705
- And judge step "implement.coverage" answers:
706
- """
707
- [{"id":"AC-1","answer":"yes","p":0.9}]
708
- """
709
701
  When the process is driven
710
702
  Then the process rests at "refactor.build.review.await-review"
711
703
  Given a file ".gtd/REVIEW.md" with:
@@ -714,9 +706,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
714
706
 
715
707
  <!-- base: 0000000 -->
716
708
 
717
- ## calc
709
+ ## Walkthrough
718
710
 
719
- _critical: judge unsure_
711
+ ### calc
720
712
 
721
713
  - [ ] ./src/calc.ts#1-2
722
714
  add built on the shared op[^n1]
@@ -742,9 +734,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
742
734
 
743
735
  <!-- base: 0000000 -->
744
736
 
745
- ## calc
737
+ ## Walkthrough
746
738
 
747
- _critical: judge unsure_
739
+ ### calc
748
740
 
749
741
  - [ ] ./src/calc.ts#1-2
750
742
  add built on the shared op[^n1]
@@ -771,9 +763,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
771
763
 
772
764
  <!-- base: 0000000 -->
773
765
 
774
- ## calc
766
+ ## Walkthrough
775
767
 
776
- _critical: judge unsure_
768
+ ### calc
777
769
 
778
770
  - [ ] ./src/calc.ts#1-2
779
771
  add built on the shared op[^q]
@@ -805,9 +797,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
805
797
 
806
798
  <!-- base: 0000000 -->
807
799
 
808
- ## calc
800
+ ## Walkthrough
809
801
 
810
- _critical: judge unsure_
802
+ ### calc
811
803
 
812
804
  - [ ] ./src/calc.ts#1-2
813
805
  add built on the shared op[^n1]
@@ -833,9 +825,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
833
825
 
834
826
  <!-- base: 0000000 -->
835
827
 
836
- ## calc
828
+ ## Walkthrough
837
829
 
838
- _critical: judge unsure_
830
+ ### calc
839
831
 
840
832
  - [ ] ./src/calc.ts#1-2
841
833
  add built on the shared op - this should change behaviour, not just structure[^q]
@@ -867,9 +859,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
867
859
 
868
860
  <!-- base: 0000000 -->
869
861
 
870
- ## calc
862
+ ## Walkthrough
871
863
 
872
- _critical: judge unsure_
864
+ ### calc
873
865
 
874
866
  - [ ] ./src/calc.ts#1-2
875
867
  add built on the shared op - this should change behaviour, not just structure[^q]
@@ -914,9 +906,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
914
906
 
915
907
  <!-- base: 0000000 -->
916
908
 
917
- ## calc
909
+ ## Walkthrough
918
910
 
919
- _critical: judge unsure_
911
+ ### calc
920
912
 
921
913
  - [ ] ./src/calc.ts#1-2
922
914
  add built on the shared op[^q]
@@ -948,9 +940,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
948
940
 
949
941
  <!-- base: 0000000 -->
950
942
 
951
- ## calc
943
+ ## Walkthrough
952
944
 
953
- _critical: judge unsure_
945
+ ### calc
954
946
 
955
947
  - [ ] ./src/calc.ts#1-2
956
948
  add built on the shared op[^q]
@@ -988,10 +980,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
988
980
  """
989
981
  And step "implement.health.check" changes nothing
990
982
  And step "implement.closing" runs its script
991
- And judge step "implement.coverage" answers:
992
- """
993
- [{"id":"AC-1","answer":"yes","p":0.9}]
994
- """
995
983
  When the process is driven
996
984
  Then the process rests at "refactor.build.review.await-review"
997
985
  Given a file ".gtd/REVIEW.md" with:
@@ -1000,9 +988,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1000
988
 
1001
989
  <!-- base: 0000000 -->
1002
990
 
1003
- ## calc
991
+ ## Walkthrough
1004
992
 
1005
- _critical: judge unsure_
993
+ ### calc
1006
994
 
1007
995
  - [ ] ./src/calc.ts#1-2
1008
996
  add built on the shared op, lovely work[^q]
@@ -1034,9 +1022,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1034
1022
 
1035
1023
  <!-- base: 0000000 -->
1036
1024
 
1037
- ## calc
1025
+ ## Walkthrough
1038
1026
 
1039
- _critical: judge unsure_
1027
+ ### calc
1040
1028
 
1041
1029
  - [ ] ./src/calc.ts#1-2
1042
1030
  add built on the shared op, lovely work[^q]
@@ -1079,10 +1067,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1079
1067
  """
1080
1068
  And step "implement.health.check" changes nothing
1081
1069
  And step "implement.closing" runs its script
1082
- And judge step "implement.coverage" answers:
1083
- """
1084
- [{"id":"AC-1","answer":"yes","p":0.9}]
1085
- """
1086
1070
  When the process is driven
1087
1071
  Then the process rests at "refactor.build.review.await-review"
1088
1072
  Given a file ".gtd/REVIEW.md" with:
@@ -1091,9 +1075,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1091
1075
 
1092
1076
  <!-- base: 0000000 -->
1093
1077
 
1094
- ## calc
1078
+ ## Walkthrough
1095
1079
 
1096
- _critical: judge unsure_
1080
+ ### calc
1097
1081
 
1098
1082
  - [x] ./src/calc.ts#1-2
1099
1083
  add built on the shared op
@@ -1116,9 +1100,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1116
1100
 
1117
1101
  <!-- base: 0000000 -->
1118
1102
 
1119
- ## calc
1103
+ ## Walkthrough
1120
1104
 
1121
- _critical: judge unsure_
1105
+ ### calc
1122
1106
 
1123
1107
  - [ ] ./src/calc.ts#1-2
1124
1108
  add built on the shared op — rename `sign` to `direction`
@@ -1147,9 +1131,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1147
1131
 
1148
1132
  <!-- base: 0000000 -->
1149
1133
 
1150
- ## calc
1134
+ ## Walkthrough
1151
1135
 
1152
- _critical: judge unsure_
1136
+ ### calc
1153
1137
 
1154
1138
  - [ ] ./src/calc.ts#1-2
1155
1139
  add built on the shared op — rename `sign` to `direction`
@@ -1180,9 +1164,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1180
1164
  Then the process rests at "refactor.build.review.await-review"
1181
1165
  And ".gtd/REVIEW.md" contains:
1182
1166
  """
1183
- ## calc
1167
+ ## Walkthrough
1184
1168
 
1185
- _critical: judge unsure_
1169
+ ### calc
1186
1170
 
1187
1171
  - [ ] ./src/calc.ts#1-2
1188
1172
  add built on the shared op
@@ -1292,10 +1276,6 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1292
1276
  """
1293
1277
  And step "implement.health.check" changes nothing
1294
1278
  And step "implement.closing" runs its script
1295
- And judge step "implement.coverage" answers:
1296
- """
1297
- [{"id":"AC-1","answer":"yes","p":0.9}]
1298
- """
1299
1279
  When the process is driven
1300
1280
  Then the process rests at "refactor.build.review.await-review"
1301
1281
  Given a file ".gtd/REVIEW.md" with:
@@ -1304,9 +1284,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1304
1284
 
1305
1285
  <!-- base: 0000000 -->
1306
1286
 
1307
- ## calc
1287
+ ## Walkthrough
1308
1288
 
1309
- _critical: judge unsure_
1289
+ ### calc
1310
1290
 
1311
1291
  - [x] ./src/calc.ts#1-2
1312
1292
  add built on the shared op
@@ -1495,9 +1475,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1495
1475
 
1496
1476
  <!-- base: 0000000 -->
1497
1477
 
1498
- ## calc
1478
+ ## Walkthrough
1499
1479
 
1500
- _critical: judge unsure_
1480
+ ### calc
1501
1481
 
1502
1482
  - [ ] ./src/calc.ts#1-2
1503
1483
  add built on the shared op[^why]
@@ -1537,9 +1517,9 @@ Feature: the refactor slice is reviewed on its own before the feature is impleme
1537
1517
 
1538
1518
  <!-- base: 0000000 -->
1539
1519
 
1540
- ## calc
1520
+ ## Walkthrough
1541
1521
 
1542
- _critical: judge unsure_
1522
+ ### calc
1543
1523
 
1544
1524
  - [ ] ./src/calc.ts#1-2
1545
1525
  add built on the shared op