aios-core 4.2.6 → 4.2.7

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 (26) hide show
  1. package/.aios-core/core/orchestration/context-manager.js +333 -5
  2. package/.aios-core/core/orchestration/dashboard-integration.js +17 -1
  3. package/.aios-core/core/orchestration/execution-profile-resolver.js +107 -0
  4. package/.aios-core/core/orchestration/index.js +3 -0
  5. package/.aios-core/core/orchestration/skill-dispatcher.js +2 -0
  6. package/.aios-core/core/orchestration/subagent-prompt-builder.js +2 -0
  7. package/.aios-core/core/orchestration/workflow-orchestrator.js +113 -5
  8. package/.aios-core/data/entity-registry.yaml +1114 -1336
  9. package/.aios-core/development/agents/ux-design-expert.md +1 -1
  10. package/.aios-core/development/checklists/brownfield-compatibility-checklist.md +114 -0
  11. package/.aios-core/development/scripts/workflow-state-manager.js +128 -1
  12. package/.aios-core/development/tasks/next.md +36 -5
  13. package/.aios-core/hooks/ids-post-commit.js +29 -1
  14. package/.aios-core/hooks/ids-pre-push.js +29 -1
  15. package/.aios-core/infrastructure/contracts/compatibility/aios-4.0.4.yaml +44 -0
  16. package/.aios-core/infrastructure/scripts/validate-parity.js +238 -2
  17. package/.aios-core/install-manifest.yaml +43 -27
  18. package/.aios-core/product/templates/brownfield-risk-report-tmpl.yaml +277 -0
  19. package/.aios-core/workflow-intelligence/engine/suggestion-engine.js +114 -5
  20. package/LICENSE +13 -1
  21. package/README.md +39 -9
  22. package/package.json +8 -6
  23. package/packages/installer/src/wizard/ide-config-generator.js +0 -117
  24. package/packages/installer/src/wizard/index.js +2 -118
  25. package/packages/installer/src/wizard/pro-setup.js +50 -5
  26. package/scripts/semantic-lint.js +190 -0
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
+ const fs = require('fs');
4
5
  const path = require('path');
6
+ const yaml = require('js-yaml');
5
7
  const { spawnSync } = require('child_process');
6
8
  const { validateClaudeIntegration } = require('./validate-claude-integration');
7
9
  const { validateCodexIntegration } = require('./validate-codex-integration');
@@ -10,10 +12,16 @@ const { validateCodexSkills } = require('./codex-skills-sync/validate');
10
12
  const { validatePaths } = require('./validate-paths');
11
13
 
12
14
  function parseArgs(argv = process.argv.slice(2)) {
13
- const args = new Set(argv);
15
+ const args = new Set(
16
+ argv.filter((arg) => !arg.startsWith('--contract=') && !arg.startsWith('--diff=')),
17
+ );
18
+ const contractArg = argv.find((arg) => arg.startsWith('--contract='));
19
+ const diffArg = argv.find((arg) => arg.startsWith('--diff='));
14
20
  return {
15
21
  quiet: args.has('--quiet') || args.has('-q'),
16
22
  json: args.has('--json'),
23
+ contractPath: contractArg ? contractArg.slice('--contract='.length) : null,
24
+ diffPath: diffArg ? diffArg.slice('--diff='.length) : null,
17
25
  };
18
26
  }
19
27
 
@@ -31,6 +39,25 @@ function runSyncValidate(ide, projectRoot) {
31
39
  };
32
40
  }
33
41
 
42
+ function getDefaultContractPath(projectRoot = process.cwd()) {
43
+ return path.join(
44
+ projectRoot,
45
+ '.aios-core',
46
+ 'infrastructure',
47
+ 'contracts',
48
+ 'compatibility',
49
+ 'aios-4.0.4.yaml',
50
+ );
51
+ }
52
+
53
+ function loadCompatibilityContract(contractPath) {
54
+ if (!contractPath || !fs.existsSync(contractPath)) {
55
+ return null;
56
+ }
57
+ const raw = fs.readFileSync(contractPath, 'utf8');
58
+ return yaml.load(raw);
59
+ }
60
+
34
61
  function normalizeResult(input) {
35
62
  if (!input || typeof input !== 'object') {
36
63
  return { ok: false, errors: ['Validator returned invalid result'], warnings: [] };
@@ -43,6 +70,152 @@ function normalizeResult(input) {
43
70
  };
44
71
  }
45
72
 
73
+ function escapeRegex(value) {
74
+ return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
75
+ }
76
+
77
+ function validateCompatibilityContract(contract, resultById, options = {}) {
78
+ const violations = [];
79
+
80
+ if (!contract || typeof contract !== 'object') {
81
+ return ['Compatibility contract is missing or invalid'];
82
+ }
83
+
84
+ const matrix = Array.isArray(contract.ide_matrix) ? contract.ide_matrix : [];
85
+ if (matrix.length === 0) {
86
+ return ['Compatibility contract ide_matrix is empty'];
87
+ }
88
+
89
+ const docsPath = options.docsPath;
90
+ if (!docsPath || !fs.existsSync(docsPath)) {
91
+ violations.push(`Compatibility matrix document not found: ${docsPath || 'undefined'}`);
92
+ return violations;
93
+ }
94
+ const docsContent = fs.readFileSync(docsPath, 'utf8');
95
+
96
+ for (const ide of matrix) {
97
+ const ideName = ide.ide || 'unknown';
98
+ const displayName = ide.display_name || ideName;
99
+ const requiredChecks = Array.isArray(ide.required_checks) ? ide.required_checks : [];
100
+ const expectedStatus = ide.expected_status;
101
+
102
+ if (!expectedStatus) {
103
+ violations.push(`Contract missing expected_status for IDE "${ideName}"`);
104
+ }
105
+
106
+ const rowRegex = new RegExp(
107
+ `\\|\\s*${escapeRegex(displayName)}\\s*\\|\\s*${escapeRegex(expectedStatus || '')}\\s*\\|`,
108
+ 'i',
109
+ );
110
+ if (!rowRegex.test(docsContent)) {
111
+ violations.push(
112
+ `Docs matrix mismatch for "${displayName}": expected status "${expectedStatus}" in ${options.docsPathRelative}`,
113
+ );
114
+ }
115
+
116
+ for (const checkId of requiredChecks) {
117
+ const checkResult = resultById[checkId];
118
+ if (!checkResult) {
119
+ violations.push(`Contract requires unknown check "${checkId}" for IDE "${ideName}"`);
120
+ continue;
121
+ }
122
+ if (!checkResult.ok) {
123
+ violations.push(`Contract violation for "${ideName}": required check "${checkId}" failed`);
124
+ }
125
+ }
126
+ }
127
+
128
+ const globalRequiredChecks = Array.isArray(contract.global_required_checks)
129
+ ? contract.global_required_checks
130
+ : [];
131
+ for (const checkId of globalRequiredChecks) {
132
+ const checkResult = resultById[checkId];
133
+ if (!checkResult) {
134
+ violations.push(`Contract requires unknown global check "${checkId}"`);
135
+ continue;
136
+ }
137
+ if (!checkResult.ok) {
138
+ violations.push(`Contract violation: global required check "${checkId}" failed`);
139
+ }
140
+ }
141
+
142
+ return violations;
143
+ }
144
+
145
+ function sortUnique(values = []) {
146
+ return [...new Set(values)].sort();
147
+ }
148
+
149
+ function diffCompatibilityContracts(currentContract, previousContract) {
150
+ if (!currentContract || !previousContract) {
151
+ return null;
152
+ }
153
+
154
+ const currentRelease = currentContract.release || null;
155
+ const previousRelease = previousContract.release || null;
156
+ const releaseChanged = currentRelease !== previousRelease;
157
+
158
+ const currentGlobalChecks = sortUnique(currentContract.global_required_checks || []);
159
+ const previousGlobalChecks = sortUnique(previousContract.global_required_checks || []);
160
+ const globalChecksAdded = currentGlobalChecks.filter((item) => !previousGlobalChecks.includes(item));
161
+ const globalChecksRemoved = previousGlobalChecks.filter((item) => !currentGlobalChecks.includes(item));
162
+
163
+ const currentByIde = Object.fromEntries((currentContract.ide_matrix || []).map((item) => [item.ide, item]));
164
+ const previousByIde = Object.fromEntries((previousContract.ide_matrix || []).map((item) => [item.ide, item]));
165
+ const ideKeys = sortUnique([...Object.keys(currentByIde), ...Object.keys(previousByIde)]);
166
+
167
+ const ideChanges = [];
168
+ for (const ide of ideKeys) {
169
+ const current = currentByIde[ide];
170
+ const previous = previousByIde[ide];
171
+
172
+ if (!previous && current) {
173
+ ideChanges.push({ ide, type: 'added', current });
174
+ continue;
175
+ }
176
+ if (previous && !current) {
177
+ ideChanges.push({ ide, type: 'removed', previous });
178
+ continue;
179
+ }
180
+
181
+ const currentStatus = current.expected_status || null;
182
+ const previousStatus = previous.expected_status || null;
183
+ const statusChanged = currentStatus !== previousStatus;
184
+ const currentChecks = sortUnique(current.required_checks || []);
185
+ const previousChecks = sortUnique(previous.required_checks || []);
186
+ const checksAdded = currentChecks.filter((item) => !previousChecks.includes(item));
187
+ const checksRemoved = previousChecks.filter((item) => !currentChecks.includes(item));
188
+
189
+ if (statusChanged || checksAdded.length > 0 || checksRemoved.length > 0) {
190
+ ideChanges.push({
191
+ ide,
192
+ type: 'changed',
193
+ status: { previous: previousStatus, current: currentStatus },
194
+ required_checks: {
195
+ added: checksAdded,
196
+ removed: checksRemoved,
197
+ },
198
+ });
199
+ }
200
+ }
201
+
202
+ return {
203
+ from_release: previousRelease,
204
+ to_release: currentRelease,
205
+ release_changed: releaseChanged,
206
+ global_required_checks: {
207
+ added: globalChecksAdded,
208
+ removed: globalChecksRemoved,
209
+ },
210
+ ide_changes: ideChanges,
211
+ has_changes:
212
+ releaseChanged
213
+ || globalChecksAdded.length > 0
214
+ || globalChecksRemoved.length > 0
215
+ || ideChanges.length > 0,
216
+ };
217
+ }
218
+
46
219
  function runParityValidation(options = {}, deps = {}) {
47
220
  const projectRoot = options.projectRoot || process.cwd();
48
221
  const runSync = deps.runSyncValidate || runSyncValidate;
@@ -51,6 +224,15 @@ function runParityValidation(options = {}, deps = {}) {
51
224
  const runGeminiIntegration = deps.validateGeminiIntegration || validateGeminiIntegration;
52
225
  const runCodexSkills = deps.validateCodexSkills || validateCodexSkills;
53
226
  const runPaths = deps.validatePaths || validatePaths;
227
+ const resolvedContractPath = options.contractPath
228
+ ? path.resolve(projectRoot, options.contractPath)
229
+ : getDefaultContractPath(projectRoot);
230
+ const loadContract = deps.loadCompatibilityContract || loadCompatibilityContract;
231
+ const contract = loadContract(resolvedContractPath);
232
+ const resolvedDiffPath = options.diffPath ? path.resolve(projectRoot, options.diffPath) : null;
233
+ const previousContract = resolvedDiffPath ? loadContract(resolvedDiffPath) : null;
234
+ const docsPath = path.join(projectRoot, 'docs', 'ide-integration.md');
235
+ const docsPathRelative = path.relative(projectRoot, docsPath);
54
236
  const checks = [
55
237
  { id: 'claude-sync', exec: () => runSync('claude-code', projectRoot) },
56
238
  { id: 'claude-integration', exec: () => runClaudeIntegration({ projectRoot }) },
@@ -58,6 +240,9 @@ function runParityValidation(options = {}, deps = {}) {
58
240
  { id: 'codex-integration', exec: () => runCodexIntegration({ projectRoot }) },
59
241
  { id: 'gemini-sync', exec: () => runSync('gemini', projectRoot) },
60
242
  { id: 'gemini-integration', exec: () => runGeminiIntegration({ projectRoot }) },
243
+ { id: 'cursor-sync', exec: () => runSync('cursor', projectRoot) },
244
+ { id: 'github-copilot-sync', exec: () => runSync('github-copilot', projectRoot) },
245
+ { id: 'antigravity-sync', exec: () => runSync('antigravity', projectRoot) },
61
246
  { id: 'codex-skills', exec: () => runCodexSkills({ projectRoot, strict: true, quiet: true }) },
62
247
  { id: 'paths', exec: () => runPaths({ projectRoot }) },
63
248
  ];
@@ -66,15 +251,60 @@ function runParityValidation(options = {}, deps = {}) {
66
251
  const normalized = normalizeResult(check.exec());
67
252
  return { id: check.id, ...normalized };
68
253
  });
254
+ const resultById = Object.fromEntries(results.map((r) => [r.id, r]));
255
+ const contractViolations = validateCompatibilityContract(contract, resultById, {
256
+ docsPath,
257
+ docsPathRelative,
258
+ });
259
+ const contractSummary = contract
260
+ ? {
261
+ release: contract.release || null,
262
+ path: path.relative(projectRoot, resolvedContractPath),
263
+ }
264
+ : {
265
+ release: null,
266
+ path: path.relative(projectRoot, resolvedContractPath),
267
+ };
69
268
 
70
269
  return {
71
- ok: results.every((r) => r.ok),
270
+ ok: results.every((r) => r.ok) && contractViolations.length === 0,
72
271
  checks: results,
272
+ contract: contractSummary,
273
+ contractDiff: diffCompatibilityContracts(contract, previousContract),
274
+ contractViolations,
73
275
  };
74
276
  }
75
277
 
76
278
  function formatHumanReport(result) {
77
279
  const lines = [];
280
+ if (result.contract && result.contract.release) {
281
+ lines.push(`Compatibility Contract: ${result.contract.release} (${result.contract.path})`);
282
+ lines.push('');
283
+ }
284
+ if (result.contractDiff) {
285
+ lines.push(
286
+ `Contract Diff: ${result.contractDiff.from_release || 'unknown'} -> ${result.contractDiff.to_release || 'unknown'}`,
287
+ );
288
+ if (!result.contractDiff.has_changes) {
289
+ lines.push('- no changes');
290
+ } else {
291
+ if (result.contractDiff.release_changed) {
292
+ lines.push('- release changed');
293
+ }
294
+ const globalAdded = result.contractDiff.global_required_checks.added || [];
295
+ const globalRemoved = result.contractDiff.global_required_checks.removed || [];
296
+ if (globalAdded.length > 0) {
297
+ lines.push(`- global checks added: ${globalAdded.join(', ')}`);
298
+ }
299
+ if (globalRemoved.length > 0) {
300
+ lines.push(`- global checks removed: ${globalRemoved.join(', ')}`);
301
+ }
302
+ for (const ideChange of result.contractDiff.ide_changes || []) {
303
+ lines.push(`- ${ideChange.ide}: ${ideChange.type}`);
304
+ }
305
+ }
306
+ lines.push('');
307
+ }
78
308
  for (const check of result.checks) {
79
309
  lines.push(`${check.ok ? '✅' : '❌'} ${check.id}`);
80
310
  if (check.errors.length > 0) {
@@ -84,6 +314,11 @@ function formatHumanReport(result) {
84
314
  lines.push(...check.warnings.map((w) => `⚠️ ${w}`));
85
315
  }
86
316
  }
317
+ if (Array.isArray(result.contractViolations) && result.contractViolations.length > 0) {
318
+ lines.push('');
319
+ lines.push('❌ Compatibility Contract Violations');
320
+ lines.push(...result.contractViolations.map((v) => `- ${v}`));
321
+ }
87
322
  lines.push('');
88
323
  lines.push(result.ok ? '✅ Parity validation passed' : '❌ Parity validation failed');
89
324
  return lines.join('\n');
@@ -116,4 +351,5 @@ module.exports = {
116
351
  runParityValidation,
117
352
  normalizeResult,
118
353
  formatHumanReport,
354
+ diffCompatibilityContracts,
119
355
  };
@@ -7,10 +7,10 @@
7
7
  # - SHA256 hashes for change detection
8
8
  # - File types for categorization
9
9
  #
10
- version: 4.2.6
11
- generated_at: "2026-02-16T03:53:42.042Z"
10
+ version: 4.2.7
11
+ generated_at: "2026-02-16T14:10:16.018Z"
12
12
  generator: scripts/generate-install-manifest.js
13
- file_count: 1000
13
+ file_count: 1004
14
14
  files:
15
15
  - path: cli/commands/config/index.js
16
16
  hash: sha256:ebcad2ce3807eda29dcddff76d7a95ddc9b7fa160df21fd608f94b802237e862
@@ -661,13 +661,13 @@ files:
661
661
  type: core
662
662
  size: 10845
663
663
  - path: core/orchestration/context-manager.js
664
- hash: sha256:91b4e84f1a6246f9a1c94191a096bf9ee26b668610cc3fe7aec893931f54d241
664
+ hash: sha256:0dd03e84d0a2ea06165825c5eb7154531337ef98275918119ccd03769af576c3
665
665
  type: core
666
- size: 7299
666
+ size: 16842
667
667
  - path: core/orchestration/dashboard-integration.js
668
- hash: sha256:2099a762e039d7b536b0472231d648a39c34c386d04bdcb1a265c5dd4d261514
668
+ hash: sha256:fc96589a18302ac91036a52a8f4da2f9a1ba8e3f9dc45a4bacb8a279fc6db39d
669
669
  type: core
670
- size: 14603
670
+ size: 15116
671
671
  - path: core/orchestration/data-lifecycle-manager.js
672
672
  hash: sha256:0d5df61805502204c0a467ae9900c940f869743ee332fa19839c9f9cacfe824d
673
673
  type: core
@@ -676,6 +676,10 @@ files:
676
676
  hash: sha256:4f342f7fc05f404de2b899358f86143106737b56d6c486c98e988a67d420078b
677
677
  type: core
678
678
  size: 12310
679
+ - path: core/orchestration/execution-profile-resolver.js
680
+ hash: sha256:bb35f1c16c47c9306128c5f3e6c90df3ed91f9358576ea97a59007b74f5e9927
681
+ type: core
682
+ size: 2696
679
683
  - path: core/orchestration/executor-assignment.js
680
684
  hash: sha256:d022d8bc01432958857894bc424e48e42d21287f44fe2e0cacfbdf03b412d33f
681
685
  type: core
@@ -717,9 +721,9 @@ files:
717
721
  type: core
718
722
  size: 35270
719
723
  - path: core/orchestration/index.js
720
- hash: sha256:a71fc2cf4facd2725d9f330806076424450f7e5eee3dc876aae1fc0335166da7
724
+ hash: sha256:1d1b5471585647512327e7d5836ad826442b4c9bd588f82729fa455b41fa28b9
721
725
  type: core
722
- size: 8630
726
+ size: 8835
723
727
  - path: core/orchestration/lock-manager.js
724
728
  hash: sha256:7764b9e79444e75577931a561444f1bf950d893004abc39fa8c2476f632bb481
725
729
  type: core
@@ -745,13 +749,13 @@ files:
745
749
  type: core
746
750
  size: 24732
747
751
  - path: core/orchestration/skill-dispatcher.js
748
- hash: sha256:0a2dcf12cb8b04c26006c57016cf0d651332e60dee09762f88927c216464abde
752
+ hash: sha256:4a54fec3a3338431d1d9634ebf06f3983d06903570c45d67d0ac15d25c95eb05
749
753
  type: core
750
- size: 10372
754
+ size: 10490
751
755
  - path: core/orchestration/subagent-prompt-builder.js
752
- hash: sha256:3da03371fa4cafa4221299f241acd3c37697b395e29ea0c5c65c81bc13f51326
756
+ hash: sha256:967cc17e019ae030148b276b6fdc6a698ae5f42a05f20e80484cb87ea81ed7af
753
757
  type: core
754
- size: 11255
758
+ size: 11395
755
759
  - path: core/orchestration/surface-checker.js
756
760
  hash: sha256:92e9d5bea78c3db4940c39f79e537821b36451cd524d69e6b738272aa63c08b6
757
761
  type: core
@@ -773,9 +777,9 @@ files:
773
777
  type: core
774
778
  size: 36350
775
779
  - path: core/orchestration/workflow-orchestrator.js
776
- hash: sha256:fb89682ea86d33bf8453062f82be0313fbfdf4da42ebf0220dd12dc29238a50a
780
+ hash: sha256:5d3f14d5f12742ce87c3ae8745f82f4ac9f3df3d1889cf16bfc13743130963f9
777
781
  type: core
778
- size: 26902
782
+ size: 30727
779
783
  - path: core/permissions/__tests__/permission-mode.test.js
780
784
  hash: sha256:87df5f29666a599fb0fec917e0360ae6fa9dd90512f0816ae62fa453dbab7fbb
781
785
  type: core
@@ -1033,9 +1037,9 @@ files:
1033
1037
  type: data
1034
1038
  size: 34251
1035
1039
  - path: data/entity-registry.yaml
1036
- hash: sha256:8d02a5c9e3f219f60059406fffeb843abfdcea1f727b954eb662c6a21ddc17c1
1040
+ hash: sha256:7b9bb3a5354107f9ec29105b5948d5c538e2a3b19d49fa42e2e785e4a767c38b
1037
1041
  type: data
1038
- size: 297196
1042
+ size: 289966
1039
1043
  - path: data/learned-patterns.yaml
1040
1044
  hash: sha256:24ac0b160615583a0ff783d3da8af80b7f94191575d6db2054ec8e10a3f945dc
1041
1045
  type: data
@@ -1125,13 +1129,17 @@ files:
1125
1129
  type: agent
1126
1130
  size: 12076
1127
1131
  - path: development/agents/ux-design-expert.md
1128
- hash: sha256:5dde817f220f1f452b53026643e267eb027e4a131d1e5fc4bbcf6ebd772da3bb
1132
+ hash: sha256:ae3f98570fa6cbd714ecd0aa2f44c7db005f0469b5bd04191d8da3b133bc65f1
1129
1133
  type: agent
1130
- size: 18376
1134
+ size: 18377
1131
1135
  - path: development/checklists/agent-quality-gate.md
1132
1136
  hash: sha256:04d1bf12dd4b0b3d10de04c1825efab742e6475087d3ac9d5c86ca7ff8ec9057
1133
1137
  type: checklist
1134
1138
  size: 16148
1139
+ - path: development/checklists/brownfield-compatibility-checklist.md
1140
+ hash: sha256:d07b1f9e2fcb78f62188ef05a6e6f75a94821b6bb297ea67f2e782e260d27f49
1141
+ type: checklist
1142
+ size: 3335
1135
1143
  - path: development/checklists/self-critique-checklist.md
1136
1144
  hash: sha256:869fbc8fbc333ac8eea4eca3ea4ab9ca79917fa5e53735b70d634c85ac6420c8
1137
1145
  type: checklist
@@ -1417,9 +1425,9 @@ files:
1417
1425
  type: script
1418
1426
  size: 9847
1419
1427
  - path: development/scripts/workflow-state-manager.js
1420
- hash: sha256:56758b8af8b53b74b89b758d84feda85b73ea196704c2969573d183025f052d7
1428
+ hash: sha256:f3573ec1ebd022d31422bf8dcd48df5891f698ab5a9489031bd56e0893087109
1421
1429
  type: script
1422
- size: 15764
1430
+ size: 20129
1423
1431
  - path: development/scripts/workflow-validator.js
1424
1432
  hash: sha256:cb1c698f39984f128918e8a3a4e5aed254ca445c57b9f99fa183ef14abc0f0dc
1425
1433
  type: script
@@ -1869,9 +1877,9 @@ files:
1869
1877
  type: task
1870
1878
  size: 13356
1871
1879
  - path: development/tasks/next.md
1872
- hash: sha256:8ba7dc4567c0c7bf7001f0a26650767f72f45442d312daeb0e321ba4605ce429
1880
+ hash: sha256:d9c84f8892367cd8e1bd453dd08876d051bcc368ca9eacf5d2babb26235427fb
1873
1881
  type: task
1874
- size: 6556
1882
+ size: 7641
1875
1883
  - path: development/tasks/orchestrate-resume.md
1876
1884
  hash: sha256:5da88a904fc9e77d7428344fb83e55f6f4a3cae4f9d21d77092d1c67664c3d86
1877
1885
  type: task
@@ -2472,6 +2480,10 @@ files:
2472
2480
  hash: sha256:e46e4b86e48e22a6f0b7ccb91e7e901bfc779479d4ebc7e776fca6dd4de5b30b
2473
2481
  type: code
2474
2482
  size: 753
2483
+ - path: infrastructure/contracts/compatibility/aios-4.0.4.yaml
2484
+ hash: sha256:e8bea648df5d62a22a979b9d70e3987690db4e19a1ed3beec11d232746297136
2485
+ type: infrastructure
2486
+ size: 1074
2475
2487
  - path: infrastructure/index.js
2476
2488
  hash: sha256:8e05caec57188938d6f348444ad3abce2c06b53bdb46993fb2e8ff81c27fca4c
2477
2489
  type: infrastructure
@@ -2989,9 +3001,9 @@ files:
2989
3001
  type: script
2990
3002
  size: 6692
2991
3003
  - path: infrastructure/scripts/validate-parity.js
2992
- hash: sha256:1ec3b6c5863b4130a30f3844f9f148e86969011a8e557ca8b8d8f3bd5e96bd83
3004
+ hash: sha256:527948d4a35a85c2f558b261f4b0a921d0482cab979e7dffe988b6fa11b7b2a1
2993
3005
  type: script
2994
- size: 3929
3006
+ size: 12683
2995
3007
  - path: infrastructure/scripts/validate-paths.js
2996
3008
  hash: sha256:4360d0735ec2c717a97c1670855c5423cf5172005a93c4698b5305ccec48bc2e
2997
3009
  type: script
@@ -3364,6 +3376,10 @@ files:
3364
3376
  hash: sha256:bc1852d15e3a383c7519e5976094de3055c494fdd467acd83137700c900c4c61
3365
3377
  type: template
3366
3378
  size: 14755
3379
+ - path: product/templates/brownfield-risk-report-tmpl.yaml
3380
+ hash: sha256:173adec3131f0924bc7d64c10f54386bb85dcadc14e6ff3fb9bb2f8172caf162
3381
+ type: template
3382
+ size: 12211
3367
3383
  - path: product/templates/changelog-template.md
3368
3384
  hash: sha256:af44d857c9bf8808e89419d1d859557c3c827de143be3c0f36f2a053c9ee9197
3369
3385
  type: template
@@ -3961,9 +3977,9 @@ files:
3961
3977
  type: workflow-intelligence
3962
3978
  size: 8436
3963
3979
  - path: workflow-intelligence/engine/suggestion-engine.js
3964
- hash: sha256:1283f4a80e4bb00fe22b34822695c282d7a2ca3e2d1394f2923cd57b99a91f32
3980
+ hash: sha256:7e07146e644edc39c5337bfc2f5eee621c39446be40cf303cdf418de97111796
3965
3981
  type: workflow-intelligence
3966
- size: 19809
3982
+ size: 23441
3967
3983
  - path: workflow-intelligence/engine/wave-analyzer.js
3968
3984
  hash: sha256:0d017b70213584a11cad354d54d442be977b183353e6a5e31cc1de4291d0afb9
3969
3985
  type: workflow-intelligence