Fix compliance reconcile not removing stale core columns
The reconcileConfig() function used string matching 'is missing core column' to identify core column findings, but compareSchemaToDrift() produces messages like 'Core column "X" is missing from all N detail sheet(s)'. The mismatch meant reconciliation never touched core_cols — stale columns persisted and blocked uploads indefinitely. Additionally, the old logic counted findings per column (always 1 since the detection aggregates) and compared against detailSheetCount. Since the finding already confirms the column is missing from ALL sheets, the count check was redundant and always failed. Fix: match on the actual message format and trust the detection's all-sheets assertion directly.
This commit is contained in:
@@ -310,30 +310,19 @@ function reconcileConfig(configPath, driftReport, schema) {
|
||||
// Missing core column: only remove if the column is missing from ALL detail sheets.
|
||||
// Some sheets (e.g. 5.8.1 with CMDB columns) have a completely different structure
|
||||
// and shouldn't cause removal of columns that exist in most other sheets.
|
||||
if (finding.message.includes('is missing core column') && config.core_cols.includes(finding.value)) {
|
||||
// Note: compareSchemaToDrift() already aggregates per-column — findings with
|
||||
// "is missing from all" have already passed the all-sheets check.
|
||||
if (finding.message.includes('Core column') && finding.message.includes('is missing from all') && config.core_cols.includes(finding.value)) {
|
||||
if (!changes.some(function(c) { return c.key === 'core_cols' && c.value === finding.value; })) {
|
||||
const missingFromCount = (driftReport.breaking || []).filter(
|
||||
function(f) { return f.message.includes('is missing core column') && f.value === finding.value; }
|
||||
).length;
|
||||
|
||||
if (detailSheetCount > 0 && missingFromCount >= detailSheetCount) {
|
||||
// Missing from ALL detail sheets — safe to remove
|
||||
config.core_cols = config.core_cols.filter(function(c) { return c !== finding.value; });
|
||||
changes.push({
|
||||
action: 'removed',
|
||||
key: 'core_cols',
|
||||
value: finding.value,
|
||||
detail: `Removed core column "${finding.value}" — missing from all ${detailSheetCount} detail sheet(s)`
|
||||
});
|
||||
} else {
|
||||
// Missing from some sheets but present in others — keep it
|
||||
changes.push({
|
||||
action: 'kept',
|
||||
key: 'core_cols',
|
||||
value: finding.value,
|
||||
detail: `Kept core column "${finding.value}" — missing from ${missingFromCount} of ${detailSheetCount} detail sheet(s)`
|
||||
});
|
||||
}
|
||||
// The finding already confirms the column is missing from ALL detail sheets —
|
||||
// the detection logic only emits "is missing from all" when missingCount >= totalSheets.
|
||||
config.core_cols = config.core_cols.filter(function(c) { return c !== finding.value; });
|
||||
changes.push({
|
||||
action: 'removed',
|
||||
key: 'core_cols',
|
||||
value: finding.value,
|
||||
detail: `Removed core column "${finding.value}" — missing from all ${detailSheetCount} detail sheet(s)`
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user