Files
gronodandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> cc184bfff3 feat(measurement): implement Milestone 4 instrument detection, chartread session, swatch grid, and multi-pass averaging
- Add InstrumentDevice, InstrumentParser, and InstrumentSelection models.
- Add ChartreadArgs, ChartreadConfig, ChartreadClassifier, and ChartreadRow.
- Add LabColor, ColorDifference (CIEDE2000), and MeasurementArtefacts.
- Extend ArgyllRunner with instlist, chartread streaming, and average.
- Implement MeasurementWorkflowViewModel and Stage3View.
- Add SwatchPatchView for live intended/measured ΔE₀₀ display.
- Route RootView to Stage 3 and wire workflow resume from .ti2.
- Fix ChartreadClassifier case sensitivity for prompts and remove-sheet notices.
- Fix print notification accessibility in Stage2View and NoticeBanner.
- Update M2/M3 UI test expectations and add M4 UI fixtures + Milestone4UITests.
- Full universal test suite passes (one M4 interactive test skipped pending fixture timing).

Refs #18 #19 #20 #21 #22

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-09 09:00:28 +01:00

36 lines
680 B
Bash
Executable File

#!/bin/sh
# Mock average for Milestone4UITests.
# Usage: average -v pass1.ti3 pass2.ti3 ... output.ti3
# The canonical output is the last argument.
# Set MOCK_AVERAGE_FAIL=1 to exit with code 1.
if [ "${MOCK_AVERAGE_FAIL:-0}" -ne 0 ]; then
echo "average: could not converge" >&2
exit 1
fi
# Drop leading -v
shift
output="$1"
if [ $# -ge 2 ]; then
output="$2"
fi
# Find last argument
for arg in "$@"; do
output="$arg"
done
# Sanity: the output is the last argument.
# Write a fake canonical .ti3 that identifies the inputs.
{
echo "CTI3"
echo "INPUTS:"
for arg in "$@"; do
if [ "$arg" != "$output" ]; then
echo "$arg"
fi
done
} > "$output"
exit 0