upstream-radar 0.40.0 → 0.41.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/README.md +123 -225
- package/dist/src/cli.js +11 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/dsh-compatibility-ir.d.ts +98 -0
- package/dist/src/dsh-compatibility-ir.d.ts.map +1 -0
- package/dist/src/dsh-compatibility-ir.js +389 -0
- package/dist/src/dsh-compatibility-ir.js.map +1 -0
- package/dist/src/dsh-compatibility-issues.d.ts +44 -0
- package/dist/src/dsh-compatibility-issues.d.ts.map +1 -0
- package/dist/src/dsh-compatibility-issues.js +185 -0
- package/dist/src/dsh-compatibility-issues.js.map +1 -0
- package/dist/src/dsh-compatibility-ledger.d.ts +150 -0
- package/dist/src/dsh-compatibility-ledger.d.ts.map +1 -0
- package/dist/src/dsh-compatibility-ledger.js +645 -0
- package/dist/src/dsh-compatibility-ledger.js.map +1 -0
- package/dist/src/dsh-install-observation.d.ts +88 -1
- package/dist/src/dsh-install-observation.d.ts.map +1 -1
- package/dist/src/dsh-install-observation.js +579 -6
- package/dist/src/dsh-install-observation.js.map +1 -1
- package/dist/src/dsh-install-plan.d.ts +16 -6
- package/dist/src/dsh-install-plan.d.ts.map +1 -1
- package/dist/src/dsh-install-plan.js +272 -46
- package/dist/src/dsh-install-plan.js.map +1 -1
- package/dist/src/dsh-plugin.d.ts.map +1 -1
- package/dist/src/dsh-plugin.js +6 -2
- package/dist/src/dsh-plugin.js.map +1 -1
- package/dist/src/dsh-runtime.d.ts +6 -0
- package/dist/src/dsh-runtime.d.ts.map +1 -1
- package/dist/src/dsh-runtime.js +38 -0
- package/dist/src/dsh-runtime.js.map +1 -1
- package/dist/src/index.d.ts +7 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/installed-graph.d.ts.map +1 -1
- package/dist/src/installed-graph.js +105 -26
- package/dist/src/installed-graph.js.map +1 -1
- package/dist/src/radar-types.d.ts +15 -0
- package/dist/src/radar-types.d.ts.map +1 -1
- package/dist/src/semver.d.ts.map +1 -1
- package/dist/src/semver.js +7 -1
- package/dist/src/semver.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/README.zh-CN.md +25 -23
- package/package.json +1 -1
- package/schemas/dsh-compatibility-ir.schema.json +89 -0
- package/schemas/dsh-install-observation.schema.json +135 -2
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { parseDshCompatibilityLedger, } from './dsh-compatibility-ledger.js';
|
|
2
|
+
const CASE_MARKER = /<!-- upstream-radar:dsh-compatibility-case=([a-z0-9][a-z0-9._-]{0,63}) -->/;
|
|
3
|
+
const ACTIONABLE_RESULTS = new Set([
|
|
4
|
+
'runtime-incompatible',
|
|
5
|
+
'peer-contract-incompatible',
|
|
6
|
+
'install-failed',
|
|
7
|
+
'load-failed',
|
|
8
|
+
]);
|
|
9
|
+
export const DSH_COMPATIBILITY_ISSUE_LABELS = ['upstream-radar', 'dsh-compatibility'];
|
|
10
|
+
function inline(value, maximum = 1_024) {
|
|
11
|
+
return value
|
|
12
|
+
.replace(/[\u0000-\u001f\u007f`|<>]/g, ' ')
|
|
13
|
+
.replace(/\s+/g, ' ')
|
|
14
|
+
.trim()
|
|
15
|
+
.slice(0, maximum);
|
|
16
|
+
}
|
|
17
|
+
function runLink(runUrl) {
|
|
18
|
+
if (runUrl === undefined)
|
|
19
|
+
return 'not recorded';
|
|
20
|
+
try {
|
|
21
|
+
const parsed = new URL(runUrl);
|
|
22
|
+
if (parsed.protocol !== 'https:')
|
|
23
|
+
return 'not recorded';
|
|
24
|
+
return `[GitHub Actions evidence](${parsed.toString()})`;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return 'not recorded';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function dshCompatibilityIssueMarker(caseId) {
|
|
31
|
+
if (!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(caseId))
|
|
32
|
+
throw new Error(`invalid DSH compatibility case id: ${caseId}`);
|
|
33
|
+
return `<!-- upstream-radar:dsh-compatibility-case=${caseId} -->`;
|
|
34
|
+
}
|
|
35
|
+
export function dshCompatibilityIssueCaseId(body) {
|
|
36
|
+
return CASE_MARKER.exec(body)?.[1];
|
|
37
|
+
}
|
|
38
|
+
function repairPath(entry) {
|
|
39
|
+
if (entry.result === 'runtime-incompatible') {
|
|
40
|
+
return [
|
|
41
|
+
'Confirm which Node.js majors the plugin and DSH release are intended to support.',
|
|
42
|
+
'Align the published `engines.node` contract or add a tested runtime cell that satisfies it.',
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
if (entry.result === 'peer-contract-incompatible') {
|
|
46
|
+
return [
|
|
47
|
+
'Align required DSH/React peer ranges with the versions the final DSH profile actually provides.',
|
|
48
|
+
'Re-run the same plugin, DSH and Node cell; a successful headless boot alone is not enough when a required peer remains missing or mismatched.',
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
if (entry.result === 'install-failed') {
|
|
52
|
+
return [
|
|
53
|
+
'Reproduce the package-manager failure with the exact artifact and approved dependency-build policy below.',
|
|
54
|
+
'Publish a corrected artifact or narrow the supported DSH/runtime contract, then let Radar perform the next clean install.',
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
return [
|
|
58
|
+
'Reproduce the DSH registration/import/boot failure with the exact coordinates below.',
|
|
59
|
+
'Fix the runtime integration or declare the unsupported DSH boundary, then let Radar perform the next clean load.',
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
function peerEvidence(entry) {
|
|
63
|
+
const contracts = entry.resolution?.runtimeGraph?.pluginPeerContracts;
|
|
64
|
+
if (contracts === undefined)
|
|
65
|
+
return [];
|
|
66
|
+
const lines = [
|
|
67
|
+
'',
|
|
68
|
+
'### Direct host contracts',
|
|
69
|
+
'',
|
|
70
|
+
`- Declared: **${contracts.declared}**; satisfied: **${contracts.satisfied}**; mismatched: **${contracts.mismatched}**; missing: **${contracts.missing}**; indeterminate: **${contracts.indeterminate}**.`,
|
|
71
|
+
];
|
|
72
|
+
for (const issue of contracts.issues ?? []) {
|
|
73
|
+
lines.push(`- \`${inline(issue.name, 214)}\`: ${inline(issue.status, 32)}; requires \`${inline(issue.required, 512)}\`${issue.resolvedVersion === undefined ? '' : `, resolved \`${inline(issue.resolvedVersion, 256)}\``}; static use: \`${inline(issue.staticUsage, 64)}\`.`);
|
|
74
|
+
}
|
|
75
|
+
return lines;
|
|
76
|
+
}
|
|
77
|
+
export function renderDshCompatibilityIssue(entry, runUrl) {
|
|
78
|
+
const title = `[DSH compatibility] ${inline(entry.plugin, 160)} on DSH ${inline(entry.dshVersion, 64)} / Node ${entry.runtime.nodeMajor}: ${entry.result}`.slice(0, 256);
|
|
79
|
+
const graph = entry.resolution?.runtimeGraph;
|
|
80
|
+
const lockfile = entry.resolution?.profileLockfile;
|
|
81
|
+
const lines = [
|
|
82
|
+
dshCompatibilityIssueMarker(entry.caseId),
|
|
83
|
+
'',
|
|
84
|
+
'Upstream Radar reproduced an incompatibility in a disposable GitHub-hosted environment. This is an internal compatibility incident; forward it to an upstream author only after reviewing the attached evidence.',
|
|
85
|
+
'',
|
|
86
|
+
'### Exact cell',
|
|
87
|
+
'',
|
|
88
|
+
`- Plugin: \`${inline(entry.plugin, 512)}\``,
|
|
89
|
+
`- DSH: \`@deepseek-ai/dsh@${inline(entry.dshVersion, 128)}\``,
|
|
90
|
+
`- Runtime: Node \`${inline(entry.runtime.nodeVersion, 64)}\` on \`${inline(`${entry.runtime.platform}/${entry.runtime.architecture}`, 128)}\``,
|
|
91
|
+
`- Result: \`${entry.result}\``,
|
|
92
|
+
`- Observed: \`${inline(entry.observedAt, 64)}\``,
|
|
93
|
+
`- Artifact: ${entry.artifact.sha256 === undefined ? 'digest unavailable' : `\`sha256:${inline(entry.artifact.sha256, 64)}\``}`,
|
|
94
|
+
`- Evidence run: ${runLink(runUrl)}`,
|
|
95
|
+
'',
|
|
96
|
+
'### Reproduced failure',
|
|
97
|
+
'',
|
|
98
|
+
inline(entry.reason, 4_096),
|
|
99
|
+
];
|
|
100
|
+
if (graph !== undefined || lockfile !== undefined) {
|
|
101
|
+
lines.push('', '### Dependency evidence', '', `- Final profile graph: ${lockfile === undefined ? 'not established' : `${lockfile.nodes} node(s), ${lockfile.edges} edge(s), ${lockfile.unresolved} unresolved edge(s)`}.`, `- Effective runtime graph: ${graph === undefined ? 'not established' : `${graph.nodes} node(s), ${graph.edges} edge(s), ${graph.unresolved} required unresolved edge(s)`}.`);
|
|
102
|
+
}
|
|
103
|
+
lines.push(...peerEvidence(entry), '', '### Repair path', '');
|
|
104
|
+
for (const item of repairPath(entry))
|
|
105
|
+
lines.push(`- ${item}`);
|
|
106
|
+
lines.push('', 'This issue is managed by Upstream Radar. A later compatible observation for the same maintained cell will add a resolution note and close it automatically.', '', '_Bounded compatibility evidence is not a claim that third-party code is safe or malicious._', '');
|
|
107
|
+
return { title, body: lines.join('\n').slice(0, 60_000) };
|
|
108
|
+
}
|
|
109
|
+
export function renderDshCompatibilityResolution(entry, runUrl) {
|
|
110
|
+
return [
|
|
111
|
+
`<!-- upstream-radar:dsh-compatibility-resolution=${entry.caseId}:${entry.contractFingerprint} -->`,
|
|
112
|
+
'',
|
|
113
|
+
'Upstream Radar re-ran this maintained cell in a fresh isolated environment and the exact package now installs, registers and loads with a complete required host contract.',
|
|
114
|
+
'',
|
|
115
|
+
`- Plugin: \`${inline(entry.plugin, 512)}\``,
|
|
116
|
+
`- DSH: \`@deepseek-ai/dsh@${inline(entry.dshVersion, 128)}\``,
|
|
117
|
+
`- Runtime: Node \`${inline(entry.runtime.nodeVersion, 64)}\``,
|
|
118
|
+
`- Observed: \`${inline(entry.observedAt, 64)}\``,
|
|
119
|
+
`- Evidence run: ${runLink(runUrl)}`,
|
|
120
|
+
'',
|
|
121
|
+
'Closing this compatibility incident as verified resolved.',
|
|
122
|
+
].join('\n');
|
|
123
|
+
}
|
|
124
|
+
function existingByCase(issues) {
|
|
125
|
+
const result = new Map();
|
|
126
|
+
for (const issue of issues) {
|
|
127
|
+
if (!Number.isSafeInteger(issue.number) || issue.number < 1)
|
|
128
|
+
throw new Error('existing compatibility issue has an invalid number');
|
|
129
|
+
if (issue.state !== 'open' && issue.state !== 'closed')
|
|
130
|
+
throw new Error(`issue #${issue.number} has an invalid state`);
|
|
131
|
+
const caseId = dshCompatibilityIssueCaseId(issue.body);
|
|
132
|
+
if (caseId === undefined)
|
|
133
|
+
continue;
|
|
134
|
+
const duplicate = result.get(caseId);
|
|
135
|
+
if (duplicate !== undefined)
|
|
136
|
+
throw new Error(`duplicate managed compatibility issues for ${caseId}: #${duplicate.number} and #${issue.number}`);
|
|
137
|
+
result.set(caseId, issue);
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
/** Build an idempotent desired-state plan for issues in Radar's own repository. */
|
|
142
|
+
export function buildDshCompatibilityIssuePlan(input) {
|
|
143
|
+
const ledger = parseDshCompatibilityLedger(input.ledger);
|
|
144
|
+
const existing = existingByCase(input.existingIssues);
|
|
145
|
+
const actions = [];
|
|
146
|
+
const openCaseIds = [];
|
|
147
|
+
const ignoredUnknownCaseIds = [];
|
|
148
|
+
for (const entry of ledger.entries) {
|
|
149
|
+
const issue = existing.get(entry.caseId);
|
|
150
|
+
if (entry.result === 'unknown') {
|
|
151
|
+
ignoredUnknownCaseIds.push(entry.caseId);
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
if (entry.result === 'compatible') {
|
|
155
|
+
if (issue?.state === 'open') {
|
|
156
|
+
actions.push({
|
|
157
|
+
kind: 'close',
|
|
158
|
+
caseId: entry.caseId,
|
|
159
|
+
issueNumber: issue.number,
|
|
160
|
+
comment: renderDshCompatibilityResolution(entry, input.runUrl),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (!ACTIONABLE_RESULTS.has(entry.result))
|
|
166
|
+
continue;
|
|
167
|
+
openCaseIds.push(entry.caseId);
|
|
168
|
+
const rendered = renderDshCompatibilityIssue(entry, input.runUrl);
|
|
169
|
+
if (issue === undefined) {
|
|
170
|
+
actions.push({ kind: 'create', caseId: entry.caseId, ...rendered });
|
|
171
|
+
}
|
|
172
|
+
else if (issue.state === 'closed') {
|
|
173
|
+
actions.push({ kind: 'reopen', caseId: entry.caseId, issueNumber: issue.number, ...rendered });
|
|
174
|
+
}
|
|
175
|
+
else if (issue.title !== rendered.title || issue.body !== rendered.body) {
|
|
176
|
+
actions.push({ kind: 'update', caseId: entry.caseId, issueNumber: issue.number, ...rendered });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
actions,
|
|
181
|
+
openCaseIds: openCaseIds.sort(),
|
|
182
|
+
ignoredUnknownCaseIds: ignoredUnknownCaseIds.sort(),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=dsh-compatibility-issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsh-compatibility-issues.js","sourceRoot":"","sources":["../../src/dsh-compatibility-issues.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import type { DshInstallObservationResult, DshInstallPeerStaticUsage } from './dsh-install-observation.js';
|
|
2
|
+
/**
|
|
3
|
+
* Durable, current-state evidence for the exact plugin/DSH/runtime cells that
|
|
4
|
+
* Radar promises to keep checking. This is deliberately a ledger, not a test
|
|
5
|
+
* history database: one entry represents the latest trustworthy observation
|
|
6
|
+
* for one active cell.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DSH_COMPATIBILITY_LEDGER_SCHEMA: 'upstream-radar.dsh-compatibility-ledger/v1alpha1';
|
|
9
|
+
export interface DshCompatibilityProfileLockfile {
|
|
10
|
+
sha256: string;
|
|
11
|
+
bytes: number;
|
|
12
|
+
graphDigest?: string;
|
|
13
|
+
nodes?: number;
|
|
14
|
+
edges?: number;
|
|
15
|
+
unresolved?: number;
|
|
16
|
+
unresolvedDependencies?: DshCompatibilityProfileGraphGap[];
|
|
17
|
+
}
|
|
18
|
+
export interface DshCompatibilityProfileGraphGap {
|
|
19
|
+
from: string;
|
|
20
|
+
name: string;
|
|
21
|
+
spec: string;
|
|
22
|
+
kind: 'runtime' | 'development' | 'optional' | 'peer' | 'host-runtime';
|
|
23
|
+
}
|
|
24
|
+
export interface DshCompatibilityRuntimeGraph {
|
|
25
|
+
digest: string;
|
|
26
|
+
nodes: number;
|
|
27
|
+
edges: number;
|
|
28
|
+
/** Required runtime/peer gaps; optional platform variants are kept separately. */
|
|
29
|
+
unresolved: number;
|
|
30
|
+
unresolvedDependencies?: DshCompatibilityProfileGraphGap[];
|
|
31
|
+
optionalUnavailable?: number;
|
|
32
|
+
optionalUnavailableDependencies?: DshCompatibilityProfileGraphGap[];
|
|
33
|
+
pluginPeerContracts?: DshCompatibilityPluginPeerContracts;
|
|
34
|
+
hostRuntime?: {
|
|
35
|
+
source: 'dsh-profile-fallback' | 'dsh-process';
|
|
36
|
+
resolvedNodes: number;
|
|
37
|
+
dshVersion?: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface DshCompatibilityPeerContractIssue {
|
|
41
|
+
name: string;
|
|
42
|
+
required: string;
|
|
43
|
+
status: 'mismatched' | 'indeterminate' | 'missing';
|
|
44
|
+
staticUsage: DshInstallPeerStaticUsage;
|
|
45
|
+
resolvedVersion?: string;
|
|
46
|
+
}
|
|
47
|
+
/** One exact plugin peer relation, kept for the reverse compatibility index. */
|
|
48
|
+
export interface DshCompatibilityPeerContractRelation {
|
|
49
|
+
name: string;
|
|
50
|
+
required: string;
|
|
51
|
+
status: 'satisfied' | 'mismatched' | 'indeterminate' | 'missing';
|
|
52
|
+
staticUsage: DshInstallPeerStaticUsage;
|
|
53
|
+
resolvedVersion?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface DshCompatibilityPluginPeerContracts {
|
|
56
|
+
declared: number;
|
|
57
|
+
satisfied: number;
|
|
58
|
+
mismatched: number;
|
|
59
|
+
indeterminate: number;
|
|
60
|
+
missing: number;
|
|
61
|
+
relations: DshCompatibilityPeerContractRelation[];
|
|
62
|
+
issues?: DshCompatibilityPeerContractIssue[];
|
|
63
|
+
}
|
|
64
|
+
export interface DshCompatibilityLedgerEntry {
|
|
65
|
+
caseId: string;
|
|
66
|
+
targetId: string;
|
|
67
|
+
plugin: string;
|
|
68
|
+
dshVersion: string;
|
|
69
|
+
runtime: {
|
|
70
|
+
nodeMajor: number;
|
|
71
|
+
nodeVersion: string;
|
|
72
|
+
platform: string;
|
|
73
|
+
architecture: string;
|
|
74
|
+
pnpmVersion?: string;
|
|
75
|
+
};
|
|
76
|
+
staticFingerprint: string;
|
|
77
|
+
contractFingerprint: string;
|
|
78
|
+
observedAt: string;
|
|
79
|
+
result: DshInstallObservationResult;
|
|
80
|
+
reason: string;
|
|
81
|
+
artifact: {
|
|
82
|
+
lifecycleScripts: string[];
|
|
83
|
+
sha256?: string;
|
|
84
|
+
integrity?: string;
|
|
85
|
+
nodeEngine?: string;
|
|
86
|
+
};
|
|
87
|
+
resolution?: {
|
|
88
|
+
profileLockfile?: DshCompatibilityProfileLockfile;
|
|
89
|
+
runtimeGraph?: DshCompatibilityRuntimeGraph;
|
|
90
|
+
};
|
|
91
|
+
observer: {
|
|
92
|
+
schema: string;
|
|
93
|
+
version: string;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export interface DshCompatibilityLedger {
|
|
97
|
+
schema: typeof DSH_COMPATIBILITY_LEDGER_SCHEMA;
|
|
98
|
+
entries: DshCompatibilityLedgerEntry[];
|
|
99
|
+
}
|
|
100
|
+
/** One matrix entry sent from the static reconciler to the isolated runner. */
|
|
101
|
+
export interface DshCompatibilityExpectedCase {
|
|
102
|
+
id: string;
|
|
103
|
+
targetId: string;
|
|
104
|
+
plugin: string;
|
|
105
|
+
dshVersion: string;
|
|
106
|
+
nodeMajor: number;
|
|
107
|
+
allowedBuilds: string;
|
|
108
|
+
staticFingerprint: string;
|
|
109
|
+
contractFingerprint: string;
|
|
110
|
+
reasons: string[];
|
|
111
|
+
}
|
|
112
|
+
export type DshCompatibilityTransitionStatus = 'compatible' | 'artifact-drift' | 'resolution-drift' | 'new-incompatibility' | 'changed-incompatibility' | 'resolved-incompatibility' | 'persisting-incompatibility';
|
|
113
|
+
export interface DshCompatibilityTransition {
|
|
114
|
+
caseId: string;
|
|
115
|
+
status: DshCompatibilityTransitionStatus;
|
|
116
|
+
result: DshInstallObservationResult;
|
|
117
|
+
reason: string;
|
|
118
|
+
previousResult?: DshInstallObservationResult;
|
|
119
|
+
}
|
|
120
|
+
export interface DshCompatibilityLedgerMerge {
|
|
121
|
+
ledger: DshCompatibilityLedger;
|
|
122
|
+
transitions: DshCompatibilityTransition[];
|
|
123
|
+
acceptedCaseIds: string[];
|
|
124
|
+
missingCaseIds: string[];
|
|
125
|
+
rejectedReports: string[];
|
|
126
|
+
}
|
|
127
|
+
export declare function emptyDshCompatibilityLedger(): DshCompatibilityLedger;
|
|
128
|
+
export declare function parseDshCompatibilityLedger(input: unknown): DshCompatibilityLedger;
|
|
129
|
+
/** Static facts that may invalidate a prior runtime observation. */
|
|
130
|
+
export declare function createDshCompatibilityStaticFingerprint(value: unknown): string;
|
|
131
|
+
/** The controlled execution contract, deliberately separate from source facts. */
|
|
132
|
+
export declare function createDshCompatibilityContractFingerprint(value: {
|
|
133
|
+
plugin: string;
|
|
134
|
+
dshVersion: string;
|
|
135
|
+
nodeMajor: number;
|
|
136
|
+
allowedBuilds: readonly string[];
|
|
137
|
+
}): string;
|
|
138
|
+
export declare function dshCompatibilityCaseId(targetId: string, runtimeProfileId: string): string;
|
|
139
|
+
/**
|
|
140
|
+
* Merge only reports that prove they belong to a scheduled exact cell. Bad or
|
|
141
|
+
* absent reports never become a green result; absent cells stay missing and
|
|
142
|
+
* therefore are planned again on the next reconciliation.
|
|
143
|
+
*/
|
|
144
|
+
export declare function mergeDshCompatibilityLedger(input: {
|
|
145
|
+
ledger: DshCompatibilityLedger;
|
|
146
|
+
expected: readonly DshCompatibilityExpectedCase[];
|
|
147
|
+
reports: readonly unknown[];
|
|
148
|
+
}): DshCompatibilityLedgerMerge;
|
|
149
|
+
export declare function renderDshCompatibilityLedgerMerge(merge: DshCompatibilityLedgerMerge): string;
|
|
150
|
+
//# sourceMappingURL=dsh-compatibility-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsh-compatibility-ledger.d.ts","sourceRoot":"","sources":["../../src/dsh-compatibility-ledger.ts"],"names":[],"mappings":"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"}
|