Multi-metric compare templates with presence mode and batch workbook results.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-09-17 17:47:51 +08:00
parent 14f5870e19
commit ea6e0041c1
11 changed files with 1060 additions and 453 deletions

View file

@ -238,7 +238,7 @@ const en = {
confirmDeleteTemplate: "Delete this compare template?",
emptyTemplates: "No templates yet. Create one or use built-ins.",
templateHint:
"Field roles: Key aligns rows; interface fields use port mapping; compare fields show pre/post; ignore skips diff.",
"A template holds multiple metric sheets. Key: row identity (no separate compare). Interface: port mapping. Compare: value checks after key match. Leave compare empty for presence-only (entry set match).",
keyFields: "Key",
ifaceFields: "Interface",
compareFields: "Compare",
@ -246,9 +246,20 @@ const en = {
field: "Field",
note: "Note",
keyRequired: "Select at least one key field",
keyIsIdentity: "Key aligns rows; not used as a value-compare field",
metricsRequired: "Add at least one metric sheet",
noMetricFields: "No fields for this metric",
templateFilterPh: "Filter template / metric",
jobFilterPh: "Filter job / template / status",
addMetric: "Add metric",
pickMetric: "Pick metric…",
addSheet: "Add to template",
removeSheet: "Remove sheet",
colSheets: "Sheets",
sheetsUnit: "sheets",
presenceShort: "presence",
modeFields: "Mode: compare selected field values",
modePresence: "Mode: presence-only (entry set match)",
mapping: "Port mapping",
newMapping: "New mapping…",
mapName: "Mapping name",
@ -284,7 +295,8 @@ const en = {
runs: "Run history",
noRuns: "No runs yet — run a compare first",
result: "Result",
pickRun: "Pick a run below or click Run now",
pickBatchRun: "Select compare batch",
pickRun: "Select batch…",
resultEmpty: "No matching diff rows",
resultFilterPh: "Filter key / values…",
kindAll: "All kinds",