@grnsft/if 0.4.0-beta.0 → 0.4.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 (181) hide show
  1. package/CONTRIBUTING.md +3 -0
  2. package/README.md +6 -0
  3. package/build/builtins/coefficient/index.d.ts +3 -0
  4. package/build/builtins/coefficient/index.js +51 -0
  5. package/build/builtins/coefficient/types.d.ts +5 -0
  6. package/build/builtins/coefficient/types.js +3 -0
  7. package/build/builtins/csv-lookup/index.d.ts +2 -0
  8. package/build/builtins/csv-lookup/index.js +181 -0
  9. package/build/builtins/divide/index.d.ts +2 -0
  10. package/build/builtins/divide/index.js +67 -0
  11. package/build/builtins/exponent/index.d.ts +3 -0
  12. package/build/builtins/exponent/index.js +72 -0
  13. package/build/builtins/exponent/types.d.ts +5 -0
  14. package/build/builtins/exponent/types.js +3 -0
  15. package/build/builtins/export-csv-raw.js +4 -1
  16. package/build/builtins/export-csv.js +4 -1
  17. package/build/builtins/export-log.js +4 -2
  18. package/build/builtins/export-yaml.js +4 -1
  19. package/build/builtins/index.d.ts +13 -0
  20. package/build/builtins/index.js +28 -2
  21. package/build/builtins/interpolation/index.d.ts +2 -0
  22. package/build/builtins/interpolation/index.js +146 -0
  23. package/build/builtins/interpolation/types.d.ts +5 -0
  24. package/build/builtins/interpolation/types.js +10 -0
  25. package/build/builtins/mock-observations/helpers/common-generator.d.ts +3 -0
  26. package/build/builtins/mock-observations/helpers/common-generator.js +32 -0
  27. package/build/builtins/mock-observations/helpers/rand-int-generator.d.ts +3 -0
  28. package/build/builtins/mock-observations/helpers/rand-int-generator.js +58 -0
  29. package/build/builtins/mock-observations/index.d.ts +3 -0
  30. package/build/builtins/mock-observations/index.js +116 -0
  31. package/build/builtins/mock-observations/interfaces/index.d.ts +6 -0
  32. package/build/builtins/mock-observations/interfaces/index.js +3 -0
  33. package/build/builtins/mock-observations/types.d.ts +13 -0
  34. package/build/builtins/mock-observations/types.js +3 -0
  35. package/build/builtins/multiply/index.d.ts +3 -0
  36. package/build/builtins/multiply/index.js +63 -0
  37. package/build/builtins/multiply/types.d.ts +4 -0
  38. package/build/builtins/multiply/types.js +3 -0
  39. package/build/builtins/regex/index.d.ts +3 -0
  40. package/build/builtins/regex/index.js +78 -0
  41. package/build/builtins/sci/config.d.ts +1 -0
  42. package/build/builtins/sci/config.js +44 -0
  43. package/build/builtins/sci/index.d.ts +3 -0
  44. package/build/builtins/sci/index.js +69 -0
  45. package/build/builtins/sci-embodied/index.d.ts +2 -0
  46. package/build/builtins/sci-embodied/index.js +115 -0
  47. package/build/builtins/shell/index.d.ts +3 -0
  48. package/build/builtins/shell/index.js +58 -0
  49. package/build/builtins/subtract/index.d.ts +3 -0
  50. package/build/builtins/subtract/index.js +75 -0
  51. package/build/builtins/subtract/types.d.ts +4 -0
  52. package/build/builtins/subtract/types.js +3 -0
  53. package/build/builtins/sum/index.d.ts +3 -0
  54. package/build/builtins/sum/index.js +61 -0
  55. package/build/builtins/sum/types.d.ts +4 -0
  56. package/build/builtins/sum/types.js +3 -0
  57. package/build/config/config.d.ts +8 -2
  58. package/build/config/config.js +34 -1
  59. package/build/config/strings.d.ts +22 -0
  60. package/build/config/strings.js +23 -1
  61. package/build/diff.d.ts +2 -0
  62. package/build/diff.js +46 -0
  63. package/build/index.js +8 -4
  64. package/build/lib/aggregate.js +5 -1
  65. package/build/lib/compare.d.ts +10 -0
  66. package/build/lib/compare.js +56 -0
  67. package/build/lib/compute.js +9 -1
  68. package/build/lib/environment.js +9 -3
  69. package/build/lib/exhaust.js +3 -2
  70. package/build/lib/initialize.js +5 -2
  71. package/build/lib/load.d.ts +48 -0
  72. package/build/lib/load.js +49 -2
  73. package/build/lib/parameterize.js +8 -4
  74. package/build/types/common.d.ts +4 -0
  75. package/build/types/common.js +3 -0
  76. package/build/types/helpers.d.ts +4 -0
  77. package/build/types/helpers.js +3 -0
  78. package/build/types/interface.d.ts +2 -1
  79. package/build/types/interface.js +1 -1
  80. package/build/types/lib/compare.d.ts +7 -0
  81. package/build/types/lib/compare.js +3 -0
  82. package/build/types/process-args.d.ts +7 -1
  83. package/build/types/process-args.js +1 -1
  84. package/build/types/util/args.d.ts +5 -0
  85. package/build/types/util/args.js +3 -0
  86. package/build/util/args.d.ts +7 -2
  87. package/build/util/args.js +49 -11
  88. package/build/util/debug-logger.d.ts +4 -0
  89. package/build/util/debug-logger.js +117 -0
  90. package/build/util/errors.d.ts +1 -1
  91. package/build/util/errors.js +6 -1
  92. package/build/util/helpers.d.ts +23 -0
  93. package/build/util/helpers.js +116 -2
  94. package/build/util/log-memoize.d.ts +1 -1
  95. package/build/util/log-memoize.js +1 -1
  96. package/build/util/validations.d.ts +59 -51
  97. package/build/util/validations.js +49 -18
  98. package/github-processes.md +39 -0
  99. package/package.json +1 -1
  100. package/.env +0 -5
  101. package/coverage/clover.xml +0 -1590
  102. package/coverage/coverage-final.json +0 -50
  103. package/coverage/lcov-report/base.css +0 -224
  104. package/coverage/lcov-report/block-navigation.js +0 -87
  105. package/coverage/lcov-report/builtins/coefficient/index.html +0 -116
  106. package/coverage/lcov-report/builtins/coefficient/index.ts.html +0 -295
  107. package/coverage/lcov-report/builtins/csv-lookup/index.html +0 -116
  108. package/coverage/lcov-report/builtins/csv-lookup/index.ts.html +0 -832
  109. package/coverage/lcov-report/builtins/divide/index.html +0 -116
  110. package/coverage/lcov-report/builtins/divide/index.ts.html +0 -361
  111. package/coverage/lcov-report/builtins/exponent/index.html +0 -116
  112. package/coverage/lcov-report/builtins/exponent/index.ts.html +0 -355
  113. package/coverage/lcov-report/builtins/export-csv-raw.ts.html +0 -553
  114. package/coverage/lcov-report/builtins/export-csv.ts.html +0 -433
  115. package/coverage/lcov-report/builtins/export-log.ts.html +0 -145
  116. package/coverage/lcov-report/builtins/export-yaml.ts.html +0 -184
  117. package/coverage/lcov-report/builtins/group-by.ts.html +0 -364
  118. package/coverage/lcov-report/builtins/index.html +0 -206
  119. package/coverage/lcov-report/builtins/index.ts.html +0 -130
  120. package/coverage/lcov-report/builtins/interpolation/index.html +0 -131
  121. package/coverage/lcov-report/builtins/interpolation/index.ts.html +0 -670
  122. package/coverage/lcov-report/builtins/interpolation/types.ts.html +0 -100
  123. package/coverage/lcov-report/builtins/mock-observations/helpers/common-generator.ts.html +0 -181
  124. package/coverage/lcov-report/builtins/mock-observations/helpers/index.html +0 -131
  125. package/coverage/lcov-report/builtins/mock-observations/helpers/rand-int-generator.ts.html +0 -295
  126. package/coverage/lcov-report/builtins/mock-observations/index.html +0 -116
  127. package/coverage/lcov-report/builtins/mock-observations/index.ts.html +0 -613
  128. package/coverage/lcov-report/builtins/multiply/index.html +0 -116
  129. package/coverage/lcov-report/builtins/multiply/index.ts.html +0 -337
  130. package/coverage/lcov-report/builtins/regex/index.html +0 -116
  131. package/coverage/lcov-report/builtins/regex/index.ts.html +0 -379
  132. package/coverage/lcov-report/builtins/sci/config.ts.html +0 -205
  133. package/coverage/lcov-report/builtins/sci/index.html +0 -116
  134. package/coverage/lcov-report/builtins/sci/index.ts.html +0 -331
  135. package/coverage/lcov-report/builtins/sci-embodied/index.html +0 -116
  136. package/coverage/lcov-report/builtins/sci-embodied/index.ts.html +0 -481
  137. package/coverage/lcov-report/builtins/shell/index.html +0 -116
  138. package/coverage/lcov-report/builtins/shell/index.ts.html +0 -283
  139. package/coverage/lcov-report/builtins/subtract/index.html +0 -116
  140. package/coverage/lcov-report/builtins/subtract/index.ts.html +0 -373
  141. package/coverage/lcov-report/builtins/sum/index.html +0 -116
  142. package/coverage/lcov-report/builtins/sum/index.ts.html +0 -340
  143. package/coverage/lcov-report/builtins/time-sync.ts.html +0 -1459
  144. package/coverage/lcov-report/config/config.ts.html +0 -334
  145. package/coverage/lcov-report/config/index.html +0 -161
  146. package/coverage/lcov-report/config/index.ts.html +0 -94
  147. package/coverage/lcov-report/config/params.ts.html +0 -697
  148. package/coverage/lcov-report/config/strings.ts.html +0 -415
  149. package/coverage/lcov-report/favicon.png +0 -0
  150. package/coverage/lcov-report/index.html +0 -386
  151. package/coverage/lcov-report/lib/aggregate.ts.html +0 -331
  152. package/coverage/lcov-report/lib/compare.ts.html +0 -283
  153. package/coverage/lcov-report/lib/compute.ts.html +0 -391
  154. package/coverage/lcov-report/lib/environment.ts.html +0 -343
  155. package/coverage/lcov-report/lib/exhaust.ts.html +0 -283
  156. package/coverage/lcov-report/lib/index.html +0 -221
  157. package/coverage/lcov-report/lib/initialize.ts.html +0 -388
  158. package/coverage/lcov-report/lib/load.ts.html +0 -268
  159. package/coverage/lcov-report/lib/parameterize.ts.html +0 -283
  160. package/coverage/lcov-report/prettify.css +0 -1
  161. package/coverage/lcov-report/prettify.js +0 -2
  162. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  163. package/coverage/lcov-report/sorter.js +0 -196
  164. package/coverage/lcov-report/types/aggregation.ts.html +0 -94
  165. package/coverage/lcov-report/types/index.html +0 -146
  166. package/coverage/lcov-report/types/interface.ts.html +0 -181
  167. package/coverage/lcov-report/types/parameters.ts.html +0 -106
  168. package/coverage/lcov-report/util/aggregation-helper.ts.html +0 -286
  169. package/coverage/lcov-report/util/args.ts.html +0 -508
  170. package/coverage/lcov-report/util/errors.ts.html +0 -232
  171. package/coverage/lcov-report/util/helpers.ts.html +0 -613
  172. package/coverage/lcov-report/util/index.html +0 -266
  173. package/coverage/lcov-report/util/json.ts.html +0 -115
  174. package/coverage/lcov-report/util/log-memoize.ts.html +0 -145
  175. package/coverage/lcov-report/util/logger.ts.html +0 -151
  176. package/coverage/lcov-report/util/os-checker.ts.html +0 -421
  177. package/coverage/lcov-report/util/plugin-storage.ts.html +0 -199
  178. package/coverage/lcov-report/util/validations.ts.html +0 -526
  179. package/coverage/lcov-report/util/yaml.ts.html +0 -193
  180. package/coverage/lcov.info +0 -2811
  181. package/src/__tests__/integration/manifest/sci-e.yaml +0 -23
@@ -1,11 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validate = exports.validateManifest = exports.manifestSchema = void 0;
3
+ exports.validate = exports.validateManifest = exports.manifestSchema = exports.allDefined = exports.atLeastOneDefined = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const errors_1 = require("./errors");
6
6
  const aggregation_1 = require("../types/aggregation");
7
7
  const parameters_1 = require("../types/parameters");
8
+ const strings_1 = require("../config/strings");
8
9
  const { ManifestValidationError, InputValidationError } = errors_1.ERRORS;
10
+ const { VALIDATING_MANIFEST } = strings_1.STRINGS;
11
+ /**
12
+ * At least one property defined handler.
13
+ */
14
+ const atLeastOneDefined = (obj) => Object.values(obj).some(v => v !== undefined);
15
+ exports.atLeastOneDefined = atLeastOneDefined;
16
+ /**
17
+ * All properties are defined handler.
18
+ */
19
+ const allDefined = (obj) => Object.values(obj).every(v => v !== undefined);
20
+ exports.allDefined = allDefined;
9
21
  /**
10
22
  * Validation schema for manifests.
11
23
  */
@@ -44,50 +56,69 @@ exports.manifestSchema = zod_1.z.object({
44
56
  })),
45
57
  outputs: zod_1.z.array(zod_1.z.string()).optional(),
46
58
  }),
47
- execution: zod_1.z.object({
48
- command: zod_1.z.string(),
49
- environment: zod_1.z.object({
59
+ execution: zod_1.z
60
+ .object({
61
+ command: zod_1.z.string().optional(),
62
+ environment: zod_1.z
63
+ .object({
50
64
  'if-version': zod_1.z.string(),
51
65
  os: zod_1.z.string(),
52
66
  'os-version': zod_1.z.string(),
53
67
  'node-version': zod_1.z.string(),
54
68
  'date-time': zod_1.z.string(),
55
69
  dependencies: zod_1.z.array(zod_1.z.string()),
56
- }),
70
+ })
71
+ .optional(),
57
72
  status: zod_1.z.string(),
58
73
  error: zod_1.z.string().optional(),
59
- }),
74
+ })
75
+ .optional(),
60
76
  tree: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
61
77
  });
62
78
  /**
63
79
  * Validates given `manifest` object to match pattern.
64
80
  */
65
- const validateManifest = (manifest) => (0, exports.validate)(exports.manifestSchema, manifest, ManifestValidationError);
81
+ const validateManifest = (manifest) => {
82
+ console.debug(VALIDATING_MANIFEST);
83
+ return (0, exports.validate)(exports.manifestSchema, manifest, undefined, ManifestValidationError);
84
+ };
66
85
  exports.validateManifest = validateManifest;
67
86
  /**
68
87
  * Validates given `object` with given `schema`.
69
88
  */
70
- const validate = (schema, object, errorConstructor = InputValidationError) => {
89
+ const validate = (schema, object, index, errorConstructor = InputValidationError) => {
71
90
  const validationResult = schema.safeParse(object);
72
91
  if (!validationResult.success) {
73
- throw new errorConstructor(prettifyErrorMessage(validationResult.error.message));
92
+ throw new errorConstructor(prettifyErrorMessage(validationResult.error.message, index));
74
93
  }
75
94
  return validationResult.data;
76
95
  };
77
96
  exports.validate = validate;
78
97
  /**
79
- * Beautify error message from zod issue.
98
+ * Error message formatter for zod issues.
80
99
  */
81
- const prettifyErrorMessage = (issues) => {
100
+ const prettifyErrorMessage = (issues, index) => {
82
101
  const issuesArray = JSON.parse(issues);
83
102
  return issuesArray.map((issue) => {
84
- const { code, path, message } = issue;
85
- const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
86
- const fullPath = flattenPath.join('.');
87
- if (code === 'custom') {
88
- return `${message.toLowerCase()}. Error code: ${code}.`;
103
+ const code = issue.code;
104
+ let { path, message } = issue;
105
+ const indexErrorMessage = index !== undefined ? ` at index ${index}` : '';
106
+ if (issue.code === zod_1.ZodIssueCode.invalid_union) {
107
+ message = issue.unionErrors[0].issues[0].message;
108
+ path = issue.unionErrors[0].issues[0].path;
109
+ }
110
+ const fullPath = flattenPath(path);
111
+ if (!fullPath) {
112
+ return message;
89
113
  }
90
- return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
114
+ return `"${fullPath}" parameter is ${message.toLowerCase()}${indexErrorMessage}. Error code: ${code}.`;
91
115
  });
92
116
  };
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUM7U0FDRCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7SUFDYixXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO1NBQ1YsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQ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RUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7U0FDekQ7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNvbXBsZXhpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgICAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBwYXJhbXM6IHpcbiAgICAuYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICAgICAgICBhZ2dyZWdhdGlvbjogei5lbnVtKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICAgICAgdW5pdDogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGV4ZWN1dGlvbjogei5vYmplY3Qoe1xuICAgIGNvbW1hbmQ6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHoub2JqZWN0KHtcbiAgICAgICdpZi12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgIG9zOiB6LnN0cmluZygpLFxuICAgICAgJ29zLXZlcnNpb24nOiB6LnN0cmluZygpLFxuICAgICAgJ25vZGUtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAnZGF0ZS10aW1lJzogei5zdHJpbmcoKSxcbiAgICAgIGRlcGVuZGVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICB9KSxcbiAgICBzdGF0dXM6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBhbnkpID0+XG4gIHZhbGlkYXRlKG1hbmlmZXN0U2NoZW1hLCBtYW5pZmVzdCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgb2JqZWN0YCB3aXRoIGdpdmVuIGBzY2hlbWFgLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSA8VD4oXG4gIHNjaGVtYTogWm9kU2NoZW1hPFQ+LFxuICBvYmplY3Q6IGFueSxcbiAgZXJyb3JDb25zdHJ1Y3RvcjogRXJyb3JDb25zdHJ1Y3RvciA9IElucHV0VmFsaWRhdGlvbkVycm9yXG4pID0+IHtcbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2Uob2JqZWN0KTtcblxuICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBlcnJvckNvbnN0cnVjdG9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5kYXRhO1xufTtcblxuLyoqXG4gKiBCZWF1dGlmeSBlcnJvciBtZXNzYWdlIGZyb20gem9kIGlzc3VlLlxuICovXG5jb25zdCBwcmV0dGlmeUVycm9yTWVzc2FnZSA9IChpc3N1ZXM6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICByZXR1cm4gaXNzdWVzQXJyYXkubWFwKChpc3N1ZTogWm9kSXNzdWUpID0+IHtcbiAgICBjb25zdCB7Y29kZSwgcGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcbiAgICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICAgIHR5cGVvZiBwYXJ0ID09PSAnbnVtYmVyJyA/IGBbJHtwYXJ0fV1gIDogcGFydFxuICAgICk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG5cbiAgICBpZiAoY29kZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIHJldHVybiBgJHttZXNzYWdlLnRvTG93ZXJDYXNlKCl9LiBFcnJvciBjb2RlOiAke2NvZGV9LmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG4iXX0=
117
+ /**
118
+ * Flattens an array representing a nested path into a string.
119
+ */
120
+ const flattenPath = (path) => {
121
+ const flattenPath = path.map(part => typeof part === 'number' ? `[${part}]` : part);
122
+ return flattenPath.join('.');
123
+ };
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBeUQ7QUFFekQscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsK0NBQTBDO0FBRTFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUMvRCxNQUFNLEVBQUMsbUJBQW1CLEVBQUMsR0FBRyxpQkFBTyxDQUFDO0FBRXRDOztHQUVHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixHQUE4QyxFQUM5QyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFGdEMsUUFBQSxpQkFBaUIscUJBRXFCO0FBRW5EOztHQUVHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUE4QyxFQUFFLEVBQUUsQ0FDM0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEcEMsUUFBQSxVQUFVLGNBQzBCO0FBRWpEOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUs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QUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM1QztRQUVELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLGlCQUFpQixpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDekcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBeUIsRUFBVSxFQUFFO0lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7SUFFRixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtab2RJc3N1ZSwgWm9kSXNzdWVDb2RlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnL3N0cmluZ3MnO1xuXG5jb25zdCB7TWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IsIElucHV0VmFsaWRhdGlvbkVycm9yfSA9IEVSUk9SUztcbmNvbnN0IHtWQUxJREFUSU5HX01BTklGRVNUfSA9IFNUUklOR1M7XG5cbi8qKlxuICogQXQgbGVhc3Qgb25lIHByb3BlcnR5IGRlZmluZWQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGF0TGVhc3RPbmVEZWZpbmVkID0gKFxuICBvYmo6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIHVua25vd24+XG4pID0+IE9iamVjdC52YWx1ZXMob2JqKS5zb21lKHYgPT4gdiAhPT0gdW5kZWZpbmVkKTtcblxuLyoqXG4gKiBBbGwgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBoYW5kbGVyLlxuICovXG5leHBvcnQgY29uc3QgYWxsRGVmaW5lZCA9IChvYmo6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIHVua25vd24+KSA9PlxuICBPYmplY3QudmFsdWVzKG9iaikuZXZlcnkodiA9PiB2ICE9PSB1bmRlZmluZWQpO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNvbXBsZXhpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgICAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBwYXJhbXM6IHpcbiAgICAuYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICAgICAgICBhZ2dyZWdhdGlvbjogei5lbnVtKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICAgICAgdW5pdDogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGV4ZWN1dGlvbjogelxuICAgIC5vYmplY3Qoe1xuICAgICAgY29tbWFuZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgZW52aXJvbm1lbnQ6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgJ2lmLXZlcnNpb24nOiB6LnN0cmluZygpLFxuICAgICAgICAgIG9zOiB6LnN0cmluZygpLFxuICAgICAgICAgICdvcy12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgICAgICAnbm9kZS12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgICAgICAnZGF0ZS10aW1lJzogei5zdHJpbmcoKSxcbiAgICAgICAgICBkZXBlbmRlbmNpZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxuICAgICAgc3RhdHVzOiB6LnN0cmluZygpLFxuICAgICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KVxuICAgIC5vcHRpb25hbCgpLFxuICB0cmVlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbn0pO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgbWFuaWZlc3RgIG9iamVjdCB0byBtYXRjaCBwYXR0ZXJuLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVNYW5pZmVzdCA9IChtYW5pZmVzdDogYW55KSA9PiB7XG4gIGNvbnNvbGUuZGVidWcoVkFMSURBVElOR19NQU5JRkVTVCk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlKG1hbmlmZXN0U2NoZW1hLCBtYW5pZmVzdCwgdW5kZWZpbmVkLCBNYW5pZmVzdFZhbGlkYXRpb25FcnJvcik7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgb2JqZWN0YCB3aXRoIGdpdmVuIGBzY2hlbWFgLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSA8VD4oXG4gIHNjaGVtYTogWm9kU2NoZW1hPFQ+LFxuICBvYmplY3Q6IGFueSxcbiAgaW5kZXg/OiBudW1iZXIsXG4gIGVycm9yQ29uc3RydWN0b3I6IEVycm9yQ29uc3RydWN0b3IgPSBJbnB1dFZhbGlkYXRpb25FcnJvclxuKSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKG9iamVjdCk7XG5cbiAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JDb25zdHJ1Y3RvcihcbiAgICAgIHByZXR0aWZ5RXJyb3JNZXNzYWdlKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZSwgaW5kZXgpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LmRhdGE7XG59O1xuXG4vKipcbiAqIEVycm9yIG1lc3NhZ2UgZm9ybWF0dGVyIGZvciB6b2QgaXNzdWVzLlxuICovXG5jb25zdCBwcmV0dGlmeUVycm9yTWVzc2FnZSA9IChpc3N1ZXM6IHN0cmluZywgaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgY29uc3QgaXNzdWVzQXJyYXkgPSBKU09OLnBhcnNlKGlzc3Vlcyk7XG5cbiAgcmV0dXJuIGlzc3Vlc0FycmF5Lm1hcCgoaXNzdWU6IFpvZElzc3VlKSA9PiB7XG4gICAgY29uc3QgY29kZSA9IGlzc3VlLmNvZGU7XG4gICAgbGV0IHtwYXRoLCBtZXNzYWdlfSA9IGlzc3VlO1xuXG4gICAgY29uc3QgaW5kZXhFcnJvck1lc3NhZ2UgPSBpbmRleCAhPT0gdW5kZWZpbmVkID8gYCBhdCBpbmRleCAke2luZGV4fWAgOiAnJztcblxuICAgIGlmIChpc3N1ZS5jb2RlID09PSBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbikge1xuICAgICAgbWVzc2FnZSA9IGlzc3VlLnVuaW9uRXJyb3JzWzBdLmlzc3Vlc1swXS5tZXNzYWdlO1xuICAgICAgcGF0aCA9IGlzc3VlLnVuaW9uRXJyb3JzWzBdLmlzc3Vlc1swXS5wYXRoO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gZmxhdHRlblBhdGgocGF0aCk7XG5cbiAgICBpZiAoIWZ1bGxQYXRoKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYFwiJHtmdWxsUGF0aH1cIiBwYXJhbWV0ZXIgaXMgJHttZXNzYWdlLnRvTG93ZXJDYXNlKCl9JHtpbmRleEVycm9yTWVzc2FnZX0uIEVycm9yIGNvZGU6ICR7Y29kZX0uYDtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEZsYXR0ZW5zIGFuIGFycmF5IHJlcHJlc2VudGluZyBhIG5lc3RlZCBwYXRoIGludG8gYSBzdHJpbmcuXG4gKi9cbmNvbnN0IGZsYXR0ZW5QYXRoID0gKHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICB0eXBlb2YgcGFydCA9PT0gJ251bWJlcicgPyBgWyR7cGFydH1dYCA6IHBhcnRcbiAgKTtcblxuICByZXR1cm4gZmxhdHRlblBhdGguam9pbignLicpO1xufTtcbiJdfQ==
@@ -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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@grnsft/if",
3
3
  "description": "Impact Framework",
4
- "version": "0.4.0-beta.0",
4
+ "version": "0.4.0",
5
5
  "author": {
6
6
  "name": "Green Software Foundation",
7
7
  "email": "info@gsf.com"
package/.env DELETED
@@ -1,5 +0,0 @@
1
- # WATT_TIME_USERNAME=manushak
2
- # WATT_TIME_PASSWORD=S7Ub&_tNF=s{
3
-
4
- WATT_TIME_USERNAME=m_test
5
- WATT_TIME_PASSWORD=@watt-time17