docs: product documentation, design working files, and the failed design review
Adds the required doc set under docs/mmd-pdf/ - PRD, feature backlog with status and sign-off per feature, screens with wireframes, test cases with the test data and the agent-tasking prompts, and the sign-off log. The sign-off log records the independent design review of 2026-08-27: DESIGN-FAIL, three blockers and five major findings, which is why every design feature in the backlog is blocked and the logo/token branch is unmerged. Design working files live in docs/mmd-pdf/design/ so the next agent can regenerate and re-render them. redplate.css there is the MMD shell design system lifted verbatim from the session that owns it - do not edit it. Also carries the session handover. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
# HANDOVER — MMD PDF (Windows PDF editor for staff)
|
||||
|
||||
**Written** 2026-08-27 15:18:53 +04 (11:18 UTC)
|
||||
**Session** mmd-projects-87 · **Repo** `gitea.baobab-ts.com/mmd-it/mmd-pdf`
|
||||
|
||||
---
|
||||
|
||||
## What this is
|
||||
|
||||
MMD staff had no sanctioned way to write inside PDF documents. PDFgear was
|
||||
blocked on 2026-07-20 for forging the Windows default-PDF registry setting.
|
||||
This session picked a replacement, proved it, forked it, and started turning it
|
||||
into an MMD product.
|
||||
|
||||
**MMD PDF** = GPL-3.0 fork of KillerPDF 1.7.5, staying GPL-3.0, `FORK-NOTICE.md`
|
||||
in the repo records what changed.
|
||||
|
||||
---
|
||||
|
||||
## What was done
|
||||
|
||||
### Chosen and proven (this part is solid)
|
||||
|
||||
- Surveyed open-source Windows PDF editors. **No MIT-licensed app does true
|
||||
inline PDF text editing** — the only genuinely MIT desktop option (every-pdf)
|
||||
can only stamp text on top of a page. KillerPDF (GPL-3.0) was picked; GPL
|
||||
restricts forking and redistribution, not internal deployment to staff.
|
||||
- **Passed the check that killed PDFgear.** `.pdf` UserChoice ProgId and Hash
|
||||
identical before and after install and after opening a PDF; the protective
|
||||
deny ACE intact; one signed executable, no helper binary. Read live from the
|
||||
registry on our own machine.
|
||||
- **Found and fixed a real defect.** Editing existing text left the original
|
||||
glyphs in the file — a delivery note corrected from 12 to 17 tonnes returned
|
||||
*both* figures from `pdftotext`. `Services/PdfRedactText.cs` now walks the
|
||||
page content stream, tracks the CTM and text matrix, and blanks every
|
||||
show-text operator whose origin sits inside the cover rectangle, before any
|
||||
new content is appended. Proven: after the fix the saved file contains only
|
||||
the new figure, every other line intact and still searchable.
|
||||
- **Built the test rig that found it.** `/opt/mmd-wintest/wintest` on the
|
||||
hypervisor: Xvfb + xfreerdp3 + xdotool, so every action is a real pointer or
|
||||
key event with no scripting back door. This is how user testing is done from
|
||||
now on.
|
||||
|
||||
### Dedicated Windows test machine
|
||||
|
||||
VM 203 on **mmd-fsn-03** renamed **mmd-win-test-01**, `onboot=1`, described in
|
||||
Proxmox. Windows Server 2022, 20 cores / 72 GB, guest 10.10.20.22. Its DNS was
|
||||
broken (no internet at all) — fixed. .NET SDK 8 installed for builds.
|
||||
It still also carries the Mali plant-station build, so it is shared.
|
||||
|
||||
### Design — failed review, not accepted
|
||||
|
||||
The rebrand and the new MMD shell design system ("red plate") were applied and
|
||||
merged **before any design existed**, which is the wrong order and Ben called
|
||||
it. Redone properly afterwards: design system pulled from the Claude Design
|
||||
project, red-plate stylesheet lifted verbatim from the session that owns it,
|
||||
seven screens composed at 800×600, then put through an **independent adversarial
|
||||
review** — the gate that was missing.
|
||||
|
||||
**Verdict: DESIGN-FAIL.** 3 blockers, 5 major, 3 minor. All eleven findings and
|
||||
the fix state are in `docs/mmd-pdf/SIGNOFFS.md`.
|
||||
|
||||
---
|
||||
|
||||
## Current live / verified state
|
||||
|
||||
| Thing | State |
|
||||
|---|---|
|
||||
| `main` | carries the rebrand + the redaction fix (PR #1, merged) |
|
||||
| `design/official-logo-and-tokens-20260827` | **bfb9845, pushed, NOT merged** — official logo + design-system values. Unaccepted: the design failed review. |
|
||||
| Build | `dotnet build -c Release`, 0 errors, on mmd-win-test-01 |
|
||||
| App | runs; opens, edits and saves correctly, keyboard-and-mouse tested |
|
||||
| Design | **DESIGN-FAIL**, no re-review run, no Ben sign-off |
|
||||
| Scanning | not written |
|
||||
| Signing / Intune | not started |
|
||||
|
||||
Claude Design project `446a3931-c345-48da-a3ac-246af02a2e52` ("Design System"):
|
||||
the repo's live CDS 0.3.40 was pushed into `mmd-portal/` (its mirror was stale
|
||||
at 0.3.11), and round-1 design pages into `mmd-pdf/`. **Round 2 was not pushed**
|
||||
— it failed review.
|
||||
|
||||
Two artifact links exist from before Ben's `/login` and are **dead**
|
||||
(`65c7726d…`, `e47d705f…`). Live under the current account:
|
||||
`7d8d6b56-ef36-4729-8e88-a3fb1392707e` (round-1 canvas) and
|
||||
`a7a974e8-aff4-49e6-b4cc-f80414769515` (status page). Both are round-1 and both
|
||||
predate the review — do not present either as reviewed.
|
||||
|
||||
---
|
||||
|
||||
## Resume steps
|
||||
|
||||
1. **Read** `docs/mmd-pdf/SIGNOFFS.md` for the eleven findings, then
|
||||
`BACKLOG.md` for what is ⛔.
|
||||
2. **Get Ben's toolbar pick** — A, B or C on the Directions board. The
|
||||
independent reviewer recommends **C** (three tabs; nothing hidden, every tool
|
||||
named). Nothing else in the design can be finished without it.
|
||||
3. **Apply the seven unapplied findings** — 1, 6, 7, 8, 9, 10, 11 — the big one
|
||||
being the rebuild of Main / EditText / PageRail / Nothing onto Direction C.
|
||||
Working files: `docs/mmd-pdf/design/build.py`, regenerate with `python3
|
||||
build.py`, render each `.dc.html` locally and look at it.
|
||||
4. **Re-run the independent review** with the prompt in
|
||||
`docs/mmd-pdf/TEST-CASES.md` under "To review a design". Give the reviewer
|
||||
the **complete** palette this time, including `#FAFAF8` and `#C9C6BC` — my
|
||||
incomplete brief caused half of finding 4.
|
||||
5. **Only after DESIGN-PASS**, publish the canvas and hand Ben the link for
|
||||
annotation. His annotation closes the gate; the reviewer's PASS does not.
|
||||
6. **Then** re-derive `Themes/MMD.xaml` from the signed-off design and merge
|
||||
`design/official-logo-and-tokens-20260827`.
|
||||
7. **Then** scanning (NAPS2.Wia, MIT, .NET Framework 4.6.2 — compatible with
|
||||
this net48 codebase), then signing, then Intune.
|
||||
|
||||
---
|
||||
|
||||
## Key facts, commits, addresses
|
||||
|
||||
- Repo `gitea.baobab-ts.com/mmd-it/mmd-pdf`; `main` = PR #1 merged;
|
||||
branch `design/official-logo-and-tokens-20260827` = **bfb9845**.
|
||||
- Hypervisor **mmd-fsn-03** — Hetzner dedicated, Falkenstein FSN1-DC16, auction
|
||||
#3049905, public 168.119.88.172, tailnet 100.64.0.19, Proxmox VE 9.2.10.
|
||||
Reach it with `ssh -i ~/.ssh/id_ed25519_mmd_fsn03_rescue root@100.64.0.19`.
|
||||
- Test machine **mmd-win-test-01** (VM 203), guest 10.10.20.22. Humans reach it
|
||||
in a browser at `https://plantpc.baobab-ts.com` (Guacamole, Entra SSO).
|
||||
- Source on the VM at `C:\src`; build output
|
||||
`C:\src\bin\Release\net48\MmdPdf.exe`; .NET SDK at `C:\build\dotnet`.
|
||||
- Graph for Intune/Entra: **MMD-CIO-Agent client secret** at
|
||||
`~/mmd-projects/entra-cio-agent/secret.env`, helper `graphlib.mjs`. The
|
||||
certificate in `~/.config/mmd/certs` is Exchange PowerShell only — do not
|
||||
reach for it and then conclude the agent lacks Intune access.
|
||||
|
||||
---
|
||||
|
||||
## Open items
|
||||
|
||||
- **Ben: pick the toolbar direction.** Blocks everything else in the design.
|
||||
- **Ben: the 16–24px app icon.** No official small MMD mark exists anywhere. The
|
||||
icon crops the lockup's baobab disc, which reads from 32px and is muddy below
|
||||
it. An agent must not draw a simplified one. Commission or accept muddy.
|
||||
- Seven design findings unapplied; no re-review run.
|
||||
- Scanning not written. Signing not started. Intune not started.
|
||||
- mmd-win-test-01's Windows evaluation licence — a restart reset it to 180 days,
|
||||
but it needs a real licence before it is a standing fixture.
|
||||
- Design round 2 not pushed to the Claude Design project (it failed review).
|
||||
|
||||
---
|
||||
|
||||
## Gotchas
|
||||
|
||||
1. **`Stop-Process` over WinRM against a running GUI app hangs the session.**
|
||||
Launch GUI apps with a *new* scheduled-task name instead.
|
||||
2. **`freerdp2-x11` does not exist on Debian 13.** It is `freerdp3-x11`, and the
|
||||
binary is `xfreerdp3`, not `xfreerdp`.
|
||||
3. **The word-mark was two literal `<Run Text="Killer">` elements**, not the
|
||||
product-name token — a global rename misses it. Check the title bar visually
|
||||
after any rename.
|
||||
4. **`redplate.css` belongs to another session.** It is lifted verbatim from
|
||||
their `build.mjs`. I edited it once chasing a review finding and reverted it.
|
||||
Do not edit it; raise a discrepancy with the owning session instead.
|
||||
5. **A `/login` mid-session orphans artifacts** published earlier under the old
|
||||
account. Republishing the same *file path* keeps mapping to the dead one —
|
||||
copy the file to a new path to claim a fresh URL.
|
||||
6. **`Ctrl+A` inside an inline text edit selects all annotations**, not the
|
||||
text. Use `End` + `BackSpace`. `Enter` commits, `Escape` cancels — the status
|
||||
bar now says so because both were guessed wrong.
|
||||
7. **Flatten is not redaction's friend.** It removes the old text by turning the
|
||||
page into a picture, destroying every searchable word. That is why the
|
||||
content-stream fix exists.
|
||||
8. **The design gate is not closed by a reviewer's PASS.** Only Ben's
|
||||
annotation closes it, and design that never went through the proper lane is
|
||||
an automatic fail however good it looks.
|
||||
Reference in New Issue
Block a user