@neurcode-ai/cli 0.9.65 → 0.10.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.
- package/dist/commands/bootstrap-policy.d.ts +29 -0
- package/dist/commands/bootstrap-policy.d.ts.map +1 -0
- package/dist/commands/bootstrap-policy.js +334 -0
- package/dist/commands/bootstrap-policy.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +82 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/governance.d.ts +3 -0
- package/dist/commands/governance.d.ts.map +1 -0
- package/dist/commands/governance.js +390 -0
- package/dist/commands/governance.js.map +1 -0
- package/dist/commands/quickstart.d.ts +21 -0
- package/dist/commands/quickstart.d.ts.map +1 -0
- package/dist/commands/quickstart.js +178 -0
- package/dist/commands/quickstart.js.map +1 -0
- package/dist/commands/remediate-export.d.ts +36 -0
- package/dist/commands/remediate-export.d.ts.map +1 -0
- package/dist/commands/remediate-export.js +1072 -0
- package/dist/commands/remediate-export.js.map +1 -0
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +14 -0
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/session.d.ts +7 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +156 -0
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/start-intent.d.ts.map +1 -1
- package/dist/commands/start-intent.js +61 -11
- package/dist/commands/start-intent.js.map +1 -1
- package/dist/commands/verify-guidance.d.ts +5 -0
- package/dist/commands/verify-guidance.d.ts.map +1 -0
- package/dist/commands/verify-guidance.js +49 -0
- package/dist/commands/verify-guidance.js.map +1 -0
- package/dist/commands/verify-output.d.ts +37 -0
- package/dist/commands/verify-output.d.ts.map +1 -0
- package/dist/commands/verify-output.js +572 -0
- package/dist/commands/verify-output.js.map +1 -0
- package/dist/commands/verify-render.d.ts +41 -0
- package/dist/commands/verify-render.d.ts.map +1 -0
- package/dist/commands/verify-render.js +457 -0
- package/dist/commands/verify-render.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +384 -1091
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +3 -14
- package/dist/commands/workspace.js.map +1 -1
- package/dist/context-engine/graph.d.ts.map +1 -1
- package/dist/context-engine/graph.js +69 -7
- package/dist/context-engine/graph.js.map +1 -1
- package/dist/context-engine/scanner.d.ts.map +1 -1
- package/dist/context-engine/scanner.js +9 -2
- package/dist/context-engine/scanner.js.map +1 -1
- package/dist/daemon/compatibility/execution.d.ts +42 -0
- package/dist/daemon/compatibility/execution.d.ts.map +1 -0
- package/dist/daemon/compatibility/execution.js +183 -0
- package/dist/daemon/compatibility/execution.js.map +1 -0
- package/dist/daemon/compatibility/mutation.d.ts +24 -0
- package/dist/daemon/compatibility/mutation.d.ts.map +1 -0
- package/dist/daemon/compatibility/mutation.js +724 -0
- package/dist/daemon/compatibility/mutation.js.map +1 -0
- package/dist/daemon/routes.d.ts +19 -0
- package/dist/daemon/routes.d.ts.map +1 -0
- package/dist/daemon/routes.js +123 -0
- package/dist/daemon/routes.js.map +1 -0
- package/dist/daemon/runtime/execution-bus.d.ts +217 -0
- package/dist/daemon/runtime/execution-bus.d.ts.map +1 -0
- package/dist/daemon/runtime/execution-bus.js +1420 -0
- package/dist/daemon/runtime/execution-bus.js.map +1 -0
- package/dist/daemon/runtime/workspace-runtime.d.ts +280 -0
- package/dist/daemon/runtime/workspace-runtime.d.ts.map +1 -0
- package/dist/daemon/runtime/workspace-runtime.js +1473 -0
- package/dist/daemon/runtime/workspace-runtime.js.map +1 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +171 -874
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/shaping.d.ts +11 -0
- package/dist/daemon/shaping.d.ts.map +1 -0
- package/dist/daemon/shaping.js +240 -0
- package/dist/daemon/shaping.js.map +1 -0
- package/dist/governance/canonical-invariants.d.ts +88 -0
- package/dist/governance/canonical-invariants.d.ts.map +1 -0
- package/dist/governance/canonical-invariants.js +197 -0
- package/dist/governance/canonical-invariants.js.map +1 -0
- package/dist/governance/canonical-ordering.d.ts +76 -0
- package/dist/governance/canonical-ordering.d.ts.map +1 -0
- package/dist/governance/canonical-ordering.js +189 -0
- package/dist/governance/canonical-ordering.js.map +1 -0
- package/dist/governance/canonical-pipeline.d.ts +9 -1
- package/dist/governance/canonical-pipeline.d.ts.map +1 -1
- package/dist/governance/canonical-pipeline.js +367 -24
- package/dist/governance/canonical-pipeline.js.map +1 -1
- package/dist/governance/diff-line-provenance.d.ts +59 -0
- package/dist/governance/diff-line-provenance.d.ts.map +1 -0
- package/dist/governance/diff-line-provenance.js +118 -0
- package/dist/governance/diff-line-provenance.js.map +1 -0
- package/dist/governance/pilot-readiness.d.ts +34 -0
- package/dist/governance/pilot-readiness.d.ts.map +1 -0
- package/dist/governance/pilot-readiness.js +226 -0
- package/dist/governance/pilot-readiness.js.map +1 -0
- package/dist/governance/policy-parity-validator.d.ts +62 -0
- package/dist/governance/policy-parity-validator.d.ts.map +1 -0
- package/dist/governance/policy-parity-validator.js +137 -0
- package/dist/governance/policy-parity-validator.js.map +1 -0
- package/dist/governance/remediation-boundary.d.ts +55 -0
- package/dist/governance/remediation-boundary.d.ts.map +1 -0
- package/dist/governance/remediation-boundary.js +120 -0
- package/dist/governance/remediation-boundary.js.map +1 -0
- package/dist/governance/structural-cache.d.ts +103 -0
- package/dist/governance/structural-cache.d.ts.map +1 -0
- package/dist/governance/structural-cache.js +235 -0
- package/dist/governance/structural-cache.js.map +1 -0
- package/dist/governance/structural-on-diff.d.ts +22 -2
- package/dist/governance/structural-on-diff.d.ts.map +1 -1
- package/dist/governance/structural-on-diff.js +36 -4
- package/dist/governance/structural-on-diff.js.map +1 -1
- package/dist/governance/structural-policy-merge.d.ts +8 -0
- package/dist/governance/structural-policy-merge.d.ts.map +1 -1
- package/dist/governance/structural-policy-merge.js +7 -0
- package/dist/governance/structural-policy-merge.js.map +1 -1
- package/dist/governance/verify-runtime-guard.d.ts +99 -0
- package/dist/governance/verify-runtime-guard.d.ts.map +1 -0
- package/dist/governance/verify-runtime-guard.js +129 -0
- package/dist/governance/verify-runtime-guard.js.map +1 -0
- package/dist/index.js +277 -77
- package/dist/index.js.map +1 -1
- package/dist/intent-engine/repo-classifier.d.ts +64 -0
- package/dist/intent-engine/repo-classifier.d.ts.map +1 -0
- package/dist/intent-engine/repo-classifier.js +178 -0
- package/dist/intent-engine/repo-classifier.js.map +1 -0
- package/dist/structural-rules/index.d.ts +4 -0
- package/dist/structural-rules/index.d.ts.map +1 -1
- package/dist/structural-rules/index.js +18 -1
- package/dist/structural-rules/index.js.map +1 -1
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +21 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -1
- package/dist/structural-rules/python/PY003-broad-except-clause.js +212 -21
- package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -1
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts +11 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts.map +1 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js +97 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts +11 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js +83 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts +11 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js +73 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts +11 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js +115 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js.map +1 -0
- package/dist/structural-rules/types.d.ts +12 -0
- package/dist/structural-rules/types.d.ts.map +1 -1
- package/dist/utils/active-engineering-context.d.ts +12 -0
- package/dist/utils/active-engineering-context.d.ts.map +1 -0
- package/dist/utils/active-engineering-context.js +67 -0
- package/dist/utils/active-engineering-context.js.map +1 -0
- package/dist/utils/artifact-io.d.ts +33 -0
- package/dist/utils/artifact-io.d.ts.map +1 -0
- package/dist/utils/artifact-io.js +183 -0
- package/dist/utils/artifact-io.js.map +1 -0
- package/dist/utils/change-contract.d.ts +6 -2
- package/dist/utils/change-contract.d.ts.map +1 -1
- package/dist/utils/change-contract.js +175 -0
- package/dist/utils/change-contract.js.map +1 -1
- package/dist/utils/context-pack.d.ts +12 -0
- package/dist/utils/context-pack.d.ts.map +1 -0
- package/dist/utils/context-pack.js +147 -0
- package/dist/utils/context-pack.js.map +1 -0
- package/dist/utils/control-plane.d.ts +18 -0
- package/dist/utils/control-plane.d.ts.map +1 -1
- package/dist/utils/control-plane.js +31 -4
- package/dist/utils/control-plane.js.map +1 -1
- package/dist/utils/drift-intelligence.d.ts +47 -0
- package/dist/utils/drift-intelligence.d.ts.map +1 -0
- package/dist/utils/drift-intelligence.js +2099 -0
- package/dist/utils/drift-intelligence.js.map +1 -0
- package/dist/utils/execution-actions.d.ts +22 -0
- package/dist/utils/execution-actions.d.ts.map +1 -0
- package/dist/utils/execution-actions.js +103 -0
- package/dist/utils/execution-actions.js.map +1 -0
- package/dist/utils/execution-bus.d.ts +1 -214
- package/dist/utils/execution-bus.d.ts.map +1 -1
- package/dist/utils/execution-bus.js +15 -1359
- package/dist/utils/execution-bus.js.map +1 -1
- package/dist/utils/git.d.ts +1 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +13 -3
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/governance-decisions.d.ts +75 -0
- package/dist/utils/governance-decisions.d.ts.map +1 -0
- package/dist/utils/governance-decisions.js +412 -0
- package/dist/utils/governance-decisions.js.map +1 -0
- package/dist/utils/governance-provenance.d.ts +1 -1
- package/dist/utils/governance-provenance.d.ts.map +1 -1
- package/dist/utils/governance-provenance.js +5 -7
- package/dist/utils/governance-provenance.js.map +1 -1
- package/dist/utils/governance.d.ts +108 -0
- package/dist/utils/governance.d.ts.map +1 -1
- package/dist/utils/governance.js +209 -7
- package/dist/utils/governance.js.map +1 -1
- package/dist/utils/intelligence-runtime-common.d.ts +30 -0
- package/dist/utils/intelligence-runtime-common.d.ts.map +1 -0
- package/dist/utils/intelligence-runtime-common.js +156 -0
- package/dist/utils/intelligence-runtime-common.js.map +1 -0
- package/dist/utils/intent-contract-diagnostics.d.ts +9 -0
- package/dist/utils/intent-contract-diagnostics.d.ts.map +1 -0
- package/dist/utils/intent-contract-diagnostics.js +322 -0
- package/dist/utils/intent-contract-diagnostics.js.map +1 -0
- package/dist/utils/intent-pack.d.ts +15 -0
- package/dist/utils/intent-pack.d.ts.map +1 -0
- package/dist/utils/intent-pack.js +196 -0
- package/dist/utils/intent-pack.js.map +1 -0
- package/dist/utils/plan-sync.d.ts +1 -0
- package/dist/utils/plan-sync.d.ts.map +1 -1
- package/dist/utils/plan-sync.js +23 -0
- package/dist/utils/plan-sync.js.map +1 -1
- package/dist/utils/policy-decision.d.ts +5 -0
- package/dist/utils/policy-decision.d.ts.map +1 -0
- package/dist/utils/policy-decision.js +17 -0
- package/dist/utils/policy-decision.js.map +1 -0
- package/dist/utils/replay-custody.d.ts +43 -0
- package/dist/utils/replay-custody.d.ts.map +1 -0
- package/dist/utils/replay-custody.js +168 -0
- package/dist/utils/replay-custody.js.map +1 -0
- package/dist/utils/replay-runtime.d.ts +13 -0
- package/dist/utils/replay-runtime.d.ts.map +1 -1
- package/dist/utils/replay-runtime.js +96 -9
- package/dist/utils/replay-runtime.js.map +1 -1
- package/dist/utils/repository-intelligence.d.ts +9 -0
- package/dist/utils/repository-intelligence.d.ts.map +1 -0
- package/dist/utils/repository-intelligence.js +372 -0
- package/dist/utils/repository-intelligence.js.map +1 -0
- package/dist/utils/runtime-events.d.ts.map +1 -1
- package/dist/utils/runtime-events.js +25 -6
- package/dist/utils/runtime-events.js.map +1 -1
- package/dist/utils/semantic-contract-intelligence.d.ts +20 -0
- package/dist/utils/semantic-contract-intelligence.d.ts.map +1 -0
- package/dist/utils/semantic-contract-intelligence.js +825 -0
- package/dist/utils/semantic-contract-intelligence.js.map +1 -0
- package/dist/utils/session-continuity.d.ts +56 -0
- package/dist/utils/session-continuity.d.ts.map +1 -0
- package/dist/utils/session-continuity.js +318 -0
- package/dist/utils/session-continuity.js.map +1 -0
- package/dist/utils/verification-evidence.d.ts.map +1 -1
- package/dist/utils/verification-evidence.js +4 -1
- package/dist/utils/verification-evidence.js.map +1 -1
- package/dist/utils/verify-runtime-stability.d.ts +142 -0
- package/dist/utils/verify-runtime-stability.d.ts.map +1 -0
- package/dist/utils/verify-runtime-stability.js +230 -0
- package/dist/utils/verify-runtime-stability.js.map +1 -0
- package/dist/utils/workspace-runtime.d.ts +1 -266
- package/dist/utils/workspace-runtime.d.ts.map +1 -1
- package/dist/utils/workspace-runtime.js +15 -1412
- package/dist/utils/workspace-runtime.js.map +1 -1
- package/package.json +11 -10
- package/LICENSE +0 -201
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical Deterministic Ordering (Phase 1 — Canonical Deterministic Ordering)
|
|
4
|
+
*
|
|
5
|
+
* Single source of truth for finding sort order across:
|
|
6
|
+
* - replayChecksum generation
|
|
7
|
+
* - provenance serialization
|
|
8
|
+
* - governance envelope emission
|
|
9
|
+
* - telemetry harvesting
|
|
10
|
+
*
|
|
11
|
+
* INVARIANT:
|
|
12
|
+
* Any two invocations on the same logical finding set MUST produce
|
|
13
|
+
* the same ordered array, regardless of:
|
|
14
|
+
* - filesystem traversal order
|
|
15
|
+
* - async execution timing
|
|
16
|
+
* - insertion order
|
|
17
|
+
* - Map iteration order
|
|
18
|
+
* - Object.keys() order
|
|
19
|
+
*
|
|
20
|
+
* Canonical sort key (evaluated in priority order):
|
|
21
|
+
* 1. severity (BLOCKING > ADVISORY > INFO > unknown)
|
|
22
|
+
* 2. determinismClassification (deterministic-structural > deterministic-semantic
|
|
23
|
+
* > heuristic-advisory > llm-assisted-planning > unknown)
|
|
24
|
+
* 3. ruleId (ascending lexicographic)
|
|
25
|
+
* 4. filePath (ascending lexicographic, normalized to forward slashes)
|
|
26
|
+
* 5. line (ascending numeric, missing = 0)
|
|
27
|
+
* 6. column (ascending numeric, missing = 0)
|
|
28
|
+
* 7. findingId (ascending lexicographic — stable tiebreaker, always unique)
|
|
29
|
+
*
|
|
30
|
+
* These rules ensure a total order: no two distinct findings can be equal on
|
|
31
|
+
* all 7 keys simultaneously (findingId is always unique by construction).
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.canonicalFindingOrderingKey = canonicalFindingOrderingKey;
|
|
35
|
+
exports.sortCanonicalFindingsStable = sortCanonicalFindingsStable;
|
|
36
|
+
exports.validateCanonicalOrder = validateCanonicalOrder;
|
|
37
|
+
// ── Rank tables ───────────────────────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Severity rank — higher number = sorted first (BLOCKING first).
|
|
40
|
+
* Deterministic: closed set, no dynamic lookup.
|
|
41
|
+
*/
|
|
42
|
+
function rankSeverity(s) {
|
|
43
|
+
switch (s) {
|
|
44
|
+
case 'BLOCKING': return 3;
|
|
45
|
+
case 'ADVISORY': return 2;
|
|
46
|
+
case 'INFO': return 1;
|
|
47
|
+
default: return 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Determinism classification rank — higher = sorted first (structural first).
|
|
52
|
+
* Deterministic: closed set, no dynamic lookup.
|
|
53
|
+
*/
|
|
54
|
+
function rankDeterminism(d) {
|
|
55
|
+
switch (d) {
|
|
56
|
+
case 'deterministic-structural': return 4;
|
|
57
|
+
case 'deterministic-semantic': return 3;
|
|
58
|
+
case 'heuristic-advisory': return 2;
|
|
59
|
+
case 'llm-assisted-planning': return 1;
|
|
60
|
+
default: return 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Normalize a file path to use forward slashes for cross-platform stability. */
|
|
64
|
+
function normalizePath(p) {
|
|
65
|
+
return p.replace(/\\/g, '/');
|
|
66
|
+
}
|
|
67
|
+
// ── Public API ────────────────────────────────────────────────────────────────
|
|
68
|
+
/**
|
|
69
|
+
* Compute the canonical ordering key for a single finding.
|
|
70
|
+
*
|
|
71
|
+
* Returns a tuple whose elements, compared left-to-right, produce the
|
|
72
|
+
* canonical ordering defined above. Useful for inspection and testing.
|
|
73
|
+
*
|
|
74
|
+
* Format: [severityRank, determinismRank, ruleId, filePath, line, column, id]
|
|
75
|
+
*/
|
|
76
|
+
function canonicalFindingOrderingKey(f) {
|
|
77
|
+
return [
|
|
78
|
+
rankSeverity(f.severity),
|
|
79
|
+
rankDeterminism(f.determinismClassification),
|
|
80
|
+
f.structuralMetadata?.ruleId ?? '',
|
|
81
|
+
normalizePath(f.evidence?.filePath ?? ''),
|
|
82
|
+
f.evidence?.line ?? 0,
|
|
83
|
+
f.evidence?.column ?? 0,
|
|
84
|
+
f.id,
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sort findings into the canonical deterministic order.
|
|
89
|
+
*
|
|
90
|
+
* Properties:
|
|
91
|
+
* - Pure function — NEVER mutates the input array
|
|
92
|
+
* - Stable across process restarts for identical inputs
|
|
93
|
+
* - Independent of insertion order, Map iteration, filesystem traversal
|
|
94
|
+
* - Total order — no two distinct findings can compare as equal
|
|
95
|
+
*
|
|
96
|
+
* @param findings Any array of GovernanceFinding (may be in any order)
|
|
97
|
+
* @returns New sorted array (input is not mutated)
|
|
98
|
+
*/
|
|
99
|
+
function sortCanonicalFindingsStable(findings) {
|
|
100
|
+
return [...findings].sort((a, b) => {
|
|
101
|
+
// 1. Severity descending (BLOCKING first)
|
|
102
|
+
const sA = rankSeverity(a.severity);
|
|
103
|
+
const sB = rankSeverity(b.severity);
|
|
104
|
+
if (sA !== sB)
|
|
105
|
+
return sB - sA;
|
|
106
|
+
// 2. Determinism classification descending (structural first)
|
|
107
|
+
const dA = rankDeterminism(a.determinismClassification);
|
|
108
|
+
const dB = rankDeterminism(b.determinismClassification);
|
|
109
|
+
if (dA !== dB)
|
|
110
|
+
return dB - dA;
|
|
111
|
+
// 3. Rule ID ascending
|
|
112
|
+
const rA = a.structuralMetadata?.ruleId ?? '';
|
|
113
|
+
const rB = b.structuralMetadata?.ruleId ?? '';
|
|
114
|
+
if (rA !== rB)
|
|
115
|
+
return rA < rB ? -1 : 1;
|
|
116
|
+
// 4. File path ascending (normalized)
|
|
117
|
+
const fA = normalizePath(a.evidence?.filePath ?? '');
|
|
118
|
+
const fB = normalizePath(b.evidence?.filePath ?? '');
|
|
119
|
+
if (fA !== fB)
|
|
120
|
+
return fA < fB ? -1 : 1;
|
|
121
|
+
// 5. Line number ascending (missing = 0)
|
|
122
|
+
const lA = a.evidence?.line ?? 0;
|
|
123
|
+
const lB = b.evidence?.line ?? 0;
|
|
124
|
+
if (lA !== lB)
|
|
125
|
+
return lA - lB;
|
|
126
|
+
// 6. Column number ascending (missing = 0)
|
|
127
|
+
const cA = a.evidence?.column ?? 0;
|
|
128
|
+
const cB = b.evidence?.column ?? 0;
|
|
129
|
+
if (cA !== cB)
|
|
130
|
+
return cA - cB;
|
|
131
|
+
// 7. Finding ID ascending — guaranteed unique tiebreaker
|
|
132
|
+
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Validate that a finding array is already in canonical order.
|
|
137
|
+
*
|
|
138
|
+
* Returns the index of the first out-of-order finding pair, or -1 if
|
|
139
|
+
* the array is already sorted. Used for invariant checking.
|
|
140
|
+
*
|
|
141
|
+
* Emits a console.warn if ordering drift is detected.
|
|
142
|
+
*
|
|
143
|
+
* @param findings Array to validate (not mutated)
|
|
144
|
+
* @param context Caller label for the warning (e.g. 'envelope-emit')
|
|
145
|
+
* @returns Index of first violation, or -1 if canonical
|
|
146
|
+
*/
|
|
147
|
+
function validateCanonicalOrder(findings, context) {
|
|
148
|
+
for (let i = 1; i < findings.length; i++) {
|
|
149
|
+
const prev = findings[i - 1];
|
|
150
|
+
const curr = findings[i];
|
|
151
|
+
const kPrev = canonicalFindingOrderingKey(prev);
|
|
152
|
+
const kCurr = canonicalFindingOrderingKey(curr);
|
|
153
|
+
// Compare tuple element by element
|
|
154
|
+
for (let k = 0; k < kPrev.length; k++) {
|
|
155
|
+
const pv = kPrev[k];
|
|
156
|
+
const cv = kCurr[k];
|
|
157
|
+
if (typeof pv === 'number' && typeof cv === 'number') {
|
|
158
|
+
if (pv > cv) {
|
|
159
|
+
console.warn(`[neurcode/canonical-ordering] ORDERING DRIFT at index ${i} in ${context}. ` +
|
|
160
|
+
`Finding "${prev.id}" (key[${k}]=${pv}) appears before "${curr.id}" (key[${k}]=${cv}) ` +
|
|
161
|
+
`but canonical order requires ascending value at position ${k}. ` +
|
|
162
|
+
`Run sortCanonicalFindingsStable() before serialization.`);
|
|
163
|
+
return i;
|
|
164
|
+
}
|
|
165
|
+
if (pv < cv)
|
|
166
|
+
break; // correct order for this pair
|
|
167
|
+
}
|
|
168
|
+
else if (typeof pv === 'string' && typeof cv === 'string') {
|
|
169
|
+
// Numeric keys are descending (rank), string keys are ascending
|
|
170
|
+
// Keys 0 and 1 are ranks (descending means higher rank first = larger number first)
|
|
171
|
+
if (k <= 1) {
|
|
172
|
+
// These are rank values stored as numbers — already handled above
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
if (pv > cv) {
|
|
176
|
+
console.warn(`[neurcode/canonical-ordering] ORDERING DRIFT at index ${i} in ${context}. ` +
|
|
177
|
+
`Finding "${prev.id}" (key[${k}]="${pv}") appears before "${curr.id}" ` +
|
|
178
|
+
`(key[${k}]="${cv}") but canonical order requires ascending string at position ${k}. ` +
|
|
179
|
+
`Run sortCanonicalFindingsStable() before serialization.`);
|
|
180
|
+
return i;
|
|
181
|
+
}
|
|
182
|
+
if (pv < cv)
|
|
183
|
+
break; // correct order for this pair
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return -1;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=canonical-ordering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-ordering.js","sourceRoot":"","sources":["../../src/governance/canonical-ordering.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import type { GovernanceFinding, GovernanceReplayIntegrity, GovernanceVerificationEnvelope } from '@neurcode-ai/contracts';
|
|
1
|
+
import type { DriftIntelligenceReport, GovernanceFinding, GovernanceReplayIntegrity, GovernanceVerificationEnvelope } from '@neurcode-ai/contracts';
|
|
2
2
|
import type { StructuralViolation } from '../structural-rules/types';
|
|
3
3
|
import type { IntentIssue } from '../intent-engine/matcher';
|
|
4
4
|
import type { FlowIssue } from '../intent-engine/flow-validator';
|
|
5
5
|
import type { RegressionIssue } from '../intent-engine/regression';
|
|
6
6
|
import type { RuleViolation } from '@neurcode-ai/policy-engine';
|
|
7
|
+
/**
|
|
8
|
+
* Strip structural:* prefixed violations from the policy-engine row list.
|
|
9
|
+
* These are already represented in structuralViolations — keeping them in
|
|
10
|
+
* policyViolations causes cross-source duplicate GovernanceFinding objects.
|
|
11
|
+
* Called by attachCanonicalGovernance before building the envelope.
|
|
12
|
+
*/
|
|
13
|
+
export declare function stripStructuralPolicyRows(violations: RuleViolation[]): RuleViolation[];
|
|
7
14
|
export declare function findingFromStructural(v: StructuralViolation): GovernanceFinding;
|
|
8
15
|
export declare function findingFromPolicyEngine(v: RuleViolation): GovernanceFinding;
|
|
9
16
|
export declare function findingFromIntentIssue(i: IntentIssue): GovernanceFinding;
|
|
@@ -21,6 +28,7 @@ export declare function buildGovernanceVerificationEnvelope(input: {
|
|
|
21
28
|
file: string;
|
|
22
29
|
message?: string;
|
|
23
30
|
}>;
|
|
31
|
+
driftIntelligence?: DriftIntelligenceReport | null;
|
|
24
32
|
constraintMessages?: Array<{
|
|
25
33
|
message: string;
|
|
26
34
|
file?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-pipeline.d.ts","sourceRoot":"","sources":["../../src/governance/canonical-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"canonical-pipeline.d.ts","sourceRoot":"","sources":["../../src/governance/canonical-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,uBAAuB,EAEvB,iBAAiB,EACjB,yBAAyB,EAEzB,8BAA8B,EAE/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAehE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAEtF;AAgCD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,CAkC/E;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAyB3E;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAgBxE;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,SAAS,GAAG,iBAAiB,CAepE;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAc3E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAcjF;AA+GD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAcpG;AAgKD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE;IACL,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7C,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACnD,kBAAkB,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;CACtD,GACA,8BAA8B,CAuFhC;AA2FD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoCnG;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD,GAAG,yBAAyB,CAsL5B"}
|