Repository navigation
icon: the agentic styles re-render brand marks in the material - #98
Merged
Merged
Conversation
A colour style used to stop at the drawn icons: a brand's coloured form was the same line mark recoloured to the owner's hex, byte-identical in every style directory. In the gallery that reads as a bug — pick Agentic Emissive with the Brands filter on and nothing changes, because nothing can. The three agentic styles now draw the marks too, pinned to the owner's own mark as the only reference. `hq` deliberately does not: a style restyles marks only if it defines `promptForBrand`, and hq leaves it undefined, so its brands stay the flat owner-coloured logo a first-release reader already has. What the prompt has to say, all of it learned from pilots: - The drawn-icon frame ends "never resemble a logo", which is backwards when the mark IS the subject. BRAND_FRAME replaces it with a tighter guard: reproduce this geometry, invert nothing, add nothing. - Name the hex INSIDE the material paragraph. "Its own colour" is not enough; the agentic register is strong enough that six of six pilot marks came back graphite until the hex moved into the material. - Say the mark is SOLID. Emissive drew neon outlines of hollow shapes otherwise, and npm came back with its counter inverted. - Emissive cannot carry a dark mark: 26 of the 111 are too dark to emit. Told to "glow in its own colour", GitHub came back glowing blue. emissionFor() now splits them — the colour itself, a lightened tint of it for the 4 that are dark but still hued (Slack, PayPal, Tumblr, XMPP), and neutral white for the 22 that are black with no hue to raise. A drawn mark derives like any other master and carries `made_by: both` (the geometry is the owner's, the surface is ours) with the owner's hex and hex_source kept. It writes no `svg`: a reader that found one there would show the flat mark and never the material. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ThreatCrush Security Scan23 finding(s) HIGH/CRITICAL: 4 | MEDIUM: 10 | LOW: 9
Snippets are redacted; ThreatCrush never prints matched credential material. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Anthony, on https://logicsrc.com/openicon?style=agentic-emissive&kind=brand : "why doesn't brands change?" … "stylinze brands too please".
They did not change because they could not. A colour style stopped at the drawn icons: a brand's coloured form was the same line mark recoloured to the owner's hex, written into each style directory. All 111 brand files were byte-identical across
hq,agentic-matte,agentic-machinedandagentic-emissive—github.webpwas the same 606-byte file in all four.What changes
The three agentic styles now draw the marks too, pinned to the owner's own mark as the only reference: same geometry, same colour, new surface.
hqdeliberately does not. A style restyles marks only if it definespromptForBrand; hq leaves it undefined and its brands stay the flat owner-coloured logo a first-release reader already has. That one optional method is the whole switch.What the pilots taught
Six marks (github, gitlab, npm, docker, figma, slack), redrawn after each change:
BRAND_FRAMEreplaces it with a tighter guard: reproduce this geometry, invert nothing, add nothing, no container it does not already have.brandColorswas never wired through the CLI. The prompt said "the mark is monochrome" and the model obeyed.emissionFor()splits them three ways: the colour itself (85), a lightened tint of the same hue for the 4 that are dark but still hued (Slack, PayPal, Tumblr, XMPP), and neutral white for the 22 that are black with no hue to raise (GitHub, Apple, OpenAI…).Manifest
A drawn mark derives like any other master and carries
made_by: "both"— the geometry is the owner's, the surface is ours — keepinghexandhex_source. It writes nosvg: a reader that found one there would show the flat mark and never the material.StyleFiles.made_bygains"both", which rule 8's vocabulary already allowed.Trademark note
This applies a material treatment to marks we do not own. Geometry, proportion and colour are held fixed and the owner's
hex/hex_sourcestay recorded, which is the most defensible form of it, but it is a change of posture from "a set does not redraw them" and some owners' brand guidelines forbid altering the mark. Flagged before building; Anthony asked for it twice.Verified
npm run typecheck: cleannpx vitest run test/icon.test.ts test/icon-hq.test.ts: 33 passed🤖 Generated with Claude Code