rhachet-roles-ehmpathy 1.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 (165) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.test/genContextLogTrail.d.ts +2 -0
  3. package/dist/.test/genContextLogTrail.js +12 -0
  4. package/dist/.test/genContextLogTrail.js.map +1 -0
  5. package/dist/.test/genContextStitchTrail.d.ts +2 -0
  6. package/dist/.test/genContextStitchTrail.js +8 -0
  7. package/dist/.test/genContextStitchTrail.js.map +1 -0
  8. package/dist/.test/getContextOpenAI.d.ts +2 -0
  9. package/dist/.test/getContextOpenAI.js +18 -0
  10. package/dist/.test/getContextOpenAI.js.map +1 -0
  11. package/dist/contract/cases/mechanicGoalStubout.integration.test.d.ts +0 -0
  12. package/dist/contract/cases/mechanicGoalStubout.integration.test.js +2 -0
  13. package/dist/contract/cases/mechanicGoalStubout.integration.test.js.map +1 -0
  14. package/dist/contract/cases/mechanicStubFillout.integration.test.d.ts +0 -0
  15. package/dist/contract/cases/mechanicStubFillout.integration.test.js +2 -0
  16. package/dist/contract/cases/mechanicStubFillout.integration.test.js.map +1 -0
  17. package/dist/contract/commands/codegenBriefOptions.d.ts +1 -0
  18. package/dist/contract/commands/codegenBriefOptions.js +57 -0
  19. package/dist/contract/commands/codegenBriefOptions.js.map +1 -0
  20. package/dist/data/sdk/sdkOpenAi.d.ts +16 -0
  21. package/dist/data/sdk/sdkOpenAi.js +38 -0
  22. package/dist/data/sdk/sdkOpenAi.js.map +1 -0
  23. package/dist/index.d.ts +0 -0
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/logic/artifact/genStepArtSet.d.ts +13 -0
  27. package/dist/logic/artifact/genStepArtSet.integration.test.d.ts +1 -0
  28. package/dist/logic/artifact/genStepArtSet.integration.test.js +142 -0
  29. package/dist/logic/artifact/genStepArtSet.integration.test.js.map +1 -0
  30. package/dist/logic/artifact/genStepArtSet.js +29 -0
  31. package/dist/logic/artifact/genStepArtSet.js.map +1 -0
  32. package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.d.ts +19 -0
  33. package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.d.ts +1 -0
  34. package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.js +97 -0
  35. package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.js.map +1 -0
  36. package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.js +84 -0
  37. package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.js.map +1 -0
  38. package/dist/logic/roles/designer/getDesignerBrief.Options.codegen.d.ts +10 -0
  39. package/dist/logic/roles/designer/getDesignerBrief.Options.codegen.js +14 -0
  40. package/dist/logic/roles/designer/getDesignerBrief.Options.codegen.js.map +1 -0
  41. package/dist/logic/roles/designer/getDesignerBrief.d.ts +13 -0
  42. package/dist/logic/roles/designer/getDesignerBrief.js +21 -0
  43. package/dist/logic/roles/designer/getDesignerBrief.js.map +1 -0
  44. package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.d.ts +26 -0
  45. package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.d.ts +1 -0
  46. package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.js +77 -0
  47. package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.js.map +1 -0
  48. package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.js +53 -0
  49. package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.js.map +1 -0
  50. package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.d.ts +22 -0
  51. package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.d.ts +1 -0
  52. package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.js +142 -0
  53. package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.js.map +1 -0
  54. package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.js +55 -0
  55. package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.js.map +1 -0
  56. package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.d.ts +26 -0
  57. package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.d.ts +1 -0
  58. package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.js +71 -0
  59. package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.js.map +1 -0
  60. package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.js +53 -0
  61. package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.js.map +1 -0
  62. package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.d.ts +22 -0
  63. package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.d.ts +1 -0
  64. package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.js +130 -0
  65. package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.js.map +1 -0
  66. package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.js +48 -0
  67. package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.js.map +1 -0
  68. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.d.ts +17 -0
  69. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.integration.test.d.ts +1 -0
  70. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.integration.test.js +107 -0
  71. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.integration.test.js.map +1 -0
  72. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.js +76 -0
  73. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.expand.ResourcesAndMechanisms.js.map +1 -0
  74. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.imagine.ResourcesAndMechanisms.d.ts +17 -0
  75. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.imagine.ResourcesAndMechanisms.js +73 -0
  76. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.imagine.ResourcesAndMechanisms.js.map +1 -0
  77. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.d.ts +18 -0
  78. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.integration.test.d.ts +1 -0
  79. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.integration.test.js +73 -0
  80. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.integration.test.js.map +1 -0
  81. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.js +62 -0
  82. package/dist/logic/roles/ecologist/distill/.deprecate/distillDomain.refine.ResourcesAndMechanisms.js.map +1 -0
  83. package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.d.ts +16 -0
  84. package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.integration.test.d.ts +1 -0
  85. package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.integration.test.js +120 -0
  86. package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.integration.test.js.map +1 -0
  87. package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.js +69 -0
  88. package/dist/logic/roles/ecologist/distill/distillDomain.ActionsAndActors.js.map +1 -0
  89. package/dist/logic/roles/ecologist/getEcologistBrief.Options.codegen.d.ts +10 -0
  90. package/dist/logic/roles/ecologist/getEcologistBrief.Options.codegen.js +39 -0
  91. package/dist/logic/roles/ecologist/getEcologistBrief.Options.codegen.js.map +1 -0
  92. package/dist/logic/roles/ecologist/getEcologistBrief.d.ts +13 -0
  93. package/dist/logic/roles/ecologist/getEcologistBrief.js +21 -0
  94. package/dist/logic/roles/ecologist/getEcologistBrief.js.map +1 -0
  95. package/dist/logic/roles/getRoleRegistry.d.ts +8 -0
  96. package/dist/logic/roles/getRoleRegistry.js +19 -0
  97. package/dist/logic/roles/getRoleRegistry.js.map +1 -0
  98. package/dist/logic/roles/getRoleRegistry.readme.d.ts +5 -0
  99. package/dist/logic/roles/getRoleRegistry.readme.js +75 -0
  100. package/dist/logic/roles/getRoleRegistry.readme.js.map +1 -0
  101. package/dist/logic/roles/mechanic/codediff/getRefOrgPatterns.d.ts +5 -0
  102. package/dist/logic/roles/mechanic/codediff/getRefOrgPatterns.js +22 -0
  103. package/dist/logic/roles/mechanic/codediff/getRefOrgPatterns.js.map +1 -0
  104. package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.d.ts +34 -0
  105. package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.d.ts +1 -0
  106. package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.js +246 -0
  107. package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.js.map +1 -0
  108. package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.js +56 -0
  109. package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.js.map +1 -0
  110. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.d.ts +34 -0
  111. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.d.ts +1 -0
  112. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.js +144 -0
  113. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.js.map +1 -0
  114. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.js +33 -0
  115. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.js.map +1 -0
  116. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.d.ts +34 -0
  117. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.d.ts +1 -0
  118. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.js +138 -0
  119. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.js.map +1 -0
  120. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.js +49 -0
  121. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.js.map +1 -0
  122. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.d.ts +28 -0
  123. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.js +35 -0
  124. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.js.map +1 -0
  125. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.d.ts +28 -0
  126. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.d.ts +1 -0
  127. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.js +294 -0
  128. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.js.map +1 -0
  129. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.js +44 -0
  130. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.js.map +1 -0
  131. package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.d.ts +38 -0
  132. package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.d.ts +1 -0
  133. package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.js +162 -0
  134. package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.js.map +1 -0
  135. package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.js +32 -0
  136. package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.js.map +1 -0
  137. package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.d.ts +56 -0
  138. package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.d.ts +1 -0
  139. package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.js +169 -0
  140. package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.js.map +1 -0
  141. package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.js +30 -0
  142. package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.js.map +1 -0
  143. package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.d.ts +53 -0
  144. package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.d.ts +1 -0
  145. package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.js +203 -0
  146. package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.js.map +1 -0
  147. package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.js +72 -0
  148. package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.js.map +1 -0
  149. package/dist/logic/roles/mechanic/getMechanicBrief.Options.codegen.d.ts +10 -0
  150. package/dist/logic/roles/mechanic/getMechanicBrief.Options.codegen.js +35 -0
  151. package/dist/logic/roles/mechanic/getMechanicBrief.Options.codegen.js.map +1 -0
  152. package/dist/logic/roles/mechanic/getMechanicBrief.d.ts +13 -0
  153. package/dist/logic/roles/mechanic/getMechanicBrief.js +21 -0
  154. package/dist/logic/roles/mechanic/getMechanicBrief.js.map +1 -0
  155. package/dist/logic/roles/mechanic/getMechanicRole.d.ts +2 -0
  156. package/dist/logic/roles/mechanic/getMechanicRole.js +157 -0
  157. package/dist/logic/roles/mechanic/getMechanicRole.js.map +1 -0
  158. package/dist/logic/roles/mechanic/study/routeStudyAsk.d.ts +19 -0
  159. package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.d.ts +1 -0
  160. package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.js +98 -0
  161. package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.js.map +1 -0
  162. package/dist/logic/roles/mechanic/study/routeStudyAsk.js +30 -0
  163. package/dist/logic/roles/mechanic/study/routeStudyAsk.js.map +1 -0
  164. package/package.json +95 -0
  165. package/readme.md +110 -0
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /*
3
+ # stub
4
+ we have 4 roles
5
+
6
+ 1. ecologist - operates at a fundamental, real world domain scale; independent of software, cares only about fundamental systems
7
+
8
+ 2. architect - operates at an organizational, cross-repo scale. cares about bounded contexts, separation of concerns, and low trust contracts. maximizes ubiqlang and evolvability
9
+
10
+ 3. designer - operates at feature, cross-repo scale. cares about behavioral and techical pit-of-success design. maximizes evolvability, maintainability, and reliability
11
+
12
+ 4. mechanic - operates at the feature, single-repo scale. cares about writing the most maintainable and observable code possible. thinks about the engineer who's going to be woken-up at 3am with a pagerduty alarm and going to have to read the code
13
+
14
+ all roles maximize empathy for developers and customers.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.EHMPATHY_REGISTRY_README = void 0;
18
+ /**
19
+ * .what = the readme for the ehpathy role registry
20
+ * todo: how to keep in sync with @gitroot/readme?
21
+ */
22
+ exports.EHMPATHY_REGISTRY_README = `
23
+ # 🤝 ehmpathy role registry
24
+
25
+ This registry defines the four core roles used to craft empathetic, evolvable, and maintainable software.
26
+
27
+ Each role represents a lens — a way of thinking about the system — grounded in empathy for both the **people using the product** and the **engineers maintaining the system**.
28
+
29
+ All roles maximize:
30
+
31
+ - clarity over cleverness
32
+ - maintainability over magic
33
+ - empathy over ego
34
+
35
+ ---
36
+
37
+ ## 🌱 Ecologist
38
+
39
+ - **scale**: domain fundamentals, real-world systems
40
+ - **focus**: what changes, what flows, what matters — ignoring software
41
+ - **maximizes**: fidelity to the real world
42
+
43
+ Used to understand the physics, incentives, and causal flows beneath the system.
44
+
45
+ ---
46
+
47
+ ## 🏛 Architect
48
+
49
+ - **scale**: cross-repo, organizational boundaries
50
+ - **focus**: bounded contexts, trust layers, language design
51
+ - **maximizes**: ubiqlang, evolvability, decoupling
52
+
53
+ Used to shape contracts and interfaces that survive change.
54
+
55
+ ---
56
+
57
+ ## 🎨 Designer
58
+
59
+ - **scale**: feature-level, user-experience layer
60
+ - **focus**: nudges, guardrails, pit-of-success defaults
61
+ - **maximizes**: usability, ergonomics, reliability
62
+
63
+ Used to sculpt workflows and interfaces that feel obvious and safe.
64
+
65
+ ---
66
+
67
+ ## 🔧 Mechanic
68
+
69
+ - **scale**: repo-level, implementation detail
70
+ - **focus**: maintainability, observability, readability
71
+ - **maximizes**: empathy for the 3am on-call engineer
72
+
73
+ Used to write and revise the actual logic that runs the system.
74
+ `.trim();
75
+ //# sourceMappingURL=getRoleRegistry.readme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRoleRegistry.readme.js","sourceRoot":"","sources":["../../../src/logic/roles/getRoleRegistry.readme.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;EAaE;;;AAEF;;;GAGG;AACU,QAAA,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDrC,CAAC,IAAI,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Artifact } from 'rhachet-artifact';
2
+ import { GitFile } from 'rhachet-artifact-git';
3
+ export declare const getRefOrgPatterns: (input: {
4
+ purpose: 'prepare' | 'produce';
5
+ }) => Artifact<typeof GitFile>[];
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRefOrgPatterns = void 0;
4
+ const type_fns_1 = require("type-fns");
5
+ const getMechanicBrief_1 = require("../getMechanicBrief");
6
+ const getRefOrgPatterns = (input) => [
7
+ // genArtifactGitFile({
8
+ // uri: __dirname + '/.refs/pattern.mech.args.input-context.md',
9
+ // }),
10
+ // genArtifactGitFile({
11
+ // uri: __dirname + '/.refs/pattern.mech.arrowonly.md',
12
+ // }),
13
+ // genArtifactGitFile({
14
+ // uri: __dirname + '/.refs/pattern.mech.what-why.md',
15
+ // }),
16
+ (0, getMechanicBrief_1.getMechanicBrief)('codestyle/_mech.compressed.md'),
17
+ input.purpose === 'prepare'
18
+ ? (0, getMechanicBrief_1.getMechanicBrief)('codestyle/mech.tests.given-when-then.md')
19
+ : undefined,
20
+ ].filter(type_fns_1.isPresent);
21
+ exports.getRefOrgPatterns = getRefOrgPatterns;
22
+ //# sourceMappingURL=getRefOrgPatterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRefOrgPatterns.js","sourceRoot":"","sources":["../../../../../src/logic/roles/mechanic/codediff/getRefOrgPatterns.ts"],"names":[],"mappings":";;;AAEA,uCAAqC;AAErC,0DAAuD;AAEhD,MAAM,iBAAiB,GAAG,CAAC,KAEjC,EAA8B,EAAE,CAC/B;IACE,uBAAuB;IACvB,kEAAkE;IAClE,MAAM;IACN,uBAAuB;IACvB,yDAAyD;IACzD,MAAM;IACN,uBAAuB;IACvB,wDAAwD;IACxD,MAAM;IACN,IAAA,mCAAgB,EAAC,+BAA+B,CAAC;IACjD,KAAK,CAAC,OAAO,KAAK,SAAS;QACzB,CAAC,CAAC,IAAA,mCAAgB,EAAC,yCAAyC,CAAC;QAC7D,CAAC,CAAC,SAAS;CACd,CAAC,MAAM,CAAC,oBAAS,CAAC,CAAC;AAjBT,QAAA,iBAAiB,qBAiBR"}
@@ -0,0 +1,34 @@
1
+ import { GStitcher, Threads, RoleContext } from 'rhachet';
2
+ import { Artifact } from 'rhachet-artifact';
3
+ import { GitFile } from 'rhachet-artifact-git';
4
+ import { ContextOpenAI } from '../../../../data/sdk/sdkOpenAi';
5
+ interface ThreadsDesired extends Threads<{
6
+ artist: RoleContext<'artist', {
7
+ ask: string;
8
+ art: {
9
+ inflight: Artifact<typeof GitFile>;
10
+ };
11
+ org: {
12
+ patterns: Artifact<typeof GitFile>[];
13
+ };
14
+ scene: {
15
+ coderefs: Artifact<typeof GitFile>[];
16
+ };
17
+ }>;
18
+ student: RoleContext<'student', {
19
+ art: {
20
+ claims: Artifact<typeof GitFile>;
21
+ };
22
+ }>;
23
+ critic: RoleContext<'critic', {
24
+ art: {
25
+ feedback: Artifact<typeof GitFile> | null;
26
+ };
27
+ }>;
28
+ }> {
29
+ }
30
+ type StitcherDesired = GStitcher<ThreadsDesired, ContextOpenAI & GStitcher['context'], {
31
+ content: string;
32
+ }>;
33
+ export declare const routeArtistCodeDiff: import("rhachet").Stitcher<StitcherDesired>;
34
+ export {};
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const helpful_errors_1 = require("helpful-errors");
4
+ const rhachet_1 = require("rhachet");
5
+ const rhachet_artifact_git_1 = require("rhachet-artifact-git");
6
+ const test_fns_1 = require("test-fns");
7
+ const genContextLogTrail_1 = require("../../../../.test/genContextLogTrail");
8
+ const genContextStitchTrail_1 = require("../../../../.test/genContextStitchTrail");
9
+ const getContextOpenAI_1 = require("../../../../.test/getContextOpenAI");
10
+ const getMechanicBrief_1 = require("../getMechanicBrief");
11
+ const getRefOrgPatterns_1 = require("./getRefOrgPatterns");
12
+ const routeArtistCodeDiff_1 = require("./routeArtistCodeDiff");
13
+ describe('routeArtistCodeDiff', () => {
14
+ const context = {
15
+ ...(0, genContextLogTrail_1.genContextLogTrail)(),
16
+ ...(0, genContextStitchTrail_1.genContextStitchTrail)(),
17
+ ...(0, getContextOpenAI_1.getContextOpenAI)(),
18
+ };
19
+ const route = routeArtistCodeDiff_1.routeArtistCodeDiff;
20
+ const claimsArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
21
+ uri: __dirname + '/.test/multiply.claims.md',
22
+ }, { access: 'readonly' });
23
+ (0, test_fns_1.given)('we want to multiply', () => {
24
+ const coderefArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
25
+ uri: __dirname + '/.temp/add.ts',
26
+ });
27
+ (0, test_fns_1.given)('inflightArt is empty, writes net new', () => {
28
+ const askText = 'add a multiply function to the codebase';
29
+ const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
30
+ uri: __dirname + '/.temp/multiply.make.ts',
31
+ });
32
+ beforeEach(async () => {
33
+ await inflightArt.del();
34
+ await coderefArt.set({
35
+ content: 'export const add = (a: number, b: number) => a + b;',
36
+ });
37
+ });
38
+ (0, test_fns_1.when)('executing the route', () => {
39
+ const threads = (0, test_fns_1.usePrep)(async () => {
40
+ return {
41
+ artist: await (0, rhachet_1.enrollThread)({
42
+ role: 'artist',
43
+ stash: {
44
+ ask: askText,
45
+ art: { inflight: inflightArt },
46
+ scene: { coderefs: [coderefArt] },
47
+ org: {
48
+ patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
49
+ },
50
+ },
51
+ inherit: {
52
+ traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
53
+ },
54
+ }),
55
+ student: await (0, rhachet_1.enrollThread)({
56
+ role: 'student',
57
+ stash: {
58
+ art: { claims: claimsArt },
59
+ },
60
+ }),
61
+ critic: await (0, rhachet_1.enrollThread)({
62
+ role: 'critic',
63
+ stash: {
64
+ art: { feedback: null }, // no feedback yet
65
+ },
66
+ }),
67
+ };
68
+ });
69
+ (0, test_fns_1.then)('writes updated diff content to the target artifact', async () => {
70
+ const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
71
+ const file = await inflightArt.get();
72
+ const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
73
+ expect(content).toMatch(/multiply/);
74
+ expect(content.length).toBeGreaterThan(10);
75
+ expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
76
+ });
77
+ });
78
+ });
79
+ (0, test_fns_1.given)('inflightArt has prior content, asks for readability diff', () => {
80
+ const askText = 'improve the readability of the multiply function';
81
+ const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
82
+ uri: __dirname + '/.temp/multiply.readable.ts',
83
+ });
84
+ beforeEach(async () => {
85
+ await inflightArt.set({
86
+ content: 'export const multiply=(a,b)=>a*b;',
87
+ });
88
+ await coderefArt.set({
89
+ content: `
90
+ /**
91
+ * .what = adds two numbers together
92
+ * .why = used to compute a total or combine numeric values
93
+ */
94
+ export const add = (input: [number, number]) => input[0] + input[1];
95
+ `.trim(),
96
+ });
97
+ });
98
+ (0, test_fns_1.when)('executing the route', () => {
99
+ const threads = (0, test_fns_1.usePrep)(async () => ({
100
+ artist: await (0, rhachet_1.enrollThread)({
101
+ role: 'artist',
102
+ stash: {
103
+ ask: askText,
104
+ art: { inflight: inflightArt },
105
+ scene: { coderefs: [coderefArt] },
106
+ org: {
107
+ patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
108
+ },
109
+ },
110
+ inherit: {
111
+ traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
112
+ },
113
+ }),
114
+ student: await (0, rhachet_1.enrollThread)({
115
+ role: 'student',
116
+ stash: {
117
+ art: { claims: claimsArt },
118
+ },
119
+ }),
120
+ critic: await (0, rhachet_1.enrollThread)({
121
+ role: 'critic',
122
+ stash: {
123
+ art: { feedback: null }, // no feedback yet
124
+ },
125
+ }),
126
+ }));
127
+ (0, test_fns_1.then)('rewrites inflight with a more readable version', async () => {
128
+ const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
129
+ const file = await inflightArt.get();
130
+ const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
131
+ expect(content).toMatch(/multiply/);
132
+ expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
133
+ });
134
+ });
135
+ });
136
+ (0, test_fns_1.given)('inflightArt has prior content, responds to critic feedback, has blockers', () => {
137
+ const askText = 'improve the readability of the multiply function';
138
+ const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
139
+ uri: __dirname + '/.test/multiply.feedback.hasblockers.md',
140
+ }, { access: 'readonly' });
141
+ const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
142
+ uri: __dirname + '/.temp/multiply.feedbacked.hadblockers.ts',
143
+ });
144
+ beforeEach(async () => {
145
+ await inflightArt.set({
146
+ content: 'export const multiply=(a,b)=>a*b;',
147
+ });
148
+ });
149
+ (0, test_fns_1.when)('executing the route', () => {
150
+ const threads = (0, test_fns_1.usePrep)(async () => ({
151
+ artist: await (0, rhachet_1.enrollThread)({
152
+ role: 'artist',
153
+ stash: {
154
+ ask: askText,
155
+ art: { inflight: inflightArt },
156
+ scene: { coderefs: [] },
157
+ org: {
158
+ patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
159
+ },
160
+ },
161
+ inherit: {
162
+ traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
163
+ },
164
+ }),
165
+ student: await (0, rhachet_1.enrollThread)({
166
+ role: 'student',
167
+ stash: {
168
+ art: { claims: claimsArt },
169
+ },
170
+ }),
171
+ critic: await (0, rhachet_1.enrollThread)({
172
+ role: 'critic',
173
+ stash: {
174
+ art: { feedback: feedbackArt },
175
+ },
176
+ }),
177
+ }));
178
+ (0, test_fns_1.then)('responds to feedback', async () => {
179
+ const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
180
+ const file = await inflightArt.get();
181
+ const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
182
+ expect(content).toMatch(/multiply/);
183
+ expect(content).toMatch(/\}\)/); // should have context input
184
+ expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
185
+ });
186
+ });
187
+ });
188
+ (0, test_fns_1.given)('inflightArt has prior content, responds to critic feedback, nonblockers', () => {
189
+ const askText = 'improve the readability of the multiply function';
190
+ const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
191
+ uri: __dirname + '/.test/multiply.feedback.nonblockers.md',
192
+ }, { access: 'readonly' });
193
+ const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
194
+ uri: __dirname + '/.temp/multiply.feedbacked.nonblockers.ts',
195
+ });
196
+ beforeEach(async () => {
197
+ await inflightArt.set({
198
+ content: `
199
+ export const multiply = ({ a, b }: { a: number, b: number }): number => {
200
+ return a * b;
201
+ };
202
+ `,
203
+ });
204
+ });
205
+ (0, test_fns_1.when)('executing the route', () => {
206
+ const threads = (0, test_fns_1.usePrep)(async () => ({
207
+ artist: await (0, rhachet_1.enrollThread)({
208
+ role: 'artist',
209
+ stash: {
210
+ ask: askText,
211
+ art: { inflight: inflightArt },
212
+ scene: { coderefs: [] },
213
+ org: {
214
+ patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
215
+ },
216
+ },
217
+ inherit: {
218
+ traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
219
+ },
220
+ }),
221
+ student: await (0, rhachet_1.enrollThread)({
222
+ role: 'student',
223
+ stash: {
224
+ art: { claims: claimsArt },
225
+ },
226
+ }),
227
+ critic: await (0, rhachet_1.enrollThread)({
228
+ role: 'critic',
229
+ stash: {
230
+ art: { feedback: feedbackArt },
231
+ },
232
+ }),
233
+ }));
234
+ (0, test_fns_1.then)('responds to feedback', async () => {
235
+ const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
236
+ const file = await inflightArt.get();
237
+ const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
238
+ expect(content).toMatch(/multiply/);
239
+ expect(content).toMatch(/\}\)/); // should have context input
240
+ expect(result.threads.artist.stitches.length).toBeGreaterThan(0);
241
+ });
242
+ });
243
+ });
244
+ });
245
+ });
246
+ //# sourceMappingURL=routeArtistCodeDiff.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeArtistCodeDiff.integration.test.js","sourceRoot":"","sources":["../../../../../src/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.routeArtistCodeDiff = void 0;
4
+ const rhachet_1 = require("rhachet");
5
+ const sdkOpenAi_1 = require("../../../../data/sdk/sdkOpenAi");
6
+ const genStepArtSet_1 = require("../../../artifact/genStepArtSet");
7
+ const getMechanicBrief_1 = require("../getMechanicBrief");
8
+ const template = (0, rhachet_1.genTemplate)({
9
+ ref: { uri: __dirname + '/routeArtistCodeDiff.template.md' },
10
+ getVariables: async ({ threads }) => ({
11
+ ask: threads.artist.context.stash.ask,
12
+ claims: (await threads.student.context.stash.art.claims.get())?.content ?? '',
13
+ inflight: (await threads.artist.context.stash.art.inflight.get())?.content ?? '',
14
+ feedback: (await threads.critic.context.stash.art.feedback?.get())?.content ??
15
+ 'not reviewed yet', // no feedback yet is possible
16
+ ...(await (0, rhachet_1.getTemplateVarsFromRoleInherit)({ thread: threads.artist })),
17
+ scene: await (0, rhachet_1.getTemplateValFromArtifacts)({
18
+ artifacts: threads.artist.context.stash.scene.coderefs,
19
+ }),
20
+ patterns: await (0, rhachet_1.getTemplateValFromArtifacts)({
21
+ artifacts: threads.artist.context.stash.org.patterns,
22
+ }),
23
+ codestyle: await (0, rhachet_1.getTemplateValFromArtifacts)({
24
+ // todo: compress?
25
+ // todo: enforce insync w/ codestyle reviewer?
26
+ artifacts: (0, getMechanicBrief_1.getMechanicBriefs)([
27
+ 'codestyle/mech.what-why.v2.md',
28
+ 'codestyle/flow.single-responsibility.md',
29
+ 'codestyle/mech.args.input-context.md',
30
+ 'codestyle/mech.arrowonly.md',
31
+ 'codestyle/mech.clear-contracts.md',
32
+ 'codestyle/flow.failfast.md',
33
+ 'codestyle/flow.idempotency.md',
34
+ 'codestyle/flow.immutability.md',
35
+ 'codestyle/flow.narratives.md',
36
+ ]),
37
+ }),
38
+ }),
39
+ });
40
+ const stepImagineCodeDiff = (0, rhachet_1.genStepImagineViaTemplate)({
41
+ slug: '[artist]<produce><imagine>',
42
+ stitchee: 'artist',
43
+ readme: 'intent(imagines a code diff based on artist.ask)',
44
+ template,
45
+ imagine: sdkOpenAi_1.sdkOpenAi.imagine,
46
+ });
47
+ const stepArtSet = (0, genStepArtSet_1.genStepArtSet)({
48
+ stitchee: 'artist',
49
+ artee: 'inflight',
50
+ });
51
+ exports.routeArtistCodeDiff = (0, rhachet_1.asStitcherFlat)((0, rhachet_1.genStitchRoute)({
52
+ slug: '[artist]<produce>',
53
+ readme: '@[artist]<produce><imagine> -> [proposal]',
54
+ sequence: [stepImagineCodeDiff, stepArtSet],
55
+ }));
56
+ //# sourceMappingURL=routeArtistCodeDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeArtistCodeDiff.js","sourceRoot":"","sources":["../../../../../src/logic/roles/mechanic/codediff/routeArtistCodeDiff.ts"],"names":[],"mappings":";;;AAAA,qCAUiB;AAIjB,8DAA0E;AAC1E,mEAAgE;AAChE,0DAAwD;AAiCxD,MAAM,QAAQ,GAAG,IAAA,qBAAW,EAAiB;IAC3C,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,GAAG,kCAAkC,EAAE;IAC5D,YAAY,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;QACrC,MAAM,EACJ,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE;QACvE,QAAQ,EACN,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,IAAI,EAAE;QACxE,QAAQ,EACN,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO;YACjE,kBAAkB,EAAE,8BAA8B;QACpD,GAAG,CAAC,MAAM,IAAA,wCAA8B,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACrE,KAAK,EAAE,MAAM,IAAA,qCAA2B,EAAC;YACvC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;SACvD,CAAC;QACF,QAAQ,EAAE,MAAM,IAAA,qCAA2B,EAAC;YAC1C,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ;SACrD,CAAC;QACF,SAAS,EAAE,MAAM,IAAA,qCAA2B,EAAC;YAC3C,kBAAkB;YAClB,8CAA8C;YAC9C,SAAS,EAAE,IAAA,oCAAiB,EAAC;gBAC3B,+BAA+B;gBAC/B,yCAAyC;gBACzC,sCAAsC;gBACtC,6BAA6B;gBAC7B,mCAAmC;gBACnC,4BAA4B;gBAC5B,+BAA+B;gBAC/B,gCAAgC;gBAChC,8BAA8B;aAC/B,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAA,mCAAyB,EAAkB;IACrE,IAAI,EAAE,4BAA4B;IAClC,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,kDAAkD;IAC1D,QAAQ;IACR,OAAO,EAAE,qBAAS,CAAC,OAAO;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAA,6BAAa,EAAC;IAC/B,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,UAAU;CAClB,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,wBAAc,EAC/C,IAAA,wBAAc,EAAC;IACb,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,2CAA2C;IACnD,QAAQ,EAAE,CAAC,mBAAmB,EAAE,UAAU,CAAC;CAC5C,CAAC,CACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { GStitcher, Threads, RoleContext } from 'rhachet';
2
+ import { Artifact } from 'rhachet-artifact';
3
+ import { GitFile } from 'rhachet-artifact-git';
4
+ import { ContextOpenAI } from '../../../../data/sdk/sdkOpenAi';
5
+ interface ThreadsDesired extends Threads<{
6
+ critic: RoleContext<'critic', {
7
+ art: {
8
+ feedback: Artifact<typeof GitFile>;
9
+ feedbackCodestyle: Artifact<typeof GitFile>;
10
+ };
11
+ org: {
12
+ patterns: Artifact<typeof GitFile>[];
13
+ };
14
+ }>;
15
+ artist: RoleContext<'artist', {
16
+ art: {
17
+ inflight: Artifact<typeof GitFile>;
18
+ };
19
+ scene: {
20
+ coderefs: Artifact<typeof GitFile>[];
21
+ };
22
+ }>;
23
+ student: RoleContext<'student', {
24
+ art: {
25
+ claims: Artifact<typeof GitFile>;
26
+ };
27
+ }>;
28
+ }> {
29
+ }
30
+ type StitcherDesired = GStitcher<ThreadsDesired, ContextOpenAI & GStitcher['context'], {
31
+ content: string;
32
+ }>;
33
+ export declare const routeCriticCodeReview: import("rhachet").Stitcher<StitcherDesired>;
34
+ export {};
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const helpful_errors_1 = require("helpful-errors");
4
+ const rhachet_1 = require("rhachet");
5
+ const rhachet_artifact_git_1 = require("rhachet-artifact-git");
6
+ const test_fns_1 = require("test-fns");
7
+ const genContextLogTrail_1 = require("../../../../.test/genContextLogTrail");
8
+ const genContextStitchTrail_1 = require("../../../../.test/genContextStitchTrail");
9
+ const getContextOpenAI_1 = require("../../../../.test/getContextOpenAI");
10
+ const getMechanicBrief_1 = require("../getMechanicBrief");
11
+ const getRefOrgPatterns_1 = require("./getRefOrgPatterns");
12
+ const routeCriticCodeReview_1 = require("./routeCriticCodeReview");
13
+ describe('routeCriticCodeReview', () => {
14
+ const context = {
15
+ ...(0, genContextLogTrail_1.genContextLogTrail)(),
16
+ ...(0, genContextStitchTrail_1.genContextStitchTrail)(),
17
+ ...(0, getContextOpenAI_1.getContextOpenAI)(),
18
+ };
19
+ const route = routeCriticCodeReview_1.routeCriticCodeReview;
20
+ const claimsArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
21
+ uri: __dirname + '/.test/multiply.claims.md',
22
+ }, { access: 'readonly' });
23
+ (0, test_fns_1.given)('inflight has code to be reviewed, expected to have blockers', () => {
24
+ const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
25
+ uri: __dirname + '/.temp/review/all/multiply.hasblockers.toreview.ts',
26
+ });
27
+ const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
28
+ uri: __dirname + '/.temp/review/all/multiply.hasblockers.feedback.md',
29
+ });
30
+ const feedbackCodestyleArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
31
+ uri: __dirname +
32
+ '/.temp/review/all/multiply.noblockers.feedback.codestyle.md',
33
+ });
34
+ beforeEach(async () => {
35
+ await inflightArt.set({
36
+ content: 'export const multiply=(a,b)=>a*b;',
37
+ });
38
+ await feedbackArt.del();
39
+ });
40
+ (0, test_fns_1.when)('executing the review route', () => {
41
+ const threads = (0, test_fns_1.usePrep)(async () => ({
42
+ critic: await (0, rhachet_1.enrollThread)({
43
+ role: 'critic',
44
+ stash: {
45
+ art: {
46
+ feedback: feedbackArt,
47
+ feedbackCodestyle: feedbackCodestyleArt,
48
+ },
49
+ org: {
50
+ patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
51
+ },
52
+ },
53
+ inherit: {
54
+ traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
55
+ },
56
+ }),
57
+ artist: await (0, rhachet_1.enrollThread)({
58
+ role: 'artist',
59
+ stash: {
60
+ art: { inflight: inflightArt },
61
+ scene: { coderefs: [inflightArt] },
62
+ },
63
+ }),
64
+ student: await (0, rhachet_1.enrollThread)({
65
+ role: 'student',
66
+ stash: {
67
+ art: { claims: claimsArt },
68
+ },
69
+ }),
70
+ }));
71
+ (0, test_fns_1.then)('writes feedback about the inflight diff', async () => {
72
+ const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
73
+ const file = await feedbackArt.get();
74
+ const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
75
+ expect(content).toMatch(/blocker/i);
76
+ expect(content.length).toBeGreaterThan(10);
77
+ expect(result.threads.critic.stitches.length).toBeGreaterThan(0);
78
+ });
79
+ });
80
+ });
81
+ (0, test_fns_1.given)('inflight has code to be reviewed, expected no blockers', () => {
82
+ const inflightArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
83
+ uri: __dirname + '/.temp/review/all/multiply.noblockers.toreview.ts',
84
+ });
85
+ const feedbackArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
86
+ uri: __dirname + '/.temp/review/all/multiply.noblockers.feedback.md',
87
+ });
88
+ const feedbackCodestyleArt = (0, rhachet_artifact_git_1.genArtifactGitFile)({
89
+ uri: __dirname +
90
+ '/.temp/review/all/multiply.noblockers.feedback.codestyle.md',
91
+ });
92
+ beforeEach(async () => {
93
+ await inflightArt.set({
94
+ content: `
95
+ export const multiply = ({ a, b }: { a: number, b: number }): number => {
96
+ return a * b;
97
+ };
98
+ `,
99
+ });
100
+ await feedbackArt.del();
101
+ });
102
+ (0, test_fns_1.when)('executing the review route', () => {
103
+ const threads = (0, test_fns_1.usePrep)(async () => ({
104
+ critic: await (0, rhachet_1.enrollThread)({
105
+ role: 'critic',
106
+ stash: {
107
+ art: {
108
+ feedback: feedbackArt,
109
+ feedbackCodestyle: feedbackCodestyleArt,
110
+ },
111
+ org: {
112
+ patterns: await (0, getRefOrgPatterns_1.getRefOrgPatterns)({ purpose: 'produce' }),
113
+ },
114
+ },
115
+ inherit: {
116
+ traits: [(0, getMechanicBrief_1.getMechanicBrief)('style.compressed.md')],
117
+ },
118
+ }),
119
+ artist: await (0, rhachet_1.enrollThread)({
120
+ role: 'artist',
121
+ stash: {
122
+ art: { inflight: inflightArt },
123
+ scene: { coderefs: [inflightArt] },
124
+ },
125
+ }),
126
+ student: await (0, rhachet_1.enrollThread)({
127
+ role: 'student',
128
+ stash: {
129
+ art: { claims: claimsArt },
130
+ },
131
+ }),
132
+ }));
133
+ (0, test_fns_1.then)('writes feedback about the inflight diff', async () => {
134
+ const result = await (0, rhachet_1.enweaveOneStitcher)({ stitcher: route, threads }, context);
135
+ const file = await feedbackArt.get();
136
+ const content = file?.content ?? helpful_errors_1.UnexpectedCodePathError.throw('expected file');
137
+ expect(content).not.toMatch(/blocker/i);
138
+ expect(content.length).toBeGreaterThan(1);
139
+ expect(result.threads.critic.stitches.length).toBeGreaterThan(0);
140
+ });
141
+ });
142
+ });
143
+ });
144
+ //# sourceMappingURL=routeCriticCodeReview.integration.test.js.map