@ornexus/neocortex 4.60.60 → 4.60.62

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 (86) hide show
  1. package/dist/release-source.json +1 -0
  2. package/dist/sbom.cdx.json +150 -47
  3. package/install.ps1 +1 -1
  4. package/install.sh +1 -1
  5. package/package.json +9 -4
  6. package/packages/client/dist/cli.js +52 -2
  7. package/packages/client/dist/commands/invoke.d.ts +1 -0
  8. package/packages/client/dist/commands/invoke.js +80 -73
  9. package/packages/client/dist/commands/legacy-epic-terminal.d.ts +9 -0
  10. package/packages/client/dist/commands/legacy-epic-terminal.js +1 -0
  11. package/packages/client/dist/commands/legacy-story-pr.d.ts +2 -1
  12. package/packages/client/dist/commands/legacy-story-pr.js +1 -1
  13. package/packages/client/dist/commands/mutation-qa-checkpoint.d.ts +39 -0
  14. package/packages/client/dist/commands/mutation-qa-checkpoint.js +5 -0
  15. package/packages/client/dist/commands/mutation-qa-gate.d.ts +35 -0
  16. package/packages/client/dist/commands/mutation-qa-gate.js +1 -0
  17. package/packages/client/dist/commands/mutation-qa-git.d.ts +2 -0
  18. package/packages/client/dist/commands/mutation-qa-git.js +1 -0
  19. package/packages/client/dist/commands/mutation-qa-policy.d.ts +15 -0
  20. package/packages/client/dist/commands/mutation-qa-policy.js +1 -0
  21. package/packages/client/dist/commands/mutation-qa-run.d.ts +14 -0
  22. package/packages/client/dist/commands/mutation-qa-run.js +3 -0
  23. package/packages/client/dist/commands/mutation-qa-verdict.d.ts +21 -0
  24. package/packages/client/dist/commands/mutation-qa-verdict.js +1 -0
  25. package/packages/client/dist/commands/mutation-qa.d.ts +22 -0
  26. package/packages/client/dist/commands/mutation-qa.js +1 -0
  27. package/packages/client/dist/commands/property-qa.d.ts +1 -0
  28. package/packages/client/dist/commands/property-qa.js +1 -0
  29. package/packages/client/dist/commands/qa-scan-capture.d.ts +52 -0
  30. package/packages/client/dist/commands/qa-scan-capture.js +11 -0
  31. package/packages/client/dist/commands/qa-scan-discovery.d.ts +36 -0
  32. package/packages/client/dist/commands/qa-scan-discovery.js +3 -0
  33. package/packages/client/dist/commands/qa-scan-review.d.ts +119 -0
  34. package/packages/client/dist/commands/qa-scan-review.js +5 -0
  35. package/packages/client/dist/commands/refactor-characterization.d.ts +47 -0
  36. package/packages/client/dist/commands/refactor-characterization.js +12 -0
  37. package/packages/client/dist/commands/refactor-commit.d.ts +45 -0
  38. package/packages/client/dist/commands/refactor-commit.js +13 -0
  39. package/packages/client/dist/commands/refactor-review.d.ts +37 -0
  40. package/packages/client/dist/commands/refactor-review.js +5 -0
  41. package/packages/client/dist/commands/refactor-root.d.ts +85 -0
  42. package/packages/client/dist/commands/refactor-root.js +7 -0
  43. package/packages/client/dist/generated/command-registry.generated.d.ts +9 -9
  44. package/packages/client/dist/generated/command-registry.generated.js +1 -1
  45. package/packages/client/dist/generated/public-projections.generated.d.ts +20 -20
  46. package/packages/client/dist/generated/public-projections.generated.js +1 -1
  47. package/packages/client/dist/git/legacy-story-pr.d.ts +137 -6
  48. package/packages/client/dist/git/legacy-story-pr.js +51 -43
  49. package/packages/client/dist/license/license-client.js +1 -1
  50. package/packages/client/dist/private-execution/delivery.d.ts +49 -4
  51. package/packages/client/dist/private-execution/delivery.js +4 -2
  52. package/packages/client/dist/private-execution/isolated-admission.d.ts +7 -0
  53. package/packages/client/dist/private-execution/isolated-admission.js +10 -10
  54. package/packages/client/dist/private-execution/private-report-store.d.ts +17 -0
  55. package/packages/client/dist/private-execution/private-report-store.js +1 -0
  56. package/packages/client/dist/private-execution/property-test-candidate.d.ts +14 -0
  57. package/packages/client/dist/private-execution/property-test-candidate.js +1 -0
  58. package/packages/client/dist/private-execution/property-test-choices.d.ts +15 -0
  59. package/packages/client/dist/private-execution/property-test-choices.js +3 -0
  60. package/packages/client/dist/private-execution/property-test-plan.d.ts +65 -0
  61. package/packages/client/dist/private-execution/property-test-plan.js +7 -0
  62. package/packages/client/dist/private-execution/property-test-review.d.ts +58 -0
  63. package/packages/client/dist/private-execution/property-test-review.js +4 -0
  64. package/packages/client/dist/private-execution/property-test-runtime.d.ts +18 -0
  65. package/packages/client/dist/private-execution/property-test-runtime.js +9 -0
  66. package/packages/client/dist/private-execution/property-test-source.d.ts +8 -0
  67. package/packages/client/dist/private-execution/property-test-source.js +1 -0
  68. package/packages/client/dist/state/project-state-snapshot.js +1 -1
  69. package/packages/shared/dist/generated/command-registry.generated.js +9 -9
  70. package/packages/shared/dist/generated/invocation-schema.generated.js +2 -2
  71. package/packages/shared/dist/generated/public-projections.generated.js +18 -18
  72. package/packages/shared/dist/invocation/index.d.ts +1 -1
  73. package/packages/shared/dist/invocation/index.js +13 -0
  74. package/packages/shared/dist/merge-readiness/c12-registry-projection.js +111 -0
  75. package/packages/shared/dist/merge-readiness/c12-remote-observation.js +60 -0
  76. package/targets-stubs/antigravity/gemini.md +1 -1
  77. package/targets-stubs/antigravity/skill/SKILL.md +1 -1
  78. package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
  79. package/targets-stubs/claude-code/neocortex-root.md +2 -2
  80. package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
  81. package/targets-stubs/claude-code/neocortex.md +2 -2
  82. package/targets-stubs/codex/AGENTS.md +1 -1
  83. package/targets-stubs/cursor/agent.md +2 -2
  84. package/targets-stubs/gemini-cli/agent.md +2 -2
  85. package/targets-stubs/opencode/neocortex-root.md +1 -1
  86. package/targets-stubs/vscode/neocortex.agent.md +2 -2
@@ -1,56 +1,56 @@
1
1
  /** Generated by scripts/generate-public-catalog-projections.mjs. Do not edit. */
2
2
  export const PUBLIC_PROJECTION_BUNDLE = {
3
3
  "schemaVersion": "PublicProjectionBundle/1.0",
4
- "generationId": "sha256:80e56629e3fbf9cb6be8dd1ea937f231eb187c5a02442217e647910183d52929",
5
- "sourceHash": "80e56629e3fbf9cb6be8dd1ea937f231eb187c5a02442217e647910183d52929",
6
- "catalogHash": "82186cef7dbd3771284389571d313287322bfd0dd80b2142e3f7efec0a0c6bbc",
7
- "publicProjectionHash": "45d4fe4407d45ba322d375a6f57e357afdb17fe115bcf016d49811ad1bb4415f",
8
- "stageProjectionHash": "fe971b5270073ad859e4e0ba5ab7bec635d17925922d279ad1d087c606f90fbc",
9
- "compilationHash": "1f1ec555fe6cb23e9a9d33fa678030c09889469efc4826f372cd32b4d1319dfe",
4
+ "generationId": "sha256:12838b51552e283fadffcea062246c8a0ca3b89353ccc01ce42b91361de6e0e9",
5
+ "sourceHash": "12838b51552e283fadffcea062246c8a0ca3b89353ccc01ce42b91361de6e0e9",
6
+ "catalogHash": "78c0271523e9a7dab978370cf6fc9c4abb3692b7fd21b9e8118bff1886b8fa19",
7
+ "publicProjectionHash": "e5022ae52f9241a51faab0e1d6f64c953e402fecaabac2d384298376dc14002d",
8
+ "stageProjectionHash": "f9875354257eb62be4509cd5cbf0b8e5e214a7414e82b8a8e45bc2baea6f0477",
9
+ "compilationHash": "82aeb4d0dceff6954222b15e35f9baf1d0eab7b14b6a994daaa7e7d793d65626",
10
10
  "registry": {
11
11
  "version": "1.0.0",
12
- "checksum": "a631fa17a24972952ef0270880105bfc4d1a6be17e8622c5916265d945fcb69d"
12
+ "checksum": "184a2d616e0734fd3173d60889d74bae031280513831ec1f0a3a8c36959d2994"
13
13
  },
14
14
  "artifacts": [
15
15
  {
16
16
  "kind": "catalog",
17
17
  "schemaVersion": "ExecutableGraphCatalogPublicProjection/1.0",
18
18
  "relativePath": "catalog.json",
19
- "sha256": "e6a9ec0c1ecc84572c44fe752efbc46b330dc3569c0b5cb317b62c36737d0875",
19
+ "sha256": "47bfe074c0e3094296bae58393c801a745b102d548099596ccb3d8e419a3e738",
20
20
  "entryCount": 97,
21
- "generationId": "sha256:80e56629e3fbf9cb6be8dd1ea937f231eb187c5a02442217e647910183d52929"
21
+ "generationId": "sha256:12838b51552e283fadffcea062246c8a0ca3b89353ccc01ce42b91361de6e0e9"
22
22
  },
23
23
  {
24
24
  "kind": "commands",
25
25
  "schemaVersion": "CommandRegistryPublicProjection/1.0",
26
26
  "relativePath": "commands.json",
27
- "sha256": "c7041309517f9c76f4a7b325660a630325d036ad3d6d8a20d90d27889cff3018",
27
+ "sha256": "907c009c7b10ad01eadb7a7f603af8759f348fe444af98a24c4558117bd09146",
28
28
  "entryCount": 62,
29
- "generationId": "sha256:80e56629e3fbf9cb6be8dd1ea937f231eb187c5a02442217e647910183d52929"
29
+ "generationId": "sha256:12838b51552e283fadffcea062246c8a0ca3b89353ccc01ce42b91361de6e0e9"
30
30
  },
31
31
  {
32
32
  "kind": "progress-view",
33
33
  "schemaVersion": "ProgressViewContractProjection/1.0",
34
34
  "relativePath": "progress-view.json",
35
- "sha256": "ebe398e5f1cdb408e9a4cde551ed1448df0a673fc0bba456b04d72ff96d4bbdb",
35
+ "sha256": "96f6ca2d3948891efe31fceb031001428190d31cbbbf1bf53446fcaf3be31fbb",
36
36
  "entryCount": 1,
37
- "generationId": "sha256:80e56629e3fbf9cb6be8dd1ea937f231eb187c5a02442217e647910183d52929"
37
+ "generationId": "sha256:12838b51552e283fadffcea062246c8a0ca3b89353ccc01ce42b91361de6e0e9"
38
38
  },
39
39
  {
40
40
  "kind": "stages",
41
41
  "schemaVersion": "ExecutableGraphStageProjection/1.0",
42
42
  "relativePath": "stages.json",
43
- "sha256": "7688c18fb51c1ae074620c550a22277cd990ac11ed702ebc1d863df319030909",
43
+ "sha256": "5444c07f918f6b6760d8ba1161a66a7635841dac0da3a52ddb95c600e33e9700",
44
44
  "entryCount": 85,
45
- "generationId": "sha256:80e56629e3fbf9cb6be8dd1ea937f231eb187c5a02442217e647910183d52929"
45
+ "generationId": "sha256:12838b51552e283fadffcea062246c8a0ca3b89353ccc01ce42b91361de6e0e9"
46
46
  },
47
47
  {
48
48
  "kind": "surfaces",
49
49
  "schemaVersion": "PublicProjectionSurfaces/1.0",
50
50
  "relativePath": "surfaces.json",
51
- "sha256": "796bd7507fd99b99cc899cc7b693c27bf698e4dc98473ceca3bf8cd13ee322cf",
51
+ "sha256": "38b6f572e04f77d0fd8f22bdd43ffd67d7c763e28301160342cd228321f631e6",
52
52
  "entryCount": 6,
53
- "generationId": "sha256:80e56629e3fbf9cb6be8dd1ea937f231eb187c5a02442217e647910183d52929"
53
+ "generationId": "sha256:12838b51552e283fadffcea062246c8a0ca3b89353ccc01ce42b91361de6e0e9"
54
54
  }
55
55
  ],
56
56
  "compatibility": {
@@ -143,7 +143,7 @@ export const PUBLIC_PROJECTION_BUNDLE = {
143
143
  }
144
144
  ],
145
145
  "publicSafe": true,
146
- "bundleHash": "5371013ed9041484849f722a19f96b106874efc0112db9c459311ae497229f56"
146
+ "bundleHash": "9a6fd0a7a924a3a1f0406dc607e1c2a1c8a05f5efd55af24de6cb0f3bac25ab5"
147
147
  };
148
148
  export const PUBLIC_PROJECTION_GENERATION_ID = PUBLIC_PROJECTION_BUNDLE.generationId;
149
149
  export const PUBLIC_PROJECTION_BUNDLE_HASH = PUBLIC_PROJECTION_BUNDLE.bundleHash;
@@ -122,7 +122,7 @@ export interface InvocationCommandSchemaV1 {
122
122
  readonly positionals: readonly InvocationPositionalSchemaV1[];
123
123
  readonly terminator: true;
124
124
  }
125
- export declare const INVOCATION_SCHEMA_CHECKSUM: "5c1a3ec92913a1e9c84b61de15ccfa72d223556db9d3d9e40504f28e86a09a0e";
125
+ export declare const INVOCATION_SCHEMA_CHECKSUM: "96a90d1d7dc2694bb7614e1913c5895cdace83c7436d2033a4d116c0cf99bf40";
126
126
  export interface InvocationSchemaManifestV1 {
127
127
  readonly schemaVersion: typeof INVOCATION_SCHEMA_VERSION;
128
128
  readonly registryVersion: string;
@@ -564,6 +564,19 @@ export function admitInvocation(input, options = {}) {
564
564
  return reject('unknown_command', 'identity_unknown', 0, bytes);
565
565
  return resolved(menu, undefined, { options: {}, positionals: [] }, undefined, 0, bytes);
566
566
  }
567
+ // The published epic selector predates star-prefixed command spelling.
568
+ // Preserve only its exact P-ID form; do not make arbitrary @-references or
569
+ // a second token into implicit command identities.
570
+ if (lexed.tokens.length === 1 && /^@epic-P[0-9]{1,12}$/.test(input.trim())) {
571
+ const epic = byId.get('epic');
572
+ const schema = epic && schemaByCommand.get(epic.id);
573
+ if (!epic || !schema)
574
+ return reject('malformed_input', 'schema_mismatch', 1, bytes);
575
+ const parsed = admitArguments(schema, lexed.tokens);
576
+ if (typeof parsed === 'string')
577
+ return reject('invalid_arguments', parsed, 1, bytes);
578
+ return resolved(epic, undefined, parsed, undefined, 1, bytes);
579
+ }
567
580
  const command = resolveIdentity(lexed.tokens[0]);
568
581
  if (!command) {
569
582
  const candidates = suggestionsFor(lexed.tokens[0].value);
@@ -0,0 +1,111 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { projectC12ScopedCiFollowUpDebt } from './c12-remote-observation.js';
3
+ const MAX_REGISTRY_BYTES = 2 * 1024 * 1024;
4
+ function record(value) {
5
+ return value !== null && typeof value === 'object' && !Array.isArray(value)
6
+ ? value : null;
7
+ }
8
+ function sha256(value) {
9
+ return createHash('sha256').update(value).digest('hex');
10
+ }
11
+ function slug(value) {
12
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'unknown';
13
+ }
14
+ /** Strict, idempotent projection for the nine closed C12 remote categories.
15
+ * It never writes the tracked registry or grants merge authority. Existing
16
+ * top-level fields and foreign items remain unchanged; ambiguous identities
17
+ * refuse instead of silently normalizing or dropping project-owned data. */
18
+ export function projectC12ScopedCiRegistryUpdate(input) {
19
+ const { registryRaw, storyId, prNumber, nowIso } = input;
20
+ if (Buffer.byteLength(registryRaw, 'utf8') > MAX_REGISTRY_BYTES
21
+ || !Number.isFinite(Date.parse(nowIso))
22
+ || new Date(nowIso).toISOString() !== nowIso)
23
+ return null;
24
+ const followUps = projectC12ScopedCiFollowUpDebt(input.observation, storyId, prNumber);
25
+ if (!followUps || followUps.length === 0)
26
+ return null;
27
+ let parsed;
28
+ try {
29
+ parsed = JSON.parse(registryRaw);
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ const registry = record(parsed);
35
+ if (!registry || registry.schema_version !== 2 || !Array.isArray(registry.items)
36
+ || registry.items.length > 5000)
37
+ return null;
38
+ const byId = new Map();
39
+ const byDedup = new Map();
40
+ for (const raw of registry.items) {
41
+ const item = record(raw);
42
+ const metadata = item?.metadata === undefined ? null : record(item.metadata);
43
+ const key = metadata?.dedup_key;
44
+ if (!item || typeof item.id !== 'string' || item.id.length < 1 || item.id.length > 256
45
+ || byId.has(item.id) || item.metadata !== undefined && !metadata
46
+ || key !== undefined && (typeof key !== 'string' || key.length < 1 || key.length > 1000
47
+ || byDedup.has(key)))
48
+ return null;
49
+ byId.set(item.id, item);
50
+ if (typeof key === 'string')
51
+ byDedup.set(key, item);
52
+ }
53
+ const addedItems = [];
54
+ let existing = 0;
55
+ const itemIds = [];
56
+ for (const debt of followUps) {
57
+ const reasonCode = debt.checkName;
58
+ const checkSlug = slug(reasonCode);
59
+ const dedupKey = [
60
+ 'scoped-ci-remote-downgrade', reasonCode, 'remote_ci_cd', 'merge/policy',
61
+ storyId, `pr-${prNumber}`, checkSlug,
62
+ ].join('::');
63
+ const id = `scoped-ci-${slug(reasonCode)}-remote-ci-cd-merge-policy-${slug(storyId)}-pr-${prNumber}-${checkSlug}`;
64
+ const reasonForLegacyId = reasonCode === 'remote_status_check_rollup_absent_observed'
65
+ ? reasonCode : debt.reason;
66
+ const legacyId = `scoped-ci-merge-policy-${slug(reasonForLegacyId)}-${checkSlug}`;
67
+ const item = {
68
+ id, severity: 2, area: 'merge/policy',
69
+ description: `Scoped CI remote downgrade recorded for merge/policy. checks=${reasonCode} stories=${storyId} prs=#${prNumber} category=merge/policy reason=${reasonCode} origin=remote_ci_cd repair=${debt.recommendedAction} safeToContinueYoloop=true`,
70
+ roi: 6, status: 'open', source: 'scoped-ci-merge-policy-P136.05',
71
+ created_at: nowIso, last_seen_at: nowIso, schema_version: 2,
72
+ depends_on: [], blast_radius: 2, occurrences: 1,
73
+ metadata: {
74
+ check_names: [reasonCode], domain: 'merge/policy', category: 'merge/policy',
75
+ story_ids: [storyId], pr_numbers: [`#${prNumber}`],
76
+ classification_reason: debt.reason, public_reason_code: reasonCode,
77
+ downgrade_reason_code: reasonCode, origin: ['remote_ci_cd'],
78
+ resolvability: 'external', safe_to_continue_yoloop: true,
79
+ recommended_repair_area: 'merge/policy', dedup_key: dedupKey,
80
+ create_epic_hint: `*create-epic repair recurring merge/policy CI debt referenced by ${legacyId}`,
81
+ },
82
+ };
83
+ const foundById = byId.get(id);
84
+ const foundByDedup = byDedup.get(dedupKey);
85
+ if (foundById || foundByDedup) {
86
+ if (!foundById || foundById !== foundByDedup
87
+ || Object.keys(foundById).some((key) => !Object.hasOwn(item, key))
88
+ || Object.entries(item).some(([key, expected]) => key !== 'created_at' && key !== 'last_seen_at' && key !== 'occurrences'
89
+ && JSON.stringify(foundById[key]) !== JSON.stringify(expected))
90
+ || typeof foundById.created_at !== 'string'
91
+ || typeof foundById.last_seen_at !== 'string'
92
+ || !Number.isSafeInteger(foundById.occurrences)
93
+ || foundById.occurrences < 1)
94
+ return null;
95
+ existing++;
96
+ itemIds.push(id);
97
+ continue;
98
+ }
99
+ addedItems.push(item);
100
+ byId.set(id, item);
101
+ byDedup.set(dedupKey, item);
102
+ itemIds.push(id);
103
+ }
104
+ const afterRaw = addedItems.length === 0 ? registryRaw
105
+ : `${JSON.stringify({ ...registry, items: [...registry.items, ...addedItems] }, null, 2)}\n`;
106
+ if (Buffer.byteLength(afterRaw, 'utf8') > MAX_REGISTRY_BYTES)
107
+ return null;
108
+ return Object.freeze({ registryBeforeSha256: sha256(registryRaw),
109
+ registryAfterSha256: sha256(afterRaw), registryAfterRaw: afterRaw,
110
+ added: addedItems.length, existing, itemIds: Object.freeze(itemIds) });
111
+ }
@@ -1,4 +1,10 @@
1
1
  import { createHash } from 'node:crypto';
2
+ const C12_REMOTE_REASON_CODES = Object.freeze([
3
+ 'remote_status_check_rollup_absent_observed', 'remote_status_check_rollup_empty_observed',
4
+ 'remote_ci_failed_observed', 'remote_ci_missing_observed', 'remote_ci_queued_observed',
5
+ 'remote_ci_in_progress_observed', 'remote_ci_cancelled_observed',
6
+ 'remote_ci_stale_observed', 'remote_ci_timeout_observed',
7
+ ]);
2
8
  function record(value) {
3
9
  return value && typeof value === 'object' && !Array.isArray(value)
4
10
  ? value : null;
@@ -78,3 +84,57 @@ export function summarizeC12RemoteRollup(value) {
78
84
  reasonCodes: Object.freeze(reasonCodes), reasonCounts: Object.freeze(reasonCounts),
79
85
  digest, publicSafe: true }) };
80
86
  }
87
+ /** Convert a previously bound categorical observation into canonical scoped-CI
88
+ * debt input. This is a pure projection, not a registry write or merge grant.
89
+ * Provider check identities, URLs and raw descriptions never enter the result. */
90
+ export function projectC12ScopedCiFollowUpDebt(observation, storyId, prNumber) {
91
+ const value = record(observation);
92
+ if (!/^P[1-9][0-9]{0,11}(?:\.[0-9]{1,6}){1,2}$/.test(storyId)
93
+ || !Number.isSafeInteger(prNumber) || prNumber <= 0 || prNumber > 1_000_000_000
94
+ || !value || Object.keys(value).sort().join(',') !== [
95
+ 'checkCount', 'digest', 'kind', 'publicSafe', 'reasonCodes', 'reasonCounts',
96
+ 'schemaVersion', 'source',
97
+ ].sort().join(',')
98
+ || value.schemaVersion !== 1 || value.kind !== 'legacy-c12-remote-observation'
99
+ || value.source !== 'github-pr-status-rollup' || value.publicSafe !== true
100
+ || !Number.isInteger(value.checkCount) || value.checkCount < 0
101
+ || value.checkCount > 100
102
+ || typeof value.digest !== 'string' || !/^[a-f0-9]{64}$/.test(value.digest)
103
+ || !Array.isArray(value.reasonCodes) || !Array.isArray(value.reasonCounts)
104
+ || value.reasonCodes.length !== value.reasonCounts.length
105
+ || value.reasonCodes.length > C12_REMOTE_REASON_CODES.length)
106
+ return null;
107
+ const codes = value.reasonCodes;
108
+ if (codes.some((code) => typeof code !== 'string'
109
+ || !C12_REMOTE_REASON_CODES.includes(code))
110
+ || JSON.stringify(codes) !== JSON.stringify([...codes].sort())
111
+ || new Set(codes).size !== codes.length)
112
+ return null;
113
+ const counts = value.reasonCounts;
114
+ for (let index = 0; index < counts.length; index++) {
115
+ const count = record(counts[index]);
116
+ if (!count || Object.keys(count).sort().join(',') !== 'count,reasonCode'
117
+ || count.reasonCode !== codes[index]
118
+ || !Number.isInteger(count.count) || count.count < 1
119
+ || count.count > 100)
120
+ return null;
121
+ }
122
+ const hasAbsentOrEmpty = codes.some((code) => code === 'remote_status_check_rollup_absent_observed'
123
+ || code === 'remote_status_check_rollup_empty_observed');
124
+ const reasonTotal = counts.reduce((sum, raw) => sum + record(raw)?.count, 0);
125
+ if (value.checkCount === 0
126
+ ? !hasAbsentOrEmpty || codes.length !== 1 || reasonTotal !== 1
127
+ : hasAbsentOrEmpty || reasonTotal > value.checkCount)
128
+ return null;
129
+ return Object.freeze(codes.map((code) => {
130
+ const reasonCode = code;
131
+ const reason = /absent|empty|missing|queued/.test(reasonCode)
132
+ ? 'queued-or-no-check-policy'
133
+ : /stale|timeout/.test(reasonCode) ? 'flaky-or-infra-failure' : 'remote_ci_cd_observed';
134
+ return Object.freeze({ checkName: reasonCode, domain: 'merge/policy', reason,
135
+ storyId, prNumber, origin: 'remote_ci_cd', resolvability: 'external',
136
+ safeToContinueYoloop: true,
137
+ recommendedAction: `Reobserve ${reasonCode} and record its scoped-CI follow-up in the reviewed PR candidate.`,
138
+ });
139
+ }));
140
+ }
@@ -1,4 +1,4 @@
1
- # 🧠 Neocortex v4.60.60 | OrNexus Team
1
+ # 🧠 Neocortex v4.60.62 | OrNexus Team
2
2
 
3
3
  This project uses Neocortex, a Development Orchestrator.
4
4
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex
3
- description: "🧠 Neocortex v4.60.60 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.62 | OrNexus Team"
4
4
  ---
5
5
 
6
6
  <!--
@@ -4,7 +4,7 @@ agent:
4
4
  name: 'Neocortex Root Agent'
5
5
  title: 'Development Orchestrator (Root)'
6
6
  icon: '>'
7
- version: '4.60.60'
7
+ version: '4.60.62'
8
8
  architecture: 'thin-client'
9
9
  module: stand-alone
10
10
  hasSidecar: false
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex-root
3
- description: "🧠 Neocortex Root Agent v4.60.60 | OrNexus Team"
3
+ description: "🧠 Neocortex Root Agent v4.60.62 | OrNexus Team"
4
4
  model: opus
5
5
  color: blue
6
6
  tools:
@@ -108,7 +108,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
108
108
  ┌────────────────────────────────────────────────────────────┐
109
109
  │ │
110
110
  │ ####### N E O C O R T E X │
111
- │ ### ######## v4.60.60 │
111
+ │ ### ######## v4.60.62 │
112
112
  │ ######### ##### │
113
113
  │ ## ############## Development Orchestrator │
114
114
  │ ## ### ###### ## OrNexus Team │
@@ -4,7 +4,7 @@ agent:
4
4
  name: 'Neocortex'
5
5
  title: 'Development Orchestrator'
6
6
  icon: '>'
7
- version: '4.60.60'
7
+ version: '4.60.62'
8
8
  architecture: 'thin-client'
9
9
  module: stand-alone
10
10
  hasSidecar: false
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex
3
- description: "🧠 Neocortex v4.60.60 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.62 | OrNexus Team"
4
4
  model: opus
5
5
  color: blue
6
6
  permissionMode: bypassPermissions
@@ -104,7 +104,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
104
104
  ┌────────────────────────────────────────────────────────────┐
105
105
  │ │
106
106
  │ ####### N E O C O R T E X │
107
- │ ### ######## v4.60.60 │
107
+ │ ### ######## v4.60.62 │
108
108
  │ ######### ##### │
109
109
  │ ## ############## Development Orchestrator │
110
110
  │ ## ### ###### ## OrNexus Team │
@@ -28,7 +28,7 @@ Codex built-in commands or actions.
28
28
 
29
29
  <!-- END: Plugin Conflict Prevention -->
30
30
 
31
- # Neocortex v4.60.60 | OrNexus Team
31
+ # Neocortex v4.60.62 | OrNexus Team
32
32
 
33
33
  You are a Development Orchestrator. All orchestration logic is delivered by the remote Neocortex server.
34
34
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex
3
- description: "🧠 Neocortex v4.60.60 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.62 | OrNexus Team"
4
4
  model: inherit
5
5
  readonly: false
6
6
  is_background: false
@@ -64,7 +64,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
64
64
  ┌────────────────────────────────────────────────────────────┐
65
65
  │ │
66
66
  │ ####### N E O C O R T E X │
67
- │ ### ######## v4.60.60 │
67
+ │ ### ######## v4.60.62 │
68
68
  │ ######### ##### │
69
69
  │ ## ############## Development Orchestrator │
70
70
  │ ## ### ###### ## OrNexus Team │
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: neocortex-root
3
- description: "🧠 Neocortex v4.60.60 | OrNexus Team"
3
+ description: "🧠 Neocortex v4.60.62 | OrNexus Team"
4
4
  kind: local
5
5
  tools:
6
6
  # File operations (Gemini CLI built-ins)
@@ -62,7 +62,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
62
62
  ┌────────────────────────────────────────────────────────────┐
63
63
  │ │
64
64
  │ ####### N E O C O R T E X │
65
- │ ### ######## v4.60.60 │
65
+ │ ### ######## v4.60.62 │
66
66
  │ ######### ##### │
67
67
  │ ## ############## Development Orchestrator │
68
68
  │ ## ### ###### ## OrNexus Team │
@@ -58,7 +58,7 @@ explicit server opt-in rather than a local assumption.
58
58
  ┌────────────────────────────────────────────────────────────┐
59
59
  │ │
60
60
  │ ####### N E O C O R T E X │
61
- │ ### ######## v4.60.60 │
61
+ │ ### ######## v4.60.62 │
62
62
  │ ######### ##### │
63
63
  │ ## ############## Development Orchestrator │
64
64
  │ ## ### ###### ## OrNexus Team │
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "neocortex"
3
- description: "Neocortex v4.60.60 | OrNexus Team"
3
+ description: "Neocortex v4.60.62 | OrNexus Team"
4
4
  tools:
5
5
  # Read / Edit (built-in tool sets)
6
6
  - read
@@ -68,7 +68,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
68
68
  ┌────────────────────────────────────────────────────────────┐
69
69
  │ │
70
70
  │ ####### N E O C O R T E X │
71
- │ ### ######## v4.60.60 │
71
+ │ ### ######## v4.60.62 │
72
72
  │ ######### ##### │
73
73
  │ ## ############## Development Orchestrator │
74
74
  │ ## ### ###### ## OrNexus Team │