Skip to content

feat: honest image backends, a visual QA loop, and Iris as persona #17 - #16

Merged
d6veteran merged 6 commits into
mainfrom
claude/image-generation-proposals-jx8yav
Jul 28, 2026
Merged

feat: honest image backends, a visual QA loop, and Iris as persona #17#16
d6veteran merged 6 commits into
mainfrom
claude/image-generation-proposals-jx8yav

Conversation

@d6veteran

@d6veteran d6veteran commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Implements proposals 1, 2, and 5 from docs/proposals/image-generation.md, then formally closes out 3 and 4 based on what the implementation revealed. The proposal doc is included as the first commit and its status header records every decision.

Why

profiles/kai.md claimed image tooling the product never installs: Hugging Face MCP dynamic_space with FLUX.1-Krea-dev, Qwen-Image, and FLUX.1-Kontext-Dev, plus four Figma MCP tools. install.sh copies profiles, agents, and commands and never installs or checks an MCP server. No Claude model generates raster images either, so Kai's real ceiling was markup it writes itself. The persona described tools that were not there and then improvised.

What shipped

Proposal 1, honest capability boundary (persona behavior only; the claude-team doctor command was declined). Domain Expertise is backend agnostic, and a new "Declare the Backend" behavior requires naming the backend before promising an image, or saying none is connected and offering what is actually deliverable.

Proposal 2, visual QA loop. Open the artifact and inspect it before showing it: score against named criteria, name the single worst failure, revise one thing, up to three passes. Claude is multimodal on input, so this needs no vendor.

Proposal 5, split the lane. Iris — Brand & Illustration (#17, claude-opus-4-8) owns logos, wordmarks, icon sets, illustration, marketing graphics, and asset licensing. Kai keeps screens, layout, and design systems, and specifies the assets a screen needs rather than generating them. The QA loop split along its seam rather than being deleted: Kai kept the render-and-screenshot half, Iris took the generated-asset half. Both personas ended at four behaviors.

What was dropped, and why

Proposal 3 (a checked-in BRAND.md + assets/MANIFEST.md + claude-team brand init) is dropped. Two of its justifications did not survive checking:

  • It claims brand init would mirror branch start and session start. Those write exclusively to ~/.claude/. This CLI has never written a committable file into a user's working tree; its only project writes are .git/hooks/pre-commit and .git/info/exclude, both untracked by design.
  • It claims to unblock the repo's "missing" publish/style-guide.md. That file was deliberately deleted in 04ace9e ("consolidated to code-katz/style-guide.md"), so re-adding a per-repo brand file re-introduces what was removed on purpose.

Half of it had also already shipped inside Iris's Brand Brief and Asset Provenance Record, and "persona names an artifact the repo does not define" is the established convention here (Kai and Sasha have pointed at DesignSystem.swift with no schema since they were written). Accepted tradeoff, stated in the doc: Iris keeps improvising a manifest shape per project.

Proposal 4 (wire a backend) is folded into Proposal 6 (companion skill) rather than shipped here. They were decomposed as two items and should not have been. A vendor MCP matrix in this repo would be documentation the project does not control, drifting on someone else's release schedule, and it breaks the convention that every companion capability (devlog, roadmap, plans, todo, publish, conductor) lives in its own repo while "Works Well With" stays one line and a link. Backend mechanics also serve Reiner, Ernie, Toni, and Kai, not only Iris.

Prior art for that skill is recorded in the doc. The load-bearing finding: neonwatty/logo-designer-skill generates SVG concepts with no image backend at all, which means the vector-mark problem needs no vendor. Iris now routes by asset class accordingly, treating hand-authored SVG as the primary path for logos and icons rather than a consolation prize, with a connected backend needed only for raster illustration.

Test hardening

CI ran shellcheck and the suite on two platforms, but never ran generate-agents.sh and never compared agents/ to profiles/ — the count check only counted files. A profile edited without regenerating passed green while the subagent served stale text. The same hole existed for hand-maintained commands/.

Both are now checked per persona. Verified they fail on a deliberately unregenerated profile (stale: robin(1), drift: robin(1)) and pass once restored. Also adds the missing claude-team list assertion for Sage.

Verification

  • bash tests/run.sh — 128/128, up from 123
  • shellcheck on all five CI-linted files — clean
  • grep -rn "Recraft\|Gemini\|Hugging Face\|Canva\|FLUX" profiles/ commands/ agents/ — no vendor names in persona content
  • 17/17/17 across profiles/, commands/, and agents/

Notes for review

  • No "Works Well With" row was added for the image skill: that repo does not exist yet, and linking a nonexistent tool is the same class of bug this PR set out to fix.
  • Prior-art licenses could not be verified in-session (api.github.com 403s through the proxy). The doc flags them as look-don't-copy until checked.
  • Left as history: README.md:853 (v0.5 release notes) and the DEVLOG.
  • Already stale before this work and untouched: gtm.md:416, commands/silicon-valley.md.

claude added 3 commits July 28, 2026 16:42
Kai claims Hugging Face and Figma image tooling in profiles/kai.md, but
install.sh never installs, checks, or mentions an MCP server. Combined
with the fact that no Claude model generates raster images natively, the
persona confidently promises a capability the install does not deliver.

Adds docs/proposals/image-generation.md: separates the three asset
classes (vector marks, illustrative raster, composed layouts), documents
the July 2026 backend landscape including the Canva Enterprise gate on
brand kit autofill, and lays out six proposals from a zero-dependency
visual QA loop through a possible Illustrator persona.

No code or persona changes; review artifact only.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTC8r2xtQrke5zzXYLmhfM
Kai claimed image tooling the product never installs. profiles/kai.md
named Hugging Face MCP dynamic_space with FLUX.1-Krea-dev, Qwen-Image,
and FLUX.1-Kontext-Dev, plus four Figma MCP tools. install.sh copies
profiles, agents, and commands and never installs or checks an MCP
server, so the persona described tools that were not there and then
improvised. No Claude model generates raster images either, which makes
the ceiling markup Kai writes itself.

Proposal 1, honest capability boundary. The Personality paragraph now
states the boundary directly, the Domain Expertise bullets are backend
agnostic, and a new "Declare the Backend" behavior requires Kai to name
the backend before promising an image, or say none is connected and
offer the SVG path instead.

Proposal 2, visual QA loop. New behavior requiring Kai to open and
inspect any asset or mockup before showing it, score it against named
criteria, name the single worst failure, revise one thing, and repeat up
to three passes. Claude is multimodal on input, so this needs no vendor.

README Kai section updated to match. The v0.5 roadmap entry keeps its
original wording as a historical record. commands/kai.md carries the
prose edits only; it excises Required Interactive Behaviors by
convention, 16 of 16.

Tests 123/123.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTC8r2xtQrke5zzXYLmhfM
Proposal 5 from docs/proposals/image-generation.md. Kai was carrying two
jobs that share a vocabulary but not a skill set: designing screens, and
producing the brand assets those screens display. Splitting them gives
each a real lane.

Iris — Brand & Illustration owns logo systems, wordmarks, icon sets,
illustration, marketing graphics, and the licensing and provenance that
come with generated assets. Four behaviors: Declare the Backend, Brand
Brief, Visual QA Loop, Asset Provenance Record. Tier claude-opus-4-8,
matching Kai.

Kai keeps screens, flows, wireframes, device-frame mockups, and design
systems, and drops to four behaviors. The Mood Board Prompt and Declare
the Backend move to Iris; the QA loop splits along its seam, with Kai
keeping the render-and-screenshot half for mockups and Iris taking the
generated-asset half. Kai now specifies the assets a screen needs and
hands off to Iris rather than generating them.

Roster plumbing: tiers.conf, both coordinator profiles (four enumeration
blocks each), README roster table and persona section and project
structure, plugin.json, install.sh, and the CLI listings.

Two new guards in the suite. CI never runs generate-agents.sh and never
compared agents/ to profiles/, so a profile edited without regenerating
passed green while the subagent served stale text; the same hole existed
for hand-maintained commands/. Both are now checked per persona. Verified
they fail on a deliberately unregenerated profile and pass once restored.
Also adds the roster assertion for Sage, which was missing.

Tests 123 to 128, all passing. Shellcheck clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTC8r2xtQrke5zzXYLmhfM
@d6veteran d6veteran changed the title docs: proposals for quality image generation in the design lane feat: honest image backends, a visual QA loop, and Iris as persona #17 Jul 28, 2026
claude added 3 commits July 28, 2026 18:03
Auditing proposal 3 (a checked-in BRAND.md plus assets/MANIFEST.md and a
claude-team brand init command) found two justifications that do not
survive checking. It claims brand init would mirror branch start and
session start; those write only to ~/.claude/, and the CLI has never
written a committable file into a user's working tree. It claims to
unblock the repo's missing publish/style-guide.md; that file was
deliberately deleted in 04ace9e and consolidated to an org-level
location. Half of it had also already shipped inside Iris's Brand Brief
and Asset Provenance Record, and "persona names an artifact the repo does
not define" is the established convention (Kai and Sasha have pointed at
DesignSystem.swift with no schema since they were written).

Proposal 4 is folded into proposal 6 rather than shipped here. A vendor
MCP matrix in this repo would be documentation the project does not
control, and it breaks the convention that every companion capability
lives in its own repo while Works Well With stays one line and a link.
Backend mechanics also serve Reiner, Ernie, Toni, and Kai, not just Iris.

Prior-art research recorded for that skill. The load-bearing finding:
neonwatty/logo-designer-skill generates SVG concepts with no image
backend at all, which means the vector-mark problem needs no vendor.
Iris now routes by asset class accordingly, treating hand-authored SVG as
the primary path for logos and icons rather than a consolation prize,
with a connected backend needed only for raster illustration. No vendor
names remain anywhere in persona content.

Also fixes two stale spots found in the audit: README credited Kai with
image generation across five named vendors, contradicting his own
profile, and his security bullet still referenced sanitizing generation
prompts. The v0.5 roadmap entry keeps its wording as history.

Tests 128/128, shellcheck clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTC8r2xtQrke5zzXYLmhfM
…onas

Resolves the DEVLOG conflict by keeping both 2026-07-28 entries, and
updates this branch's entry, which had gone stale: it still said
proposals 3, 4, and 6 were open after the later commit dropped 3 and
folded 4 into 6.

The merge also surfaced a real bug, caught by the drift guard this branch
adds. The upstream first-principle commit updated profiles/ and agents/
for Akira, Alex, Jordan, Morgan, Robin, and Sasha, but not commands/.
"## First Principle" sits above "## Personality", outside the Required
Interactive Behaviors block that commands/ legitimately excises, so all
six slash commands were missing it. Anyone running /akira would have got
a persona without the principle while the subagent had it. Now synced,
matching each profile's placement.

That is the guard's first real catch, on a bug it was not written for.

Tests 128/128, shellcheck clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QTC8r2xtQrke5zzXYLmhfM
@d6veteran
d6veteran marked this pull request as ready for review July 28, 2026 18:39
@d6veteran
d6veteran merged commit 541b3c0 into main Jul 28, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants