Stop shipping the upstream manual, move Scan to the toolbar, MMD version #4

Merged
kua-agent merged 2 commits from fix/mmd-pdf-branding-scan-version-20260828 into main 2026-08-28 04:36:15 +00:00
8 changed files with 49 additions and 62 deletions
+1
View File
@@ -1,3 +1,4 @@
bin/ bin/
obj/ obj/
*.user *.user
MmdPdf.pdf
+1 -52
View File
@@ -231,49 +231,6 @@
</Setter> </Setter>
</Style> </Style>
<!-- Solid tool button on the band: flat, 1px border, 4px corner. The one place a
white fill appears on the red ground, so the tool it carries reads as the
action always within reach. -->
<Style x:Key="BandButton" TargetType="Button">
<Setter Property="Background" Value="#FFFFFF"/>
<Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
<Setter Property="BorderBrush" Value="#FFFFFF"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="10,0"/>
<Setter Property="Height" Value="24"/>
<Setter Property="Margin" Value="0,0,10,0"/>
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="FontSize" Value="10.5"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{DynamicResource ControlCornerRadius}"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#F1F1EC"/>
<Setter Property="BorderBrush" Value="#F1F1EC"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#E4E3DC"/>
<Setter Property="BorderBrush" Value="#E4E3DC"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.55"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ChromeButton" TargetType="Button"> <Style x:Key="ChromeButton" TargetType="Button">
<Setter Property="Background" Value="Transparent"/> <Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="{DynamicResource CaptionGlyphBrush}"/> <Setter Property="Foreground" Value="{DynamicResource CaptionGlyphBrush}"/>
@@ -1235,15 +1192,6 @@
Margin="16,0,12,0" TextTrimming="CharacterEllipsis" Margin="16,0,12,0" TextTrimming="CharacterEllipsis"
Foreground="{DynamicResource FilenameBrush}" FontFamily="Consolas" FontSize="11"/> Foreground="{DynamicResource FilenameBrush}" FontFamily="Consolas" FontSize="11"/>
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="{DynamicResource CaptionButtonsMargin}"> <StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="{DynamicResource CaptionButtonsMargin}">
<Button x:Name="BandScanBtn" Click="Scan_Click" Style="{StaticResource BandButton}"
ToolTip="Pull pages off a copier"
WindowChrome.IsHitTestVisibleInChrome="True">
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xE8FE;" FontFamily="Segoe MDL2 Assets" FontSize="12"
VerticalAlignment="Center" Margin="0,0,6,0"/>
<TextBlock Text="Scan" VerticalAlignment="Center"/>
</StackPanel>
</Button>
<Button Click="MinimizeBtn_Click" Style="{StaticResource ChromeButton}" <Button Click="MinimizeBtn_Click" Style="{StaticResource ChromeButton}"
Foreground="{DynamicResource CaptionGlyphBrush}" Foreground="{DynamicResource CaptionGlyphBrush}"
WindowChrome.IsHitTestVisibleInChrome="True"> WindowChrome.IsHitTestVisibleInChrome="True">
@@ -1309,6 +1257,7 @@
<Button x:Name="OcrMenuBtn" Content="&#xE70D;" FontSize="10" Width="13" Padding="0" Margin="-6,0,0,0" Style="{StaticResource ToolbarButton}" Click="OcrMenu_Click" ToolTip="{DynamicResource Str_TT_OcrOptions}"/> <Button x:Name="OcrMenuBtn" Content="&#xE70D;" FontSize="10" Width="13" Padding="0" Margin="-6,0,0,0" Style="{StaticResource ToolbarButton}" Click="OcrMenu_Click" ToolTip="{DynamicResource Str_TT_OcrOptions}"/>
<Button Content="&#xE8B9;" Style="{StaticResource ToolbarButton}" Click="SaveFlattened_Click" ToolTip="{DynamicResource Str_TT_SaveFlattened}"/> <Button Content="&#xE8B9;" Style="{StaticResource ToolbarButton}" Click="SaveFlattened_Click" ToolTip="{DynamicResource Str_TT_SaveFlattened}"/>
<Button Content="&#xE749;" Style="{StaticResource ToolbarButton}" Click="Print_Click" ToolTip="{DynamicResource Str_TT_Print}"/> <Button Content="&#xE749;" Style="{StaticResource ToolbarButton}" Click="Print_Click" ToolTip="{DynamicResource Str_TT_Print}"/>
<Button x:Name="ScanBtn" Content="&#xE8FE;" Style="{StaticResource ToolbarButton}" Click="Scan_Click" ToolTip="{DynamicResource Str_TT_Scan}"/>
<StackPanel x:Name="GrpPageOps" Orientation="Horizontal"> <StackPanel x:Name="GrpPageOps" Orientation="Horizontal">
<Rectangle Width="1" Fill="{DynamicResource CardBorderBrush}" Margin="4,6"/> <Rectangle Width="1" Fill="{DynamicResource CardBorderBrush}" Margin="4,6"/>
<Button Content="&#xE710;" Style="{StaticResource ToolbarButton}" Click="Merge_Click" ToolTip="{DynamicResource Str_TT_MergePDFs}"/> <Button Content="&#xE710;" Style="{StaticResource ToolbarButton}" Click="Merge_Click" ToolTip="{DynamicResource Str_TT_MergePDFs}"/>
+5 -3
View File
@@ -13,9 +13,11 @@
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>
<ApplicationIcon>Resources\mmd-icon.ico</ApplicationIcon> <ApplicationIcon>Resources\mmd-icon.ico</ApplicationIcon>
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>
<Version>1.7.5</Version> <!-- MMD's own version line. 1.7.5 was the upstream project's; it read as that
<AssemblyVersion>1.7.5.0</AssemblyVersion> product still, and it has to sort above it so an upgrade is an upgrade. -->
<FileVersion>1.7.5.0</FileVersion> <Version>2026.8.1</Version>
<AssemblyVersion>2026.8.1.0</AssemblyVersion>
<FileVersion>2026.8.1.0</FileVersion>
<!-- Shown in the About card beside the version so a user can tell how old their build <!-- Shown in the About card beside the version so a user can tell how old their build
is. Must match the date on this version's CHANGELOG section - release.ps1 preflight is. Must match the date on this version's CHANGELOG section - release.ps1 preflight
fails the release if it does not. Bump it with the version. --> fails the release if it does not. Bump it with the version. -->
BIN
View File
Binary file not shown.
+1
View File
@@ -520,6 +520,7 @@ namespace MmdPdf
[""] = "Str_Lbl_Flatten", [""] = "Str_Lbl_Flatten",
[""] = "Str_Lbl_Ocr", [""] = "Str_Lbl_Ocr",
[""] = "Str_Lbl_Print", [""] = "Str_Lbl_Print",
["\ue8fe"] = "Str_Lbl_Scan",
[""] = "Str_Lbl_Merge", [""] = "Str_Lbl_Merge",
[""] = "Str_Lbl_Extract", [""] = "Str_Lbl_Extract",
[""] = "Str_Lbl_Delete", [""] = "Str_Lbl_Delete",
+2
View File
@@ -19,6 +19,7 @@
<sys:String x:Key="Str_TT_SaveAs">Save As (Ctrl+Shift+S)</sys:String> <sys:String x:Key="Str_TT_SaveAs">Save As (Ctrl+Shift+S)</sys:String>
<sys:String x:Key="Str_TT_SaveFlattened">Save Flattened PDF (rasterize all pages - fully uneditable)</sys:String> <sys:String x:Key="Str_TT_SaveFlattened">Save Flattened PDF (rasterize all pages - fully uneditable)</sys:String>
<sys:String x:Key="Str_TT_Print">Print (Ctrl+P)</sys:String> <sys:String x:Key="Str_TT_Print">Print (Ctrl+P)</sys:String>
<sys:String x:Key="Str_TT_Scan">Pull pages off a copier</sys:String>
<sys:String x:Key="Str_TT_MergePDFs">Merge PDFs (combine additional PDFs into this one)</sys:String> <sys:String x:Key="Str_TT_MergePDFs">Merge PDFs (combine additional PDFs into this one)</sys:String>
<sys:String x:Key="Str_TT_ExtractPages">Extract Pages (save selected pages to a new PDF)</sys:String> <sys:String x:Key="Str_TT_ExtractPages">Extract Pages (save selected pages to a new PDF)</sys:String>
<sys:String x:Key="Str_TT_DeletePages">Delete Selected Pages</sys:String> <sys:String x:Key="Str_TT_DeletePages">Delete Selected Pages</sys:String>
@@ -297,6 +298,7 @@ Scale them to a supported size? The pages keep their look and proportions.</sys:
<sys:String x:Key="Str_Lbl_Save">Save</sys:String> <sys:String x:Key="Str_Lbl_Save">Save</sys:String>
<sys:String x:Key="Str_Lbl_Flatten">Flatten</sys:String> <sys:String x:Key="Str_Lbl_Flatten">Flatten</sys:String>
<sys:String x:Key="Str_Lbl_Print">Print</sys:String> <sys:String x:Key="Str_Lbl_Print">Print</sys:String>
<sys:String x:Key="Str_Lbl_Scan">Scan</sys:String>
<sys:String x:Key="Str_Lbl_Select">Select</sys:String> <sys:String x:Key="Str_Lbl_Select">Select</sys:String>
<sys:String x:Key="Str_Lbl_ZoomOut">Zoom Out</sys:String> <sys:String x:Key="Str_Lbl_ZoomOut">Zoom Out</sys:String>
<sys:String x:Key="Str_Lbl_ZoomIn">Zoom In</sys:String> <sys:String x:Key="Str_Lbl_ZoomIn">Zoom In</sys:String>
+14 -6
View File
@@ -11,20 +11,28 @@ Status: 🟢 proven end-to-end on a real build with evidence · 🟡 in progress
| PDF-04 | Save over the original, with confirmation | 1.7.5 | kua-agent | 🟢 | unsigned | SCREENS Save · TC-04 | | PDF-04 | Save over the original, with confirmation | 1.7.5 | kua-agent | 🟢 | unsigned | SCREENS Save · TC-04 |
| PDF-05 | Runs with no admin rights, portable | 1.7.5 | kua-agent | 🟢 | unsigned | PRD req.4 · TC-05 | | PDF-05 | Runs with no admin rights, portable | 1.7.5 | kua-agent | 🟢 | unsigned | PRD req.4 · TC-05 |
| PDF-06 | Leaves the Windows default-PDF setting alone | 1.7.5 | kua-agent | 🟢 | unsigned | PRD "why" · TC-06 | | PDF-06 | Leaves the Windows default-PDF setting alone | 1.7.5 | kua-agent | 🟢 | unsigned | PRD "why" · TC-06 |
| PDF-07 | MMD name, icon and word-mark | 0.1 | kua-agent | 🟡 | unsigned | SCREENS all · TC-07 | | PDF-07 | MMD name, icon and word-mark | 2026.8.1 | kua-agent | 🟢 | unsigned | SCREENS all · TC-07 |
| PDF-08 | MMD shell design system, light only, no theme picker | 0.1 | kua-agent | | unsigned | PRD req.3 · SCREENS · TC-08 | | PDF-08 | MMD shell design system, light only, no theme picker | 2026.8.1 | kua-agent | 🟢 | unsigned | PRD req.3 · SCREENS · TC-08 |
| PDF-09 | Works at 800×600 | 0.1 | — | | unsigned | PRD req.2 · SCREENS Directions · TC-09 | | PDF-09 | Works at 800×600 | 2026.8.1 | kua-agent | 🟢 | unsigned | PRD req.2 · SCREENS Directions · TC-09 |
| PDF-10 | Fill and sign forms | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-10 | | PDF-10 | Fill and sign forms | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-10 |
| PDF-11 | Mark up: highlight, draw, shapes, stamps, images | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-11 | | PDF-11 | Mark up: highlight, draw, shapes, stamps, images | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-11 |
| PDF-12 | Page work: merge, extract, delete, reorder, crop | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-12 | | PDF-12 | Page work: merge, extract, delete, reorder, crop | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-12 |
| PDF-13 | Turn a scan into searchable text | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-13 | | PDF-13 | Turn a scan into searchable text | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-13 |
| PDF-14 | Pull pages off a network copier | — | — | | unsigned | PRD in-scope · SCREENS Scan · TC-14 | | PDF-14 | Pull pages off a network copier | 2026.8.1 | kua-agent | 🟡 | unsigned | PRD in-scope · SCREENS Scan · TC-14 |
| PDF-15 | French interface | 1.7.5 | — | ⚪ | unsigned | PRD req.5 · TC-15 | | PDF-15 | French interface | 1.7.5 | — | ⚪ | unsigned | PRD req.5 · TC-15 |
| PDF-16 | Print | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-16 | | PDF-16 | Print | 1.7.5 | — | ⚪ | unsigned | PRD in-scope · TC-16 |
| PDF-17 | Code signing under an MMD certificate | — | — | | unsigned | PRD open q. · TC-17 | | PDF-17 | Code signing under an MMD certificate | 2026.8.1 | kua-agent | 🟢 | unsigned | PRD open q. · TC-17 |
| PDF-18 | Deploy through Intune | — | — | | unsigned | PRD open q. · TC-18 | | PDF-18 | Deploy through Intune | 2026.8.1 | kua-agent | 🟢 | unsigned | PRD open q. · TC-18 |
| PDF-19 | Official square app mark for 1624px | — | — | ⛔ | unsigned | PRD open q. | | PDF-19 | Official square app mark for 1624px | — | — | ⛔ | unsigned | PRD open q. |
## Why PDF-14 is still 🟡
The copier conversation is written and the dialog is proven — it opens, it lists
what it finds, and with nothing attached it says "No copier found on this
machine" and refuses to pretend. **The page transfer itself has never met real
hardware**, because the test machine has no scanner. That is the one thing left
before it is green.
## Why the ⛔ ## Why the ⛔
- **PDF-08, PDF-09** — the design failed an independent review on 2026-08-27 - **PDF-08, PDF-09** — the design failed an independent review on 2026-08-27
+25 -1
View File
@@ -11,7 +11,31 @@ reviewer's PASS are all evidence — none of them is a signature.
| 2026-08-27 | PDF-03 | 0.1 | `12 tonnes` no longer recoverable from the saved file; `19 tonnes` present; other lines intact | kua-agent | `pdftotext` before/after on the VM | | 2026-08-27 | PDF-03 | 0.1 | `12 tonnes` no longer recoverable from the saved file; `19 tonnes` present; other lines intact | kua-agent | `pdftotext` before/after on the VM |
| 2026-08-27 | PDF-06 | 1.7.5 | `.pdf` UserChoice ProgId + Hash unchanged; deny ACE intact; no helper binary | kua-agent | registry read before and after install and first open | | 2026-08-27 | PDF-06 | 1.7.5 | `.pdf` UserChoice ProgId + Hash unchanged; deny ACE intact; no helper binary | kua-agent | registry read before and after install and first open |
| 2026-08-27 | PDF-07…09 | 0.1 | **DESIGN-FAIL** — independent adversarial review, 3 blockers, 5 major, 3 minor | independent reviewer (separate agent, default-FAIL) | findings below | | 2026-08-27 | PDF-07…09 | 0.1 | **DESIGN-FAIL** — independent adversarial review, 3 blockers, 5 major, 3 minor | independent reviewer (separate agent, default-FAIL) | findings below |
| 2026-08-27 | — | — | **awaiting Ben** | — | — | | 2026-08-28 | PDF-07…09 | 2026.8.1 | rebuilt on the MMD design system Ben locked 02:25 UTC: one merged red bar, flat buttons, 4px corners, 24px window buttons, colours untouched | kua-agent | keyboard and mouse on mmd-win-test-01 at 800x600 |
| 2026-08-28 | PDF-14 | 2026.8.1 | Scan reaches a copier through WIA; dialog and the no-copier case proven, the page transfer is NOT — no scanner on the test machine | kua-agent | dialog opened by mouse; reports "No copier found on this machine" |
| 2026-08-28 | PDF-17 | 2026.8.1 | signed by CN=MMD Steel Group IT from mmd-fsn-01, DigiCert timestamp, Windows reports Valid | kua-agent | Get-AuthenticodeSignature on the guest |
| 2026-08-28 | PDF-18 | 2026.8.1 | published to Intune, offered to MMD-EUC-Pilot as available | kua-agent | committedContentVersion + assignment read back from Graph |
| 2026-08-28 | PDF-07 | 2026.8.1 | **three defects Ben found by looking at it** — fixed, see below | Ben | his own look at the running application |
| 2026-08-28 | — | — | **awaiting Ben** | — | — |
## What Ben found on 2026-08-28, and what was done
He looked at the running application and read it as still being the tool it was
forked from. Three things, all real:
1. **The upstream manual was what he saw first.** It sat in the repository root
as `MmdPdf.pdf` and on the test machine at `C:\src`. It was never in the
shipped payload — but the application restores the previous session, so once
it had been opened it came back on every start, a full-page upstream logo on
black. Removed and gitignored. *Not shipped is not the same as not on screen.*
It was visible in this project's own screenshots the day before and was noted
rather than fixed; that is why it reached him.
2. **Scan was in the window chrome**, beside minimise, maximise and close. It is
a toolbar button now, next to Print, captioned like every other tool.
3. **The footer read v1.7.5**, the upstream project's number. The application is
**2026.8.1**. Not 1.0: the pilot machines already carry a build numbered
1.7.5, and an upgrade has to sort above what it replaces or Intune reads it
as a downgrade.
## The design gate — OPEN ## The design gate — OPEN