Proof Marks

The tools we draw with have typos, too.

Ten proofs against the software designers use every day, filed on GitHub by Kamalraaj Senthilkumar, product designer. Each galley sets out the original request, what the maintainers said, and a working specimen of the proposed behaviour that you can try for yourself.

Penpot 6 + 1 pull request · DeepSeek 2 · PostHog 1 · Codecademy 1

Kamalraaj Senthilkumar is a product designer who reads software the way a proofreader reads a galley: line by line, pencil in hand. These are the marks he sent back to the tools designers use, as GitHub issues and one pull request, most of them in February and March 2025.

Every galley sets out the request in brief, the maintainers’ reply in their own words, and the state of the thread as of 28 October 2026. Then comes the part that matters: a working specimen of the proposed behaviour. Flip between as set, how the tool behaved, and as marked, how the issue asked it to.

An independent contributor’s record. Not affiliated with, or endorsed by, Penpot, DeepSeek, PostHog or Codecademy; their names appear only to identify the projects. Specimens are small reconstructions written for this page, not code from those products.

Part I · six galleys and a pull request

Penpot

The open-source design and prototyping platform, built on open web standards. Most of the proofs went here, all in the first ten days of March 2025: history, navigation, colour, scale, naming and paths.

Frontispiece The promotional reel for Penpot embedded at the top of the repository’s README (43 seconds, with music).

penpot/penpot issue 6007

Selection that survives undo

Filed as “:bug: Selection State Not Saved in Undo/Redo Stack”

Closed · Completed27 April 2026

Undo puts the square back and forgetsrestores the selection.

Undo in Penpot restored what you had changed but not what you had selected, so every undo ended with a round of reselecting by hand. The issue asked for the selection to travel with each entry in the history stack: undo returns the selection from before the action, redo the one from after it. Kamal’s recording made the case with four coloured squares.

It was moved to Penpot’s Taiga backlog and labelled a good first issue for outside contributors. Two volunteered in early 2026, and the issue was closed as completed on 27 April 2026.

Specimen 1

Four squares, a history, and what undo selects

This specimen runs with JavaScript; the recording below shows the original problem.

Plate 1 From the issue: four squares are recoloured in Penpot, then the changes are undone, and the selection does not come back with them.

Thank you for the suggestion! We have added it to our backlog on Taiga to be considered in the future.

@madalenapmelo-kp on the issue, 30 April 2025

penpot/penpot issue 5996

Right-click to drag and zoom

Filed as “Enhance Right-Click Functionality for Drag and Zoom”

In Progressopen · linked to zoom work

Hold the right button and drag: the canvas sits stillpans.

The proposal folds navigation into the hand that is already on the mouse: hold the right button to drag the canvas, scroll while holding it to zoom, with no tool switch and no shortcut. The acceptance criteria kept the context menu reachable through a separate action, such as a long press.

Penpot linked the request to zoom improvements it already had planned, and labelled it in progress.

Specimen 2

A pasteboard you can pan with the right button

This specimen runs with JavaScript; the recording below shows the reference interaction.

Plate 2 The reference recording attached to the issue: a board of book covers dragged around the canvas.

We already have some improvements planned around the zooming functionality, I’ve linked this suggestion there as well so that it will be considered once we start working on it.

@madalenapmelo-kp on the issue, 5 March 2025

penpot/penpot issue 5986

Angular and diamond gradients

Filed as “Angular & Diamond Gradient addition in coloring”

Needs Definitionopen · WG adoption

Gradients: linear, radial, angular, diamond.

Penpot’s gradient editor offered two types, linear and radial. The request added an angular (conic) gradient that sweeps around a centre point, for pie charts, rings and circular progress, and a diamond gradient that radiates in a rhombus, for faceted highlights. Both had to render on the canvas and survive SVG and PNG export.

Penpot replied that both were already planned, pending other work then in development. The issue now waits on sign-off from the UX/UI team and belongs to the Adoption Working Group.

Specimen 3

A gradient editor with all four types

This specimen runs with JavaScript; the mock-up below shows the proposal.

Two gradient pickers side by side. The left one lists Linear, Radial, Angular and Diamond; the right one, Penpot’s, lists only Linear and Radial.
Plate 3 The comparison attached to the issue: a picker offering four gradient types beside Penpot’s, which offered two.

We already have both Angular and Diamond Gradients planned into our backlog, though it’s pending on other work which is currently under development.

@madalenapmelo-kp on the issue, 11 March 2025

penpot/penpot issue 6037

Scale points

Filed as “Add Scale Points (e.g., 1x, 2x) to Existing Scaling Feature”

In the Backlogopen · managed on Taiga

Scale the card to 1.37×2×, exactly.

Penpot already had a scale tool, its answer to the K key in Figma, but the drag stopped wherever your hand did. The request: offer scale points (0.5×, 1×, 1.5×, 2×) in a dropdown or overlay while scaling, plus a field for custom values, so resizing for responsive layouts lands on exact multiples.

Specimen 4

Scale a card by eye, or by the point

This specimen runs with JavaScript; the recording below shows the reference.

Plate 4 The recording attached to the issue: a scale value picked from a dropdown of fixed points in a design panel.

Thank you for the suggestion! We have added it to our backlog on Taiga to be considered in the future.

@madalenapmelo-kp on the issue, 11 March 2025

penpot/penpot issue 5984 pull request 5985

Incremental component names

Filed as “feature: Automatic Incremental component naming convention”

Openissue · since 1 March 2025

Not Mergedpull request 5985

Component 1, Component 12.

Penpot let two components share a name, so the layers panel could show two identical Component 1s side by side. The issue proposed unique, incrementing suffixes (Component-01, Component-02), meaningful bases such as Button-01 or Header-02, and a warning that blocks a duplicate name.

Kamal didn’t stop at the issue. The same day he opened a pull request, 48 lines across eight files with tests for name generation and uniqueness. Penpot declined it for now: the change collided with the variants work then under way.

Specimen 5

A layers panel that numbers its duplicates

This specimen runs with JavaScript; the screenshot below shows the duplicate names.

Penpot workspace with stacked blue rectangles. The layers panel and the canvas labels both show two components named ‘Component 1’, circled with red dashed boxes.
Plate 5 From the issue: two components both called Component 1, ringed in red in the layers panel and on the canvas.

It turns out this issue conflicts with something we are working on: variants. We still don’t know what the final solution will be; we may even end up doing it this way, but until we are sure, we will not make any changes in this regard.

@miryamgduque on the pull request, 6 March 2025

penpot/penpot issue 6040

Flatten selection

Filed as “feature: Add ‘Flatten Selection’ to Penpot”

Stetclosed · already in Penpot

Five shapes, flattened into five layersone path.

The request: merge the selected vector layers into a single layer, warn that the parts stop being separately editable, and offer to keep the originals for later. It argued for flattening over rasterising, which keeps the result scalable.

Sometimes a proof comes back marked stet, let it stand. The feature already existed, among Penpot’s boolean operations, and the issue was closed within hours.

Specimen 6

Flatten, with the safeguards the issue asked for

This specimen runs with JavaScript; the reference below shows a flatten command.

A selected group of crossing vector shapes with a dark context menu open beside it. The menu lists layer actions including Group selection, Frame selection and Flatten.
Plate 6 The reference attached to the issue: a context menu with Flatten among the layer actions.

Thanks for the suggestion! We already have the option to flatten selected layers, would this be the feature you were looking for?

@madalenapmelo-kp on the issue, 10 March 2025
Penpot’s Design tab with the boolean operation buttons; the last one is labelled Flatten.

Part II · two galleys

DeepSeek

Feature requests filed on the DeepSeek-V3 repository, about how an AI assistant could explain itself better: errors in plain words, and the ideas inside its own answers.

deepseek-ai/DeepSeek-V3 issue 710

A debugging bot, with a preview

Filed as “AI-Powered Debugging Bot”

Closed · Completed25 February 2025

Paste the error, get a stack tracea reason.

Stack traces and logs are hard to read, and developers lose hours to them. The request: let DeepSeek analyse an error, explain in simple terms what went wrong, and suggest a fix. In a follow-up comment Kamal added a second idea, a live preview of generated code like the one in ChatGPT’s canvas, with a screen recording to show it.

The issue was closed as completed the next day. There was no public reply on the thread.

Specimen 7 · a mock-up

An error, explained, with the fix and a preview

This specimen runs with JavaScript; the recording below shows the preview idea.

Plate 7 Kamal’s recording from his follow-up comment: generated HTML in ChatGPT’s canvas, with a Preview control to see it run.

deepseek-ai/DeepSeek-V3 issue 757

Explain the top topics

Filed as “Generating ‘Explain Top Topics’ Tokens for Enhanced User Engagement”

Not Plannedclosed as stale · 28 April 2025

The answer ends therewith leads.

A long answer buries its best threads. The request: after a response, offer “Explain topic in context” chips for its most relevant topics, carry on in a conversational format, let people ask about subtopics, and use feedback to keep the topics relevant.

No maintainer replied. A bot marked the issue stale after a month of quiet and closed it as not planned two weeks later.

Specimen 8 · a mock-up

Topic chips under an answer

This specimen runs with JavaScript; the mock-up below shows the chips.

A dark chat interface. Under a concluding paragraph about Vipassana meditation sit three outlined chips reading Explain ‘Top 01 Topic in context’, above the message box.
Plate 8 The mock-up from the issue: chips reading Explain “Top 01 Topic in context” under an answer, just above the message box.

Part III · two galleys

Sorts

In the composing room a sort is a single piece of type; run short of one and you are out of sorts. Two single proofs for two other presses: PostHog’s product analytics, and Codecademy’s open documentation.

PostHog/posthog issue 29694

One stroke weight for every icon

Filed as “Issue: Visual Inconsistency in Icon Stroke”

Opensince 10 March 2025

Icons drawn at threeone stroke weights.

A bug report on visual polish. In one PostHog menu, the Heatmaps icon was a solid shape while its neighbours, Actions, Feature Flags, Inspect and Web Vitals, were thin outlines, so the set read as two families. Inconsistent icon weight makes an interface look unfinished and weakens the brand; the fix suggested was to review the icon set and standardise one stroke weight.

The issue is open, with no labels or replies yet.

Specimen 9

Five icons, normalised

This specimen runs with JavaScript; the screenshot below shows the original icons.

A PostHog menu listing Heatmaps with a solid flame icon, and Actions, Feature Flags, Inspect and Web Vitals with thin outline icons.
Plate 9 The screenshot from the issue. The flame beside Heatmaps is filled; every other icon is a thin outline.

Codecademy/docs issue 6309

CSS colour, in context

Filed as “CSS Color Context Explanation”

Thread Unavailableissues since disabled

A colour judged on its ownin context.

Filed on Codecademy’s open-source documentation repository under the title CSS Color Context Explanation. Codecademy has since turned off issues on that repository, so the link no longer resolves and the thread’s text, date and outcome can’t be checked. The link is kept as a record, and this galley says no more than its title does.

The specimen therefore illustrates the title only: one CSS colour, judged in the places it will actually be used.

Specimen 10

One colour, four contexts

This specimen runs with JavaScript.

The ledger

Every proof on one sheet, as the threads stood on 28 October 2026. A static record, not a live feed.

Contributions with repository, number, title, dates, state and labels, as of 28 October 2026
GalleyRepositoryNo.TitleOpenedStateClosedLabels
1penpot/penpot6007Selection State Not Saved in Undo/Redo Stack2025-03-04closed · completed2026-04-27enhancement, managed on taiga, good first issue, community contribution
2penpot/penpot5996Enhance Right-Click Functionality for Drag and Zoom2025-03-04open–enhancement, in progress
3penpot/penpot5986Angular & Diamond Gradient addition in coloring2025-03-01open–needs definition, WG adoption
4penpot/penpot6037Add Scale Points (e.g., 1x, 2x) to Existing Scaling Feature2025-03-08open–enhancement, managed on taiga
5penpot/penpot5984Automatic Incremental component naming convention2025-03-01open–enhancement
5penpot/penpotPR 5985Incremental-Component naming-feature Addressing Issue #59842025-03-01closed · not merged2025-03-06–
6penpot/penpot6040Add “Flatten Selection” to Penpot2025-03-10closed · completed2025-03-10enhancement
7deepseek-ai/DeepSeek-V3710AI-Powered Debugging Bot2025-02-24closed · completed2025-02-25enhancement
8deepseek-ai/DeepSeek-V3757Generating “Explain Top Topics” Tokens for Enhanced User Engagement2025-03-10closed · not planned2025-04-28stale, closed-as-stale
9PostHog/posthog29694Visual Inconsistency in Icon Stroke2025-03-10open––
10Codecademy/docs6309CSS Color Context Explanationunknownunavailable––

The repository’s README links the first galley to penpot#600, someone else’s pull request from 2021. The issue it means is penpot#6007, which is the one used here.

Colophon

Set in IM Fell English, from the types Dr John Fell gathered for the Oxford press in the late seventeenth century, digitised by Igino Marini; EB Garamond, Georg Duffner and Octavio Pardo’s revival of Claude Garamont’s roman from the 1592 Egenolff–Berner specimen; and Courier Prime, Alan Dague-Greene’s typewriter face for screenwriters. Small capitals, old-style figures, ligatures and the manicule are the fonts’ own.

Proofreader’s marks in vermilion, guides in non-repro blue, on cotton paper by day and on the plate by night. Built by hand with HTML, CSS and a little JavaScript, no frameworks and no trackers; every specimen runs in your browser and nothing is sent anywhere. Thread states are a snapshot taken on 28 October 2026.