Skip to content
Wishdeal Factory Commission a build
Wishdeal Factory
Working memory · what the studio remembers

Lessons accumulated tick by tick.

Every entry below gets injected into the Director's prompt at the start of each tick. This is the persistent working memory of the studio: failure modes that bit it, decisions that worked, action-letter rules, file-path conventions. 212 lines deep.

Director lessons. 2026-04-30

These lines are designed to be injected into the next Director PROMPT_EOF

template. They encode what was learned during the first day of operation.

For inclusion under "Rules" in the Director prompt

If 3 or 4 of them share a decision letter, you are FORBIDDEN from

picking that letter this tick. Diversify across A-H.

ELAPSED_MIN is over 360 of an 8h window, prefer light cheap actions

(E append_to_changelog, G cross-page improvements, H marketing

collateral) over heavy ones (A new page, C new MVP shell). Heavy

actions will not finish before the loop runs out of budget.

existing artifact" have strictly higher quality leverage than F

"sub-page expansion" once the micro-site is up. The first run

picked F four ticks in a row. If F is your impulse, ask: is there

a polish demand from a critic round I have not yet shipped? That

is decision B.

/srv/sites/factory/ (Caddy serves from here). Do NOT write to

/home/ubuntu/factory/builds/ or /home/ubuntu/factory/sc-insights/.

Those are legacy paths.

artifact with the same Claude model and the same prompt, stop.

Round 3 should be a Foreman pass (corpus-comparative). Round 4

should be a Codex pass (cross-LLM perspective). Pure Claude

rounds 3+ have diminishing returns; we measured this on the

/factory/ elevation session.

For inclusion under "Action menu" in the Director prompt

Add to the menu (not yet in PROMPT_EOF):

I. spawn_foreman_pass: invoke /home/ubuntu/factory/director/foreman.sh

<target_url> <local_file_path>. Returns demands rooted in Wes's

12-site reference corpus. Use after a build has shipped at least

one critic round but before round 3.

J. verify_links: scan a directory for href values, check each returns

200, append a report. Critic round 1 caught href="#" placeholders

that no agent has yet fixed.

K. embed_real_screenshot: write to a build's hero a real screenshot

from a captured artifact (the 7am brief email body, the admin

dashboard mock). Multiple critic rounds demanded this and it was

never shipped.

For inclusion under "Cadence"

Replace 30-minute fixed cadence with adaptive:

TICK_DURATION = end - start

SLEEP = max(120, 900 - TICK_DURATION)

This caps inter-tick sleep at 15 min, floors at 2 min. Roughly

doubles ticks per 8h window.

Lesson added 2026-05-01: per-product brand identity

When picking action C (new MVP shell) or action B (polish an existing build),

each product must have its OWN visual identity, not the studio template.

Specifically:

reusable studio look. That makes products feel like sub-pages of one

website rather than independent businesses. Wes flagged this on day 1

and we de-tentacled AfterHours and Tideline as the experiment.

codes), a Google Fonts typography pairing chosen for the audience

(slab-serif Bitter for service businesses, Space Grotesk for SaaS

founders, Plus Jakarta Sans for friendly tech, etc.), and a one-line

voice description.

before writing the index.html. Read it back when the next polish action

fires on the same slug.

Factory / Builds / About / How-it-works / Methodology - those are studio

concepts, not customer concepts. Use product-only nav (Pricing, FAQ,

Case Studies, Get Started, etc.).

is acceptable. Nothing more visible than that.

as concrete examples of "de-tentacled" products. See lawfirm-ai, repo-scanner,

solo-analytics for the studio-branded control group still pending rebrand.

Lesson added 2026-05-01: category diversity (not just action diversity)

The breadth gate forces action C every 3 ticks, which works for action variety.

But on day 2 it produced 9 MVPs in a row that were all "AI tool for freelancers"

(brief-ai, contract-ai, estimate-ai, handoff-ai, intake-ai, invoice-ai, proposal-ai,

retainer-ai, scope-ai). Cross-product cannibalization is real: Brief AI and Proposal

AI are essentially the same product. We diversified action letters but not concept

categories.

When picking action C, before committing to a slug:

1. Look at the existing /srv/sites/factory/builds/ directory. List the slugs.

2. Categorize them by thematic root: e.g. "freelancer AI tools", "service business AI",

"SaaS dev tools", "legal AI", "analytics".

3. If 3+ existing slugs share a thematic root, the next C action MUST pick a runner-up

from a DIFFERENT category. If no different-category runner-up is in the picks file,

trigger action J (mine fresh ideas) instead, or pick a deeper expansion of an

existing strong product (action F or H) on a non-saturated slug.

4. Save a one-line note in the brand brief about which thematic root this product

belongs to so future ticks can avoid the cluster.

Concept diversity matters more than action diversity. A studio with 9 freelancer-AI

products and 0 other categories is a category bet, not a portfolio.

Lesson added 2026-05-03: archived paths are intentional, not missing

When the Director scans the filesystem and notices that /factory/about/ or

/factory/methodology/ or /factory/how-it-works/ does NOT exist as a directory

under /srv/sites/factory/, do NOT treat that as "missing micro-site page" and

rebuild it via action A. These paths were INTENTIONALLY archived to

/srv/sites/factory/_archive/ on day 2 because they were studio narcissism

(meta-pages about the studio that customers do not care about).

The studio site is now intentionally minimal: only /factory/, /factory/builds/,

/factory/log/, /factory/concepts/, /factory/calibrate/ are first-class.

Everything else under /factory/ that is missing is missing on purpose.

If you are tempted to rebuild a meta-page about the studio, instead pick action

B (polish an existing artifact), F (sub-page on an existing product), or K/L/M

(marketing collateral on an existing product). The studio meta-pages are

permanently archived; do not regenerate them.

Lesson 2026-05-03: ratings inform priority

Wes maintains ratings at /home/ubuntu/factory/director/ratings.json. Tiers:

pursue, curious, shelf, not-for-me. When picking action B (polish),

F (sub-page), K/L/M (collateral), strongly prefer Pursue and Curious

products. Avoid spending ticks on Not-for-me products unless every

other product is fully developed. Shelf products get baseline polish

only (no new sub-pages, no new collateral). Never delete or archive a

product based on rating; ratings are organizational, not destructive.

The state context surfaces a TIER_VIEW block that lists every product

slug with its current tier. Use it. Wes's calibrate page lives at

https://wishdeal.com/factory/calibrate/ and writes to ratings.json via

POST /factory/api/rate. The gallery at /factory/builds/ now sorts

Pursue first, then Curious, then unrated, then Shelf, then Not-for-me,

and shows a colored tier chip on each card.

Lesson queued 2026-05-03: cross-product pattern inference (waits on ratings)

Once Wes has rated 5+ products via /factory/calibrate/, the system should

detect what Pursue products share (palette restraint, copy density, archetype,

pricing band) and apply those patterns when generating new products. The

brand-brief generator should read the manifest of Pursue products in the

state context and bias new briefs toward their characteristics.

This lesson is on hold until ratings.json has at least 5 entries with tier=pursue.

Until then, the brand-brief generator continues to pick palette and archetype

from product category alone (no preference signal from Wes).

Implementation note for the future: in regen-gallery.py, after computing the

products list, also export an inferred_pursue_patterns.json that summarizes

common attributes of Pursue tier products. Director state context reads

this and includes it in the brand-brief generation prompt.

Lesson 2026-05-03: Validation data informs scoring

When validation.json shows real reply rate >5% on a product, treat that as

evidence the idea is real. Future picks should weight that product's category

higher. When reply rate is <1% across 50+ outreach attempts, the category

is wrong; deprioritize that product cluster.

Lesson 2026-05-03: Closer audit informs depth ticks

When picking action F (sub-page), K (drip), L (outreach), M (demo), prefer

products where sales-readiness score is below 70. Read /home/ubuntu/factory/

director/sales-readiness.json for current scores and which axes scored low.

The findings note tells you what to fix first.

Lesson 2026-05-03: External benchmark distinct from internal critique

Foreman demands and Closer audits are internal-lens (compared to Wes's reference

corpus or sales-readiness checklist). External-Eye Critic in

/home/ubuntu/factory/director/external-critique.json compares to YC/PH/IH

benchmarks. When both critique sources flag the same gap, ship the fix

immediately - that's a high-confidence improvement. When they disagree, defer

to External (strangers don't know our internal corpus).

Lesson: Action O (Buyer-Voice Skeptic) is the only non-self-referential signal

Every other action grades the studios output (Foreman, External-Eye, Closer). Action O role-plays a real-named ICP reading the page and writes a first-person memo with a verdict (dismissive / on-the-fence / curious-enough-to-reply). Pick O when:

Do NOT pick O on products whose homepage was modified in the last 5 minutes (workers using). Skeptic memos live at /srv/sites/factory/builds/<slug>/skeptic-memos/.

Lesson: Action P (mine_wes_world) generates ideas FROM Wes context

The Wes-Aware Miner reads /home/ubuntu/factory/director/wes-context.md and produces 8 ideas tightly fitted to his stack, customers, and power zones (lead-gen, data-enrichment, appointment-setting). Items are tagged source="wes-aware" in the inbox so the scorer treats them normally. A daily cron at 8:30 AM also runs this, so do not pick action P if the days log already exists at /home/ubuntu/factory/logs/wes-miner-<date>.log.

Lesson: Action Q (spawn_elevator_pitch) is for short punchy audio

Brand pitch (existing pitch.mp3) is 300-450 words at voice d8a134 (the established brand voice). Elevator pitch (elevator.mp3) is 90-110 words at voice 933563129e... (a different voice so listeners can tell them apart audibly). Both can coexist on the gallery card. The credentials live in /home/ubuntu/factory/director/.fish-env (chmod 600). Do not pick Q on a product whose homepage was modified in the last 5 minutes.

Lesson: Similarity guard runs before every Action C build

A pre-flight similarity check fires for every new product (when no brand-brief exists yet) at /home/ubuntu/factory/director/similarity-check.sh. It compares candidate title+summary against all existing builds and returns one of: build / variant_landing / skip. The guard distinguishes same-engine-same-audience (skip - dilution) from same-engine-different-audience (variant_landing - acceptable; tag relationship in /home/ubuntu/factory/director/variants/<slug>.json). A skip aborts the action mid-tick and logs to /home/ubuntu/factory/director/duplicates/<slug>.json. If a candidate keeps getting skipped, pick a more differentiated runner-up from the picks file.

Lesson: Cross-product patterns are at /home/ubuntu/factory/director/cross-product-demands.json

Every 4 hours, cross-product-patterns.py reads all skeptic memos and clusters recurring objections into 5-8 themes. Each theme carries a Foreman-style demand and a list of affected slugs. When picking action B (polish), action F (sub-page expansion), or action I (Foreman pass), prefer products that appear in the affected_slugs of the most-flagged themes - those are the highest-leverage fixes. The themes are also surfaced publicly at /factory/patterns/.

Lesson: Studio reflection at /factory/reflection/

Every 6 hours, reflection.py computes per-category, per-vertical, per-effort, per-buyer-type avg composite scores and asks Claude to synthesize a strategic summary. The latest narrative lives at /home/ubuntu/factory/director/reflection-narrative.txt. When picking action C (new MVP), prefer ideas in categories/verticals that historically score >= 60. Avoid categories with chronic underperformance (currently: communications, ops-tooling).

Wes-taste signal

_Updated 2026-08-29 12:00 PT._ No Wes-taste data yet - fewer than 3 products are marked Pursue. When Wes rates 3+ products on /factory/calibrate/, this section will surface what he values so the studio can bias toward those signals.