Commit bcb9209
Blog feature image lint: require an approved PNG Software tag (#21094)
* Blog feature images: reject an untagged PNG in lint
The Software-tag allowlist in checkFeatureImageSoftware accepted "Figma",
our renderer's stamp, or *no tag at all* — the last one covering legacy
skill output from before compose_meta_image.py started stamping.
That allowance was the widest hole in the four feature-image checks: an
absent Software tag is the default output of every ad-hoc image writer
(Pillow, canvas, sips, ImageMagick, a headless-browser screenshot), so an
agent that hand-rolls a 1884x1256 image on a #231F33 backdrop passes the
dimension, background, and C2PA checks and then sails through this one
too. Verified against a hand-authored title card: it linted clean.
Drop the allowance and back-stamp the 36 pre-stamp renders instead, so
the tag is required rather than grandfathered. The stamp is inserted as a
tEXt chunk after IHDR with no re-encode — every one of the 36 decodes
pixel-identical to what it replaced, and all 811 blog meta cards still
render (satori/resvg reads them unchanged).
Also note the consequence for designers in the skill: a supplied image
that isn't a straight Figma export (re-saved elsewhere, or optimized with
metadata stripped) now fails lint, and the fix is to ask for the original
export — never to write a tag onto the file.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* Tag the one back-stamped designer image as Figma
pulumi-do-direct-resource-operations/feature.png is a designer image,
not a template render, so the renderer's stamp claimed something the
file can't back. It went out with the rest of the batch because it
carried no Figma tag to keep.
Comparing every back-stamped image against the templates outside their
catalog.yaml placeholder boxes puts 35 of the 36 on a template at
0.0000; this is the only one that isn't. Retag it Figma so the two
allowed values keep meaning what they say.
Pixels are untouched — the file still decodes identical to master.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>1 parent dd86ad3 commit bcb9209
39 files changed
Lines changed: 19 additions & 10 deletions
File tree
- .claude/commands/blog-feature-image
- scripts
- content/blog
- access-token-expiry-policy
- agent-sprawl-iac-platform-is-the-answer
- ai-infrastructure-tools
- announcing-openapi-support-pulumi-cloud
- best-terraform-alternatives
- bitbucket-vcs-integration
- claude-code-orchestration-frameworks
- cloudflare-first-networking-with-pulumi
- connect-any-git-server-to-pulumi-deployments-with-custom-vcs
- connect-your-cloud-accounts-to-pulumi-in-minutes
- dark-factory-pattern-pulumi-autonomous-iac
- deploy-a-hermes-agent-with-pulumi
- eks-vcluster-ephemeral-environments-with-pulumi
- end-to-end-databricks-with-pulumi
- esc-cli-retiring-use-pulumi-env
- expanding-pulumi-iam-custom-permissions
- fully-automated-ai-inference-aws-azure-gcp-pulumi
- getting-started-aks-pulumi-csharp
- how-building-ai-agents-has-changed
- incident-response-as-code-pagerduty-pulumi
- introducing-otel-tracing-in-the-pulumi-cli
- journaling-ga
- knowledge-as-code-the-memory-file-just-got-a-spec
- kubecon-eu-2026-recap
- neo-plan-mode
- neo-read-only-mode
- neo-usage-limits
- passkey-support-in-pulumi-cloud
- policy-packs-can-now-access-pulumi-esc-environments
- preview-esc-environment-changes-with-draft-references
- pulumi-do-direct-resource-operations
- scan-aws-govcloud-china-with-pulumi-insights
- self-host-gemma4-llama-cpp-k8s-tailscale-pulumi
- stop-prompting-design-the-loop
- stop-tuning-prompts-build-a-harness
- why-choose-pulumi-over-terraform
- scripts/lint
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
82 | 82 | | |
83 | 83 | | |
84 | 84 | | |
| 85 | + | |
| 86 | + | |
85 | 87 | | |
86 | 88 | | |
87 | 89 | | |
| |||
Lines changed: 4 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
308 | 308 | | |
309 | 309 | | |
310 | 310 | | |
311 | | - | |
312 | | - | |
313 | | - | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
314 | 315 | | |
315 | 316 | | |
316 | 317 | | |
| |||
Loading
Loading
Loading
Loading
0 commit comments