Author SHA1 Message Date
kua-agentandClaude Opus 5 87649cd77f docs: record the 2026-08-28 round and what Ben found
Sign-off log gains the design-system rebuild, the scan work, signing from
mmd-fsn-01 and the Intune publish, then the three defects Ben found by looking
at the running application and what was done about each.

Backlog: PDF-07, PDF-08 and PDF-09 go green (built, run and looked at on the
test machine at 800x600), PDF-17 and PDF-18 go green (signed, published), and
PDF-14 goes amber with the reason stated plainly - the copier conversation and
the dialog are proven, the page transfer has never met real hardware.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 04:36:06 +00:00
kua-agentandClaude Opus 5 a351e8e9a0 fix: stop shipping the upstream manual, move Scan to the toolbar, MMD version
Three things Ben saw on the running application that all read as "this is still
the tool it was forked from".

1. The upstream 50-page manual was sitting in the repository root as MmdPdf.pdf,
   so it was the document on screen whenever it was opened or restored from the
   last session - a full-page green upstream logo on black. It was never shipped
   in the payload, but it was there to be opened, which is the same thing to
   whoever is looking at the screen. Removed, and added to .gitignore so it does
   not come back with a source drop. With no document, the application opens on
   its own empty view.

2. Scan was in the title bar beside minimise, maximise and close. That is window
   chrome, not a tool. It is a toolbar button now, next to Print in the file
   group, with a caption in every label mode like every other tool. The band
   button style it used has no other user and is gone with it.

3. The footer read v1.7.5, which is the upstream project's version. MMD PDF 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 would read it as
   a downgrade. The Intune detection rule moves with it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 04:24:59 +00:00
kua-agent 29850c364a One merged MMD band, Scan in the main bar, shorter icon row, signed and Intune-ready (#3) 2026-08-28 03:26:28 +00:00
kua-agent 2cc2f1b627 Merge pull request 'MMD PDF: rebrand, single corporate theme, and real removal of edited text' (#1) from feat/mmd-pdf-rebrand-20260827 into main
Verified live on mmd-win-test-01 by keyboard-and-mouse test: edited value replaces the original in the saved file and the old value is no longer recoverable.
2026-08-27 05:37:41 +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