@grnsft/if 0.4.0-beta.1 → 0.5.0-beta.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 (184) hide show
  1. package/CONTRIBUTING.md +7 -5
  2. package/README.md +20 -33
  3. package/Refactor-migration-guide.md +5 -6
  4. package/build/builtins/coefficient/index.d.ts +1 -2
  5. package/build/builtins/coefficient/index.js +18 -4
  6. package/build/builtins/copy-param/index.d.ts +2 -0
  7. package/build/builtins/copy-param/index.js +68 -0
  8. package/build/builtins/csv-lookup/index.d.ts +1 -1
  9. package/build/builtins/csv-lookup/index.js +44 -37
  10. package/build/builtins/divide/index.d.ts +1 -1
  11. package/build/builtins/divide/index.js +22 -11
  12. package/build/builtins/exponent/index.d.ts +1 -2
  13. package/build/builtins/exponent/index.js +9 -23
  14. package/build/builtins/export-csv-raw.d.ts +4 -2
  15. package/build/builtins/export-csv-raw.js +7 -7
  16. package/build/builtins/export-csv.js +8 -11
  17. package/build/builtins/export-log.js +1 -1
  18. package/build/builtins/export-yaml.js +6 -6
  19. package/build/builtins/group-by.d.ts +1 -1
  20. package/build/builtins/group-by.js +5 -5
  21. package/build/builtins/index.d.ts +1 -0
  22. package/build/builtins/index.js +4 -2
  23. package/build/builtins/interpolation/index.d.ts +1 -1
  24. package/build/builtins/interpolation/index.js +10 -8
  25. package/build/builtins/mock-observations/helpers/common-generator.d.ts +2 -2
  26. package/build/builtins/mock-observations/helpers/common-generator.js +10 -13
  27. package/build/builtins/mock-observations/helpers/rand-int-generator.d.ts +2 -2
  28. package/build/builtins/mock-observations/helpers/rand-int-generator.js +14 -24
  29. package/build/builtins/mock-observations/index.d.ts +1 -2
  30. package/build/builtins/mock-observations/index.js +2 -4
  31. package/build/builtins/multiply/index.d.ts +1 -2
  32. package/build/builtins/multiply/index.js +10 -16
  33. package/build/builtins/regex/index.d.ts +1 -2
  34. package/build/builtins/regex/index.js +8 -12
  35. package/build/builtins/sci/index.d.ts +1 -2
  36. package/build/builtins/sci/index.js +23 -22
  37. package/build/builtins/sci-embodied/index.d.ts +1 -1
  38. package/build/builtins/sci-embodied/index.js +16 -17
  39. package/build/builtins/shell/index.d.ts +1 -2
  40. package/build/builtins/shell/index.js +4 -4
  41. package/build/builtins/subtract/index.d.ts +1 -2
  42. package/build/builtins/subtract/index.js +7 -23
  43. package/build/builtins/sum/index.d.ts +1 -2
  44. package/build/builtins/sum/index.js +14 -11
  45. package/build/builtins/time-sync.d.ts +1 -2
  46. package/build/builtins/time-sync.js +62 -67
  47. package/build/check.d.ts +2 -0
  48. package/build/check.js +85 -0
  49. package/build/config/config.d.ts +13 -1
  50. package/build/config/config.js +61 -1
  51. package/build/config/params.js +1 -6
  52. package/build/config/strings.d.ts +41 -5
  53. package/build/config/strings.js +46 -9
  54. package/build/diff.js +7 -2
  55. package/build/env.d.ts +2 -0
  56. package/build/env.js +38 -0
  57. package/build/lib/aggregate.js +1 -1
  58. package/build/lib/compute.js +1 -1
  59. package/build/lib/exhaust.js +4 -4
  60. package/build/lib/initialize.js +20 -24
  61. package/build/lib/load.js +5 -7
  62. package/build/types/compute.d.ts +1 -1
  63. package/build/types/compute.js +1 -1
  64. package/build/types/if-env.d.ts +8 -0
  65. package/build/types/if-env.js +3 -0
  66. package/build/types/interface.d.ts +1 -19
  67. package/build/types/interface.js +1 -1
  68. package/build/types/npm.d.ts +9 -0
  69. package/build/types/npm.js +3 -0
  70. package/build/types/process-args.d.ts +9 -0
  71. package/build/types/process-args.js +1 -1
  72. package/build/types/util/args.d.ts +1 -0
  73. package/build/types/util/args.js +1 -1
  74. package/build/util/aggregation-helper.d.ts +1 -1
  75. package/build/util/aggregation-helper.js +5 -5
  76. package/build/util/args.d.ts +23 -1
  77. package/build/util/args.js +91 -14
  78. package/build/util/fs.d.ts +20 -0
  79. package/build/util/fs.js +94 -0
  80. package/build/util/helpers.d.ts +26 -6
  81. package/build/util/helpers.js +112 -17
  82. package/build/util/npm.d.ts +28 -0
  83. package/build/util/npm.js +152 -0
  84. package/build/util/plugin-storage.js +4 -4
  85. package/build/util/validations.js +4 -4
  86. package/github-processes.md +39 -0
  87. package/jest.config.js +1 -1
  88. package/manifests/bugs/aggregation-error-wrong-metric.yml +73 -23
  89. package/manifests/bugs/azure-importer-ignoring-defaults.yml +6 -3
  90. package/manifests/bugs/azure-importer-incorrect-calculation.yml +6 -3
  91. package/manifests/bugs/initialize-error-no-config.yml +4 -5
  92. package/manifests/bugs/initialize-error-no-path.yml +9 -5
  93. package/manifests/bugs/input-error-missing-duration.yml +10 -6
  94. package/manifests/bugs/pipeline-error-naming-mismatch.yml +8 -4
  95. package/manifests/bugs/pipeline-error-uninitialized-plugin.yml +9 -5
  96. package/manifests/bugs/pipeline-ordering-error.yml +43 -34
  97. package/manifests/examples/copy.yaml +20 -0
  98. package/manifests/examples/generics.yml +48 -13
  99. package/manifests/examples/instance-metadata.yml +4 -4
  100. package/manifests/examples/mock-cpu-util-to-carbon.yml +8 -2
  101. package/manifests/examples/nesting.yml +82 -35
  102. package/manifests/examples/pipeline-teads-sci.yml +54 -18
  103. package/manifests/examples/pipeline-with-aggregate.yml +66 -24
  104. package/manifests/examples/pipeline-with-mocks.yml +65 -22
  105. package/manifests/examples/region-metadata.yml +26 -0
  106. package/manifests/examples/tdp-finder.yml +23 -0
  107. package/manifests/examples/zeros.yaml +130 -0
  108. package/manifests/features/{aggregate-failure-inalid-metrics.yml → aggregate-failure-invalid-metrics.yml} +9 -3
  109. package/manifests/features/aggregate-failure-missing-metric-in-inputs.yml +9 -3
  110. package/manifests/features/aggregate-horizontal.yml +8 -2
  111. package/manifests/features/aggregate-vertical.yml +8 -2
  112. package/manifests/features/aggregate.yml +8 -2
  113. package/manifests/integrations/{cloud-metadata-divide-boavizta.yml → cloud-metadata-divide.yml} +8 -9
  114. package/manifests/integrations/instance-metadata/failure-invalid-instance-type.yaml +33 -0
  115. package/manifests/integrations/instance-metadata/failure-invalid-provider.yaml +33 -0
  116. package/manifests/integrations/instance-metadata/failure-missing-queried-input.yml +33 -0
  117. package/manifests/integrations/instance-metadata/success.yml +33 -0
  118. package/manifests/integrations/mock-obs-group-by-cloud-meta.yml +8 -2
  119. package/manifests/integrations/mock-obs-time-sync.yml +50 -5
  120. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/failure-invalid-instance-type.yaml +9 -3
  121. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/failure-invalid-vendor.yaml +8 -2
  122. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/failure-missing-cloud-vendor.yml +9 -3
  123. package/manifests/plugins/{cloud-metadata → csv-lookup/cloud-metadata}/success.yml +8 -2
  124. package/manifests/plugins/csv-lookup/{success.yml → region-metadata/success.yml} +1 -1
  125. package/manifests/plugins/csv-lookup/tdp-finder/failure-missing-input-param.yml +23 -0
  126. package/manifests/plugins/csv-lookup/tdp-finder/failure-unsupported-physical-processor.yml +24 -0
  127. package/manifests/plugins/csv-lookup/tdp-finder/success.yml +24 -0
  128. package/manifests/plugins/divide/failure-denominator-equal-zero.yml +8 -9
  129. package/manifests/plugins/divide/failure-invalid-config-denominator.yml +8 -9
  130. package/manifests/plugins/divide/failure-missing-numerator.yml +8 -9
  131. package/manifests/plugins/divide/success.yml +9 -10
  132. package/manifests/plugins/exponent/success.yml +26 -0
  133. package/manifests/plugins/interpolation/success.yml +24 -0
  134. package/manifests/plugins/sci/failure-missing-input-param.yml +2 -6
  135. package/manifests/plugins/sci/success.yml +0 -3
  136. package/manifests/plugins/subtract/success.yml +25 -0
  137. package/manifests/plugins/sum/success.yml +1 -1
  138. package/package.json +10 -4
  139. package/src/__mocks__/mock-manifest.yaml +72 -0
  140. package/src/builtins/README.md +1 -1
  141. package/src/builtins/coefficient/README.md +19 -1
  142. package/src/builtins/copy-param/README.md +104 -0
  143. package/src/builtins/csv-lookup/README.md +39 -1
  144. package/src/builtins/divide/README.md +29 -3
  145. package/src/builtins/exponent/README.md +21 -1
  146. package/src/builtins/interpolation/README.md +29 -1
  147. package/src/builtins/mock-observations/README.md +1 -1
  148. package/src/builtins/multiply/README.md +16 -1
  149. package/src/builtins/regex/README.md +32 -2
  150. package/src/builtins/sci/README.md +24 -1
  151. package/src/builtins/sci-embodied/README.md +15 -1
  152. package/src/builtins/shell/README.md +12 -1
  153. package/src/builtins/subtract/README.md +12 -1
  154. package/src/builtins/sum/README.md +28 -1
  155. package/src/config/env-template.yml +24 -0
  156. package/build/builtins/coefficient/types.d.ts +0 -5
  157. package/build/builtins/coefficient/types.js +0 -3
  158. package/build/builtins/exponent/types.d.ts +0 -5
  159. package/build/builtins/exponent/types.js +0 -3
  160. package/build/builtins/interpolation/types.d.ts +0 -5
  161. package/build/builtins/interpolation/types.js +0 -10
  162. package/build/builtins/mock-observations/types.d.ts +0 -13
  163. package/build/builtins/mock-observations/types.js +0 -3
  164. package/build/builtins/multiply/types.d.ts +0 -4
  165. package/build/builtins/multiply/types.js +0 -3
  166. package/build/builtins/subtract/types.d.ts +0 -4
  167. package/build/builtins/subtract/types.js +0 -3
  168. package/build/builtins/sum/types.d.ts +0 -4
  169. package/build/builtins/sum/types.js +0 -3
  170. package/build/types/common.d.ts +0 -4
  171. package/build/types/common.js +0 -3
  172. package/build/types/group-by.d.ts +0 -3
  173. package/build/types/group-by.js +0 -3
  174. package/build/types/helpers.d.ts +0 -4
  175. package/build/types/helpers.js +0 -3
  176. package/build/util/errors.d.ts +0 -6
  177. package/build/util/errors.js +0 -33
  178. package/manifests/examples/basic.yml +0 -28
  179. package/manifests/plugins/tdp-finder/failure-missing-input-param.yml +0 -18
  180. package/manifests/plugins/tdp-finder/failure-unsupported-physical-processor.yml +0 -19
  181. package/manifests/plugins/tdp-finder/success.yml +0 -19
  182. /package/manifests/plugins/csv-lookup/{failure-missing-column.yml → region-metadata/failure-missing-column.yml} +0 -0
  183. /package/manifests/plugins/csv-lookup/{failure-missing-output.yml → region-metadata/failure-missing-output.yml} +0 -0
  184. /package/manifests/plugins/csv-lookup/{success-renaming.yml → region-metadata/success-renaming.yml} +0 -0
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validate = exports.validateManifest = exports.manifestSchema = exports.allDefined = exports.atLeastOneDefined = void 0;
4
4
  const zod_1 = require("zod");
5
- const errors_1 = require("./errors");
5
+ const utils_1 = require("@grnsft/if-core/utils");
6
+ const strings_1 = require("../config/strings");
6
7
  const aggregation_1 = require("../types/aggregation");
7
8
  const parameters_1 = require("../types/parameters");
8
- const strings_1 = require("../config/strings");
9
- const { ManifestValidationError, InputValidationError } = errors_1.ERRORS;
9
+ const { ManifestValidationError, InputValidationError } = utils_1.ERRORS;
10
10
  const { VALIDATING_MANIFEST } = strings_1.STRINGS;
11
11
  /**
12
12
  * At least one property defined handler.
@@ -121,4 +121,4 @@ const flattenPath = (path) => {
121
121
  const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
122
122
  return flattenPath.join('.');
123
123
  };
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBeUQ7QUFFekQscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsK0NBQTBDO0FBRTFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUMvRCxNQUFNLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxpQkFBTyxDQUFDO0FBQ3RDOztHQUVHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixHQUE4QyxFQUM5QyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFGdEMsUUFBQSxpQkFBaUIscUJBRXFCO0FBRW5EOztHQUVHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUE4QyxFQUFFLEVBQUUsQ0FDM0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEcEMsUUFBQSxVQUFVLGNBQzBCO0FBRWpEOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUs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QUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM1QztRQUVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLGlCQUFpQixpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDekcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBeUIsRUFBVSxFQUFFO0lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7SUFDRixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgWm9kSXNzdWVDb2RlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnL3N0cmluZ3MnO1xuXG5jb25zdCB7TWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IsIElucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtWQUxJREFUSU5HX01BTklGRVNUfSA9IFNUUklOR1M7XG4vKipcbiAqIEF0IGxlYXN0IG9uZSBwcm9wZXJ0eSBkZWZpbmVkIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBhdExlYXN0T25lRGVmaW5lZCA9IChcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCB1bmtub3duPlxuKSA9PiBPYmplY3QudmFsdWVzKG9iaikuc29tZSh2ID0+IHYgIT09IHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQWxsIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGFsbERlZmluZWQgPSAob2JqOiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCB1bmtub3duPikgPT5cbiAgT2JqZWN0LnZhbHVlcyhvYmopLmV2ZXJ5KHYgPT4gdiAhPT0gdW5kZWZpbmVkKTtcblxuLyoqXG4gKiBWYWxpZGF0aW9uIHNjaGVtYSBmb3IgbWFuaWZlc3RzLlxuICovXG5leHBvcnQgY29uc3QgbWFuaWZlc3RTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgdGFnczogelxuICAgIC5vYmplY3Qoe1xuICAgICAga2luZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgICBjb21wbGV4aXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGFnZ3JlZ2F0aW9uOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBtZXRyaWNzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgdHlwZTogei5lbnVtKEFHR1JFR0FUSU9OX01FVEhPRFMpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgcGFyYW1zOiB6XG4gICAgLmFycmF5KFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgICAgICAgYWdncmVnYXRpb246IHouZW51bShBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgICAgIHVuaXQ6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgIClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBpbml0aWFsaXplOiB6Lm9iamVjdCh7XG4gICAgcGx1Z2luczogei5yZWNvcmQoXG4gICAgICB6LnN0cmluZygpLFxuICAgICAgei5vYmplY3Qoe1xuICAgICAgICBwYXRoOiB6LnN0cmluZygpLFxuICAgICAgICBtZXRob2Q6IHouc3RyaW5nKCksXG4gICAgICAgICdnbG9iYWwtY29uZmlnJzogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIH0pXG4gICAgKSxcbiAgICBvdXRwdXRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIH0pLFxuICBleGVjdXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGNvbW1hbmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGVudmlyb25tZW50OiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICdpZi12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgICAgICBvczogei5zdHJpbmcoKSxcbiAgICAgICAgICAnb3MtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAgICAgJ25vZGUtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAgICAgJ2RhdGUtdGltZSc6IHouc3RyaW5nKCksXG4gICAgICAgICAgZGVwZW5kZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uYWwoKSxcbiAgICAgIHN0YXR1czogei5zdHJpbmcoKSxcbiAgICAgIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbiAgdHJlZTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG59KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG1hbmlmZXN0YCBvYmplY3QgdG8gbWF0Y2ggcGF0dGVybi5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTWFuaWZlc3QgPSAobWFuaWZlc3Q6IGFueSkgPT4ge1xuICBjb25zb2xlLmRlYnVnKFZBTElEQVRJTkdfTUFOSUZFU1QpO1xuXG4gIHJldHVybiB2YWxpZGF0ZShtYW5pZmVzdFNjaGVtYSwgbWFuaWZlc3QsIHVuZGVmaW5lZCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgZ2l2ZW4gYG9iamVjdGAgd2l0aCBnaXZlbiBgc2NoZW1hYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gPFQ+KFxuICBzY2hlbWE6IFpvZFNjaGVtYTxUPixcbiAgb2JqZWN0OiBhbnksXG4gIGluZGV4PzogbnVtYmVyLFxuICBlcnJvckNvbnN0cnVjdG9yOiBFcnJvckNvbnN0cnVjdG9yID0gSW5wdXRWYWxpZGF0aW9uRXJyb3JcbikgPT4ge1xuICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gc2NoZW1hLnNhZmVQYXJzZShvYmplY3QpO1xuXG4gIGlmICghdmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IGVycm9yQ29uc3RydWN0b3IoXG4gICAgICBwcmV0dGlmeUVycm9yTWVzc2FnZSh2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2UsIGluZGV4KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5kYXRhO1xufTtcblxuLyoqXG4gKiBFcnJvciBtZXNzYWdlIGZvcm1hdHRlciBmb3Igem9kIGlzc3Vlcy5cbiAqL1xuY29uc3QgcHJldHRpZnlFcnJvck1lc3NhZ2UgPSAoaXNzdWVzOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc0FycmF5ID0gSlNPTi5wYXJzZShpc3N1ZXMpO1xuXG4gIHJldHVybiBpc3N1ZXNBcnJheS5tYXAoKGlzc3VlOiBab2RJc3N1ZSkgPT4ge1xuICAgIGNvbnN0IGNvZGUgPSBpc3N1ZS5jb2RlO1xuICAgIGxldCB7cGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcblxuICAgIGNvbnN0IGluZGV4RXJyb3JNZXNzYWdlID0gaW5kZXggIT09IHVuZGVmaW5lZCA/IGAgYXQgaW5kZXggJHtpbmRleH1gIDogJyc7XG5cbiAgICBpZiAoaXNzdWUuY29kZSA9PT0gWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24pIHtcbiAgICAgIG1lc3NhZ2UgPSBpc3N1ZS51bmlvbkVycm9yc1swXS5pc3N1ZXNbMF0ubWVzc2FnZTtcbiAgICAgIHBhdGggPSBpc3N1ZS51bmlvbkVycm9yc1swXS5pc3N1ZXNbMF0ucGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGZsYXR0ZW5QYXRoKHBhdGgpO1xuXG4gICAgaWYgKCFmdWxsUGF0aCkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfSR7aW5kZXhFcnJvck1lc3NhZ2V9LiBFcnJvciBjb2RlOiAke2NvZGV9LmA7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBGbGF0dGVucyBhbiBhcnJheSByZXByZXNlbnRpbmcgYSBuZXN0ZWQgcGF0aCBpbnRvIGEgc3RyaW5nLlxuICovXG5jb25zdCBmbGF0dGVuUGF0aCA9IChwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZmxhdHRlblBhdGggPSBwYXRoLm1hcChwYXJ0ID0+XG4gICAgdHlwZW9mIHBhcnQgPT09ICdudW1iZXInID8gYFske3BhcnR9XWAgOiBwYXJ0XG4gICk7XG4gIHJldHVybiBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG59O1xuIl19
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBeUQ7QUFDekQsaURBQTZDO0FBRTdDLCtDQUEwQztBQUUxQyxzREFBeUQ7QUFDekQsb0RBQXNEO0FBRXRELE1BQU0sRUFBQyx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUMvRCxNQUFNLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxpQkFBTyxDQUFDO0FBRXRDOztHQUVHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixHQUE4QyxFQUM5QyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFGdEMsUUFBQSxpQkFBaUIscUJBRXFCO0FBRW5EOztHQUVHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUE4QyxFQUFFLEVBQUUsQ0FDM0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEcEMsUUFBQSxVQUFVLGNBQzBCO0FBRWpEOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUs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QUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM1QztRQUVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLGlCQUFpQixpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDekcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBeUIsRUFBVSxFQUFFO0lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7SUFFRixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgWm9kSXNzdWVDb2RlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5pbXBvcnQge0VSUk9SU30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3V0aWxzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcvc3RyaW5ncyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuY29uc3Qge1ZBTElEQVRJTkdfTUFOSUZFU1R9ID0gU1RSSU5HUztcblxuLyoqXG4gKiBBdCBsZWFzdCBvbmUgcHJvcGVydHkgZGVmaW5lZCBoYW5kbGVyLlxuICovXG5leHBvcnQgY29uc3QgYXRMZWFzdE9uZURlZmluZWQgPSAoXG4gIG9iajogUmVjb3JkPHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgdW5rbm93bj5cbikgPT4gT2JqZWN0LnZhbHVlcyhvYmopLnNvbWUodiA9PiB2ICE9PSB1bmRlZmluZWQpO1xuXG4vKipcbiAqIEFsbCBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBhbGxEZWZpbmVkID0gKG9iajogUmVjb3JkPHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCwgdW5rbm93bj4pID0+XG4gIE9iamVjdC52YWx1ZXMob2JqKS5ldmVyeSh2ID0+IHYgIT09IHVuZGVmaW5lZCk7XG5cbi8qKlxuICogVmFsaWRhdGlvbiBzY2hlbWEgZm9yIG1hbmlmZXN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmlmZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gIHRhZ3M6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGtpbmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgICAgY29tcGxleGl0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgICBjYXRlZ29yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBhZ2dyZWdhdGlvbjogelxuICAgIC5vYmplY3Qoe1xuICAgICAgbWV0cmljczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICAgIHR5cGU6IHouZW51bShBR0dSRUdBVElPTl9NRVRIT0RTKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIHBhcmFtczogelxuICAgIC5hcnJheShcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCksXG4gICAgICAgIGFnZ3JlZ2F0aW9uOiB6LmVudW0oQUdHUkVHQVRJT05fVFlQRVMpLFxuICAgICAgICB1bml0OiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICApXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgaW5pdGlhbGl6ZTogei5vYmplY3Qoe1xuICAgIHBsdWdpbnM6IHoucmVjb3JkKFxuICAgICAgei5zdHJpbmcoKSxcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgcGF0aDogei5zdHJpbmcoKSxcbiAgICAgICAgbWV0aG9kOiB6LnN0cmluZygpLFxuICAgICAgICAnZ2xvYmFsLWNvbmZpZyc6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICB9KVxuICAgICksXG4gICAgb3V0cHV0czogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB9KSxcbiAgZXhlY3V0aW9uOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBjb21tYW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBlbnZpcm9ubWVudDogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAnaWYtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAgICAgb3M6IHouc3RyaW5nKCksXG4gICAgICAgICAgJ29zLXZlcnNpb24nOiB6LnN0cmluZygpLFxuICAgICAgICAgICdub2RlLXZlcnNpb24nOiB6LnN0cmluZygpLFxuICAgICAgICAgICdkYXRlLXRpbWUnOiB6LnN0cmluZygpLFxuICAgICAgICAgIGRlcGVuZGVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBzdGF0dXM6IHouc3RyaW5nKCksXG4gICAgICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBhbnkpID0+IHtcbiAgY29uc29sZS5kZWJ1ZyhWQUxJREFUSU5HX01BTklGRVNUKTtcblxuICByZXR1cm4gdmFsaWRhdGUobWFuaWZlc3RTY2hlbWEsIG1hbmlmZXN0LCB1bmRlZmluZWQsIE1hbmlmZXN0VmFsaWRhdGlvbkVycm9yKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBvYmplY3RgIHdpdGggZ2l2ZW4gYHNjaGVtYWAuXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZSA9IDxUPihcbiAgc2NoZW1hOiBab2RTY2hlbWE8VD4sXG4gIG9iamVjdDogYW55LFxuICBpbmRleD86IG51bWJlcixcbiAgZXJyb3JDb25zdHJ1Y3RvcjogRXJyb3JDb25zdHJ1Y3RvciA9IElucHV0VmFsaWRhdGlvbkVycm9yXG4pID0+IHtcbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2Uob2JqZWN0KTtcblxuICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBlcnJvckNvbnN0cnVjdG9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlLCBpbmRleClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQuZGF0YTtcbn07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3JtYXR0ZXIgZm9yIHpvZCBpc3N1ZXMuXG4gKi9cbmNvbnN0IHByZXR0aWZ5RXJyb3JNZXNzYWdlID0gKGlzc3Vlczogc3RyaW5nLCBpbmRleD86IG51bWJlcikgPT4ge1xuICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICByZXR1cm4gaXNzdWVzQXJyYXkubWFwKChpc3N1ZTogWm9kSXNzdWUpID0+IHtcbiAgICBjb25zdCBjb2RlID0gaXNzdWUuY29kZTtcbiAgICBsZXQge3BhdGgsIG1lc3NhZ2V9ID0gaXNzdWU7XG5cbiAgICBjb25zdCBpbmRleEVycm9yTWVzc2FnZSA9IGluZGV4ICE9PSB1bmRlZmluZWQgPyBgIGF0IGluZGV4ICR7aW5kZXh9YCA6ICcnO1xuXG4gICAgaWYgKGlzc3VlLmNvZGUgPT09IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uKSB7XG4gICAgICBtZXNzYWdlID0gaXNzdWUudW5pb25FcnJvcnNbMF0uaXNzdWVzWzBdLm1lc3NhZ2U7XG4gICAgICBwYXRoID0gaXNzdWUudW5pb25FcnJvcnNbMF0uaXNzdWVzWzBdLnBhdGg7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aChwYXRoKTtcblxuICAgIGlmICghZnVsbFBhdGgpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiBgXCIke2Z1bGxQYXRofVwiIHBhcmFtZXRlciBpcyAke21lc3NhZ2UudG9Mb3dlckNhc2UoKX0ke2luZGV4RXJyb3JNZXNzYWdlfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG5cbi8qKlxuICogRmxhdHRlbnMgYW4gYXJyYXkgcmVwcmVzZW50aW5nIGEgbmVzdGVkIHBhdGggaW50byBhIHN0cmluZy5cbiAqL1xuY29uc3QgZmxhdHRlblBhdGggPSAocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZsYXR0ZW5QYXRoID0gcGF0aC5tYXAocGFydCA9PlxuICAgIHR5cGVvZiBwYXJ0ID09PSAnbnVtYmVyJyA/IGBbJHtwYXJ0fV1gIDogcGFydFxuICApO1xuXG4gIHJldHVybiBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG59O1xuIl19
@@ -107,6 +107,7 @@ After a PR has passed triage, it can be assigned to a core team member to review
107
107
 
108
108
  We intend to respond to new PRs and issues within 3 days of the ticket being opened, even if only with a brief message thanking the OP and explaining the triage process.
109
109
 
110
+ There may be exceptional instances where bug fixes are prioritized over other ongoing tasks and worked on immediately, before triage.
110
111
 
111
112
  ## Labels
112
113
 
@@ -140,3 +141,41 @@ If more than two hotfixes are required on a particular release, the team will ca
140
141
  Hotfixes on release can be merged back into `main` when they have been fully QA tested.
141
142
 
142
143
  We intend for hotfixes to be as infrequent as possible.
144
+
145
+
146
+ ## Software Development Life Cycle
147
+
148
+ Our normal process is to have week-long sprints where we tackle issues that contribute to a larger epic which typically last for 4-6 weeks.
149
+
150
+ Our Executive Director and Product owner take responsibility for defining epics. This means they make decisions about how IF should change and translate that into a series of documents that get worked up into tickets for specific tasks. After the initial design, individual tasks are refined by the product owner, which means defining a scope of work and acceptance criteria for each task.
151
+
152
+ Refinement is the process of taking a loosely scoped or ambiguous ticket and making it so well-described that anyone could pick it up off the board and produce an equivalent outcome to one of the core team. It's important we do this diligently even if it feels unnecessary or frictionful, because:
153
+
154
+ - it keeps us all aligned with the purpose and rationale of individual tasks
155
+ - it improves our transparency
156
+ - it lowers the barrier to entry for contributors
157
+ - it helps us to "measure twice, cut once" and avoid doing work more than once
158
+ - it helps us to think together about each issue
159
+ - it provides an archive of our thinking that we can go back to in future.
160
+
161
+ We use checkboxes for the statement of work and acceptance criteria as this helps to track progress on the task while it is in flight.
162
+
163
+ A ticket is considered READY when it has been refined by the product owner. In general, we try to pass the refined ticket to a core developer to review any implementation details.
164
+
165
+ We have the `core-only` label that we apply to tasks that are reserved for the core team to work on. Community contributions that cover these tickets are unlikely to get merged unless organized in advance. This is typically for sensitive parts of the core of the IF.
166
+
167
+ Epics are also opresented to the community on the IF discussion forum in advance of being worked on in a development sprint. This is to give community contributors a chance to give feedback, suggest course corrections and discuss the changes with the team. These discussions can also lead to community members taking on some of the epic tasks.
168
+
169
+ Once the tickets are refined they get prioritized and assigned during our development sprints. There is a pre-sprint prioritization call between the project sponsor, owner and manager to determien the priorities for each sprint, then a sprint planning meeting where the tasks are assigned and sized.
170
+
171
+ ### Overview of development practises
172
+
173
+ | Stage | Participants | Inputs | Outputs | Overview |
174
+ | ----------------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
175
+ | 1. Initiation | Sponsor and Product Owner | Problem Statement and Objectives | Action Plan | In this phase, the team identifies a specific job-to-be-done or problem, develops a high-level vision for a solution, and outlines a preliminary task breakdown. |
176
+ | 2. Backlog | Product Owner | Breakdown of Epic or Milestone Tasks | An issue for each high-level task detailing the What and Why, along with a link to its parent epic | In this phase, each task from the epic or milestone is incorporated into the backlog (labeled as 'draft'), setting the context effectively. |
177
+ | 3. Design | Sponsor and Product Owner | What and Why, link to parent Epic Priority, Preliminary Acceptance Criteria and outline of work scope | In this phase, preliminary acceptance criteria are documented as a foundation for further refinement. |
178
+ | 4. Refinement Product Owner, Dev and QA (where applicable) | Preliminary Acceptance Criteria and outline of work scope | Comprehensive scenarios for Acceptance Criteria, confirmed work scope, and size | In this phase, engineers review the desired outcomes to ensure technical feasibility, clarify doubts, and solidify their understanding. They also estimate the required effort. Following this review, the issue is deemed Ready for implementation. |
179
+ | 5. Implementation | Dev and QA (where applicable) | A comprehensive set of scenarios for Acceptance Criteria and a confirmed Scope of Work. | A Pull Request (PR) including Unit Tests that pass and manifest files for automated testing, Technical documentation | In this phase, engineers execute the solution and review PRs. They also record a demo to demonstrate that it meets the acceptance criteria. |
180
+ | 6. UAT | Product Owner and Sponsor (if applicable) | Working feature and Acceptance Criteria | TBC | In this phase, the Product Owner verifies that the implementation matches the design by reviewing a demonstration of the work completed. |
181
+ | 7. Rollout | Product Owner, Sponsor and Marketing (if applicable) | Demos, Technical Documentation | TBC | In this phase, the Product Owner ensures that the community is prepared for the upcoming change. This preparation includes updates to the change log, project announcements, revisions to documentation, marketing efforts, and more. |
package/jest.config.js CHANGED
@@ -12,8 +12,8 @@ module.exports = {
12
12
  },
13
13
  modulePathIgnorePatterns: [
14
14
  './build',
15
- './src/__tests__/unit/lib/manifest',
16
15
  './src/__tests__/integration/helpers',
17
16
  './src/__tests__/integration/test-data',
18
17
  ],
18
+ coveragePathIgnorePatterns: ['src/config', 'src/types'],
19
19
  };
@@ -7,26 +7,62 @@ aggregation:
7
7
  type: "both"
8
8
  initialize:
9
9
  plugins:
10
- "teads-curve":
11
- path: "@grnsft/if-unofficial-plugins"
12
- method: TeadsCurve
10
+ "interpolate":
11
+ method: Interpolation
12
+ path: 'builtin'
13
13
  global-config:
14
- interpolation: spline
15
- "sci-e":
16
- path: "@grnsft/if-plugins"
17
- method: SciE
14
+ method: linear
15
+ x: [0, 10, 50, 100]
16
+ y: [0.12, 0.32, 0.75, 1.02]
17
+ input-parameter: 'cpu/utilization'
18
+ output-parameter: 'cpu-factor'
19
+ "cpu-factor-to-wattage":
20
+ method: Multiply
21
+ path: builtin
22
+ global-config:
23
+ input-parameters: ["cpu-factor", "cpu/thermal-design-power"]
24
+ output-parameter: "cpu-wattage"
25
+ "wattage-times-duration":
26
+ method: Multiply
27
+ path: builtin
28
+ global-config:
29
+ input-parameters: ["cpu-wattage", "duration"]
30
+ output-parameter: "cpu-wattage-times-duration"
31
+ "wattage-to-energy-kwh":
32
+ method: Divide
33
+ path: "builtin"
34
+ global-config:
35
+ numerator: cpu-wattage-times-duration
36
+ denominator: 3600000
37
+ output: cpu-energy-raw
38
+ "calculate-vcpu-ratio":
39
+ method: Divide
40
+ path: "builtin"
41
+ global-config:
42
+ numerator: vcpus-total
43
+ denominator: vcpus-allocated
44
+ output: vcpu-ratio
45
+ "correct-cpu-energy-for-vcpu-ratio":
46
+ method: Divide
47
+ path: "builtin"
48
+ global-config:
49
+ numerator: cpu-energy-raw
50
+ denominator: vcpu-ratio
51
+ output: cpu-energy-kwh
18
52
  "sci-embodied":
19
53
  path: "builtin"
20
54
  method: SciEmbodied
21
- "sci-o":
22
- path: "@grnsft/if-plugins"
23
- method: SciO
55
+ "operational-carbon":
56
+ method: Multiply
57
+ path: builtin
58
+ global-config:
59
+ input-parameters: ["cpu-energy-kwh", "grid/carbon-intensity"]
60
+ output-parameter: "carbon"
24
61
  "sci":
25
62
  path: "builtin"
26
63
  method: Sci
27
64
  global-config:
28
65
  functional-unit: "requests"
29
- functional-unit-time: "1 minute"
30
66
  "time-sync":
31
67
  method: TimeSync
32
68
  path: "builtin"
@@ -42,10 +78,14 @@ tree:
42
78
  children:
43
79
  child-1:
44
80
  pipeline:
45
- - teads-curve
46
- - sci-e
81
+ - interpolate
82
+ - cpu-factor-to-wattage
83
+ - wattage-times-duration
84
+ - wattage-to-energy-kwh
85
+ - calculate-vcpu-ratio
86
+ - correct-cpu-energy-for-vcpu-ratio
47
87
  - sci-embodied
48
- - sci-o
88
+ - operational-carbon
49
89
  - time-sync
50
90
  - sci
51
91
  config:
@@ -59,36 +99,43 @@ tree:
59
99
  device/emissions-embodied: 1533.120 # gCO2eq
60
100
  time-reserved: 3600 # 1hr in seconds
61
101
  device/expected-lifespan: 94608000 # 3 years in seconds
62
- resources-reserved: 1
63
- resources-total: 8
64
- functional-unit-time: "1 min"
102
+ vcpus-allocated: 1
103
+ vcpus-total: 8
65
104
  inputs:
66
105
  - timestamp: "2023-12-12T00:00:00.000Z"
67
106
  cloud/instance-type: A1
68
107
  cloud/region: uk-west
69
108
  duration: 1
70
109
  cpu/utilization: 10
110
+ requests: 100
71
111
  - timestamp: "2023-12-12T00:00:01.000Z"
72
112
  duration: 5
73
113
  cpu/utilization: 20
74
114
  cloud/instance-type: A1
75
115
  cloud/region: uk-west
116
+ requests: 100
76
117
  - timestamp: "2023-12-12T00:00:06.000Z"
77
118
  duration: 7
78
119
  cpu/utilization: 15
79
120
  cloud/instance-type: A1
80
121
  cloud/region: uk-west
122
+ requests: 100
81
123
  - timestamp: "2023-12-12T00:00:13.000Z"
82
124
  duration: 30
83
125
  cloud/instance-type: A1
84
126
  cloud/region: uk-west
85
127
  cpu/utilization: 15
128
+ requests: 100
86
129
  child-2:
87
130
  pipeline:
88
- - teads-curve
89
- - sci-e
131
+ - interpolate
132
+ - cpu-factor-to-wattage
133
+ - wattage-times-duration
134
+ - wattage-to-energy-kwh
135
+ - calculate-vcpu-ratio
136
+ - correct-cpu-energy-for-vcpu-ratio
90
137
  - sci-embodied
91
- - sci-o
138
+ - operational-carbon
92
139
  - time-sync
93
140
  - sci
94
141
  config:
@@ -102,27 +149,30 @@ tree:
102
149
  device/emissions-embodied: 1533.120 # gCO2eq
103
150
  time-reserved: 3600 # 1hr in seconds
104
151
  device/expected-lifespan: 94608000 # 3 years in seconds
105
- resources-reserved: 1
106
- resources-total: 8
107
- functional-unit-time: "1 min"
152
+ vcpus-allocated: 1
153
+ vcpus-total: 8
108
154
  inputs:
109
155
  - timestamp: "2023-12-12T00:00:00.000Z"
110
156
  duration: 1
111
157
  cpu/utilization: 30
112
158
  cloud/instance-type: A1
113
159
  cloud/region: uk-west
160
+ requests: 100
114
161
  - timestamp: "2023-12-12T00:00:01.000Z"
115
162
  duration: 5
116
163
  cpu/utilization: 28
117
164
  cloud/instance-type: A1
118
165
  cloud/region: uk-west
166
+ requests: 100
119
167
  - timestamp: "2023-12-12T00:00:06.000Z"
120
168
  duration: 7
121
169
  cpu/utilization: 40
122
170
  cloud/instance-type: A1
123
171
  cloud/region: uk-west
172
+ requests: 100
124
173
  - timestamp: "2023-12-12T00:00:13.000Z"
125
174
  duration: 30
126
175
  cpu/utilization: 33
127
176
  cloud/instance-type: A1
128
177
  cloud/region: uk-west
178
+ requests: 100
@@ -28,9 +28,12 @@ initialize:
28
28
  input-parameter: network/energy
29
29
  coefficient: 1000
30
30
  output-parameter: network/energy
31
- "sci-o":
32
- method: SciO
33
- path: "@grnsft/if-plugins"
31
+ "operational-carbon":
32
+ method: Multiply
33
+ path: builtin
34
+ global-config:
35
+ input-parameters: ["energy", "grid/carbon-intensity"]
36
+ output-parameter: "carbon-operational"
34
37
  "group-by":
35
38
  path: "builtin"
36
39
  method: GroupBy
@@ -20,9 +20,12 @@ initialize:
20
20
  input-parameter: network/energy
21
21
  coefficient: 1000
22
22
  output-parameter: network/energy
23
- sci-o:
24
- path: '@grnsft/if-plugins'
25
- method: SciO
23
+ "operational-carbon":
24
+ method: Multiply
25
+ path: builtin
26
+ global-config:
27
+ input-parameters: ["energy", "grid/carbon-intensity"]
28
+ output-parameter: "carbon-operational"
26
29
  group-by:
27
30
  path: builtin
28
31
  method: GroupBy
@@ -3,18 +3,17 @@ description: a negative test case that fails due to plugin initialization missin
3
3
  tags:
4
4
  initialize:
5
5
  plugins:
6
- teads-curve:
7
- path: '@grnsft/if-unofficial-plugins'
8
- method: TeadsCurve
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: 'builtin'
9
9
  global-config:
10
- outputs: ['yaml']
11
10
  tree:
12
11
  children:
13
12
  child-0:
14
13
  defaults:
15
14
  cpu/thermal-design-power: 100
16
15
  pipeline:
17
- - teads-curve
16
+ - interpolate
18
17
  inputs:
19
18
  - timestamp: 2023-07-06T00:00
20
19
  duration: 1
@@ -3,19 +3,23 @@ description: a negative test case that fails because the path is mising in a plu
3
3
  tags:
4
4
  initialize:
5
5
  plugins:
6
- teads-curve:
6
+ "interpolate":
7
+ method: Interpolation
7
8
  path:
8
- method: TeadsCurve
9
9
  global-config:
10
- interpolation: spline
11
- outputs: ['yaml']
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
15
+ # outputs: ['yaml']
12
16
  tree:
13
17
  children:
14
18
  child-0:
15
19
  defaults:
16
20
  cpu/thermal-design-power: 100
17
21
  pipeline:
18
- - teads-curve
22
+ - interpolate
19
23
  inputs:
20
24
  - timestamp: 2023-07-06T00:00
21
25
  duration: 1
@@ -3,19 +3,23 @@ description: a negative test case that fails due to the required `duration` fiel
3
3
  tags:
4
4
  initialize:
5
5
  plugins:
6
- teads-curve:
7
- path: '@grnsft/if-unofficial-plugins'
8
- method: TeadsCurve
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: builtin
9
9
  global-config:
10
- interpolation: spline
11
- outputs: ['yaml']
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
15
+ # outputs: ['yaml']
12
16
  tree:
13
17
  children:
14
18
  child-0:
15
19
  defaults:
16
20
  cpu/thermal-design-power: 100
17
21
  pipeline:
18
- - teads-curve
22
+ - interpolate
19
23
  inputs:
20
24
  - timestamp: 2023-07-06T00:00
21
25
  cpu/utilization: 20
@@ -3,11 +3,15 @@ description: a negative test case that fails due to the plugin name in the pipel
3
3
  tags:
4
4
  initialize:
5
5
  plugins:
6
- teads-curve:
7
- path: '@grnsft/if-unofficial-plugins'
8
- method: TeadsCurve
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: builtin
9
9
  global-config:
10
- interpolation: spline
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
11
15
  outputs: ['yaml']
12
16
  tree:
13
17
  children:
@@ -4,18 +4,22 @@ tags:
4
4
  initialize:
5
5
  # outputs: ['yaml']
6
6
  plugins:
7
- teads-curve:
8
- path: '@grnsft/if-unofficial-plugins'
9
- method: TeadsCurve
7
+ "interpolate":
8
+ method: Interpolation
9
+ path: builtin
10
10
  global-config:
11
- interpolation: spline
11
+ method: linear
12
+ x: [0, 10, 50, 100]
13
+ y: [0.12, 0.32, 0.75, 1.02]
14
+ input-parameter: 'cpu/utilization'
15
+ output-parameter: 'cpu-factor'
12
16
  tree:
13
17
  children:
14
18
  child-0:
15
19
  defaults:
16
20
  cpu/thermal-design-power: 100
17
21
  pipeline:
18
- - teads-curve
22
+ - interpolate
19
23
  - multiply
20
24
  inputs:
21
25
  - timestamp: 2023-07-06T00:00
@@ -3,49 +3,58 @@ description: a negative test case that fails because sci-o is invoked too early
3
3
  tags:
4
4
  initialize:
5
5
  plugins:
6
- "teads-curve":
7
- path: "@grnsft/if-unofficial-plugins"
8
- method: TeadsCurve
6
+ "interpolate":
7
+ method: Interpolation
8
+ path: 'builtin'
9
9
  global-config:
10
- interpolation: spline
11
- "sum":
12
- path: "builtin"
13
- method: Sum
10
+ method: linear
11
+ x: [0, 10, 50, 100]
12
+ y: [0.12, 0.32, 0.75, 1.02]
13
+ input-parameter: 'cpu/utilization'
14
+ output-parameter: 'cpu-factor'
15
+ "cpu-factor-to-wattage":
16
+ method: Multiply
17
+ path: builtin
18
+ global-config:
19
+ input-parameters: ["cpu-factor", "cpu/thermal-design-power"]
20
+ output-parameter: "cpu-wattage"
21
+ "wattage-times-duration":
22
+ method: Multiply
23
+ path: builtin
14
24
  global-config:
15
- input-parameters:
16
- - cpu/energy
17
- - network/energy
18
- output-parameter: energy
19
- "sci-embodied":
25
+ input-parameters: ["cpu-wattage", "duration"]
26
+ output-parameter: "cpu-wattage-times-duration"
27
+ "wattage-to-energy-kwh":
28
+ method: Divide
20
29
  path: "builtin"
21
- method: SciEmbodied
22
- "sci-o":
23
- path: "@grnsft/if-plugins"
24
- method: SciO
25
- "sci":
30
+ global-config:
31
+ numerator: cpu-wattage-times-duration
32
+ denominator: 3600000
33
+ output: cpu-energy-raw
34
+ "calculate-vcpu-ratio":
35
+ method: Divide
26
36
  path: "builtin"
27
- method: Sci
28
37
  global-config:
29
- functional-unit: ""
30
- functional-unit-time: "1-day"
31
- "time-sync":
32
- method: TimeSync
38
+ numerator: vcpus-total
39
+ denominator: vcpus-allocated
40
+ output: vcpu-ratio
41
+ "correct-cpu-energy-for-vcpu-ratio":
42
+ method: Divide
33
43
  path: "builtin"
34
44
  global-config:
35
- start-time: "2023-12-12T00:00:00.000Z"
36
- end-time: "2023-12-12T00:01:00.000Z"
37
- interval: 5
38
- allow-padding: true
45
+ numerator: cpu-energy-raw
46
+ denominator: vcpu-ratio
47
+ output: cpu-energy-kwh
39
48
  tree:
40
49
  children:
41
50
  child-1:
42
51
  pipeline:
43
- - teads-curve
44
- - sci-o
45
- - sum
46
- - sci-embodied
47
- - time-sync
48
- - sci
52
+ - interpolate
53
+ - correct-cpu-energy-for-vcpu-ratio
54
+ - calculate-vcpu-ratio
55
+ - cpu-factor-to-wattage
56
+ - wattage-times-duration
57
+ - wattage-to-energy-kwh
49
58
  config:
50
59
  defaults:
51
60
  cpu/thermal-design-power: 100
@@ -53,8 +62,8 @@ tree:
53
62
  device/emissions-embodied: 1533.120 # gCO2eq
54
63
  time-reserved: 3600 # 1hr in seconds
55
64
  device/expected-lifespan: 94608000 # 3 years in seconds
56
- resources-reserved: 1
57
- resources-total: 8
65
+ vcpus-allocated: 1
66
+ vcpus-total: 8
58
67
  inputs:
59
68
  - timestamp: "2023-12-12T00:00:00.000Z"
60
69
  cloud/instance-type: A1
@@ -0,0 +1,20 @@
1
+ name: copy-param
2
+ description:
3
+ tags:
4
+ initialize:
5
+ plugins:
6
+ copy-param:
7
+ path: builtin
8
+ method: Copy
9
+ global-config:
10
+ keep-existing: true
11
+ from: original
12
+ to: copy
13
+ tree:
14
+ children:
15
+ child-1:
16
+ pipeline:
17
+ - copy-param
18
+ inputs:
19
+ - timestamp: "2023-12-12T00:00:00.000Z"
20
+ original: 'hello'