Skip to content

UI/UX designer seller: the model designs, the review pipeline is tooling - #989

Open
maxy-player wants to merge 12 commits into
MakePrisms:mainfrom
maxy-player:w/ui-ux-designer-seller
Open

UI/UX designer seller: the model designs, the review pipeline is tooling#989
maxy-player wants to merge 12 commits into
MakePrisms:mainfrom
maxy-player:w/ui-ux-designer-seller

Conversation

@maxy-player

Copy link
Copy Markdown
Contributor

What this is

A runnable UI/UX designer seller package, not a persona file. A real model harness, driven
through maxplayer's own local driver, is handed a natural-language brief and authors the design
itself
— then renders it, inspects its own screenshots, and audits its own accessibility.

This is the corrected round. The previous revision was rejected because its "designer" could only
accept a supplied candidate and rewrite it deterministically — it could not create a design. That
pipeline is retained here but demoted to tooling.

The gate

cd sellers/ui-ux-designer
cargo build -p maxplayer --features acp --release   # from repo root; required by check 3
npm ci
bash scripts/smoke.sh

Last verified run: 9 checks run, 0 failed, SMOKE GATE PASSED.

Expect several minutes — the gate spends a real model turn letting the agent design something.

The generative path (check 3)

briefs/nova-status-brief.md is prose, phone-first, with red/green-colour-blindness and
screen-reader constraints. No candidate implementation is supplied or present in the tree. The
model must author status.html, render it, read the tool output, and iterate to zero accessibility
violations at both viewports.

It runs through the actual maxplayer local driver — no relay, wallet, sats, or deployment. The
stock release refuses this path (maxplayer run requires rebuilding with the acp feature), so the
binary is built from source.

From the passing run (runs/generative-smoke/summary.json, verdict PASS, failures: []):

Evidence Result
Driver exit 0, job.execution_changed → completed
Deliverable status.html authored by the model, ~14 KB, not byte-identical to anything shipped
Agent-invoked tools shoot.mjs true, a11y.mjs true
Accessibility, desktop 0 violations, 15 passes, 63 rules, axe-core 4.11.4
Accessibility, mobile 0 violations, 15 passes, 63 rules, axe-core 4.11.4
Load proof HTTP 200, title "Nova service status", 225 elements
Screenshots desktop 122,207 B, mobile 291,881 B, both content-asserted

agent/design-run.mjs refuses to report success without evidence: the run must finish, the
deliverable must exist and be non-trivial, the driver log must show the agent invoking the
tools, and the agent's own axe JSON must show a real page load and zero violations at both
viewports. --verify-only re-checks finished evidence without spending another model turn.

Harness — probed, not assumed

Presence on PATH is not availability, so each adapter was driven over ACP stdio:

Adapter Model answered Verdict
claude-agent-acp no refused: errorKind: rate_limit, org monthly spend limit — reproduced twice, an hour apart
codex-acp yes usedgpt-5.6-sol, stopReason: end_turn, non-zero output tokens
claude-code-acp, cursor-agent, cursor-agent-acp, goose absent

Detail in sellers/ui-ux-designer/evidence/RUNTIME.md.

Four negative controls, each of which must exit nonzero

  • an empty page that axe scores as 0 violations is rejected by the load-proof guard;
  • a 404 URL yields no screenshot;
  • two identical images fail a required-change diff;
  • a generative run whose status.html has been deleted is not reported as a pass.

A gate that cannot fail proves nothing.

A detector bug worth recording

The first generative run passed on the merits, yet the gate failed it, claiming the agent "never
rendered its design". The driver writes two streams: events.jsonl nests its type under
.payload and never carries tool calls, while the ACP tool calls and turn_ended arrive on driver
stdout. Reading only the first produced a confident false accusation against correct work. The
gate now reads both.

Limitations (not exhaustive — see report §7)

  • No live relay, wallet, sats, mint, or seat. Seller registration, job-claim, delivery and
    payment remain entirely unexercised. This proves the agent and its tools, not that the seat earns.
  • Output varies between runs; the gate is not deterministic and costs real model tokens.
  • Single harness in practicecodex-acp alone. If that account hits its limit the check fails
    loudly rather than falling back to deterministic execution.
  • No human designer has judged the output. Zero automated violations is a floor, not taste.
  • Docker sandbox mode untested; the design identity "Plainsong" is proposed, not adopted.

Holds observed

No wallet, no sats, no paid service, no new subscription, no production deployment, no merge, no
tag, no push to main. Delivery is a branch on the fork plus this PR. Git identity was set
per-command; git config was never run.

w-ui-ux-designer-seller added 12 commits September 8, 2026 20:20
…+ measured contrast ledger, licensed reference corpus
… rationale, smoke gate with negative controls and external manifest verification
…l driver

claude-agent-acp is refused at prompt time by a standing org spend limit
(probed twice, an hour apart). codex-acp answers: gpt-5.6-sol, end_turn,
non-zero output tokens.

Driven through the ACTUAL maxplayer local driver built from this tree
(0.5.8 e72e9bd, --features acp; stock 0.1.0-rc.3 refuses the run path):
the model wrote hello.txt=PONG on disk, exit 0, 18 events, turn_ended
completed. No relay, wallet, sats or deployment.

Adds the natural-language Nova status-page brief with NO supplied
candidate, for the corrected gate to hand the agent.
Corrects the e72e9bd verdict. agent/design-run.mjs hands a natural-language
brief with NO supplied candidate to a real model harness through the ACTUAL
maxplayer local driver, and refuses to report success without evidence:

  - the run must finish (job.execution_changed completed / turn_ended);
  - status.html must exist, be non-trivial, and not be byte-identical to
    anything this repo ships;
  - the driver log must show the AGENT invoking shoot.mjs and a11y.mjs;
  - the agent's own axe JSON must show a real page load and zero violations
    at desktop AND mobile.

First live run: 358.5s, 444 job events, 47 tool calls, model authored a
14942-byte status.html plus DESIGN-NOTES.md, screenshotted both viewports and
audited itself to 0 violations / 15 passes each (axe-core 4.11.4, 225
elements, title 'Nova service status').

Two streams, not one: events.jsonl nests type under .payload and never
carries tool calls; the ACP session updates and turn_ended are on driver
stdout. Reading only the first made this gate accuse a passing run of never
rendering anything. It now reads both, and --verify-only re-checks finished
evidence without spending another model turn.
Check 3 is now the model authoring a design from a natural-language brief with
no candidate supplied; the deterministic review pipeline moves to 3b, explicitly
labelled tooling. Adds a fourth negative control: a generative run with its
deliverable deleted must not be reported as a pass, proving the check reads real
artifacts rather than trusting its own summary.
… run

Full gate green end to end: 9 checks run, 0 failed. The generative check
verdict is PASS with an empty failures array, and all four negative controls
exited nonzero as required, including the new one that deletes a generative
run's deliverable and must not be reported as a pass.
Report and README now lead with what the package actually is: a model
harness that authors designs, driven through maxplayer's own local driver,
with the deterministic review pipeline demoted to tooling.

Records the harness probe honestly (claude-agent-acp refused by a standing
org spend limit, codex-acp used), the acp-built binary prerequisite, the
passing 9-check gate, and the detector bug that once failed a run that was
correct on the merits.

New limitations stated rather than buried: output varies between runs, the
gate is not deterministic and costs real tokens, it rests on a single
harness account, and no human designer has judged the output.
@vercel

vercel Bot commented Sep 9, 2026

Copy link
Copy Markdown

Someone is attempting to deploy a commit to the MakePrisms Team on Vercel.

A member of the Team first needs to authorize it.

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.

1 participant