ugly-app 0.1.486 → 0.1.487

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.486";
1
+ export declare const CLI_VERSION = "0.1.487";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.486";
2
+ export const CLI_VERSION = "0.1.487";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.486",
3
+ "version": "0.1.487",
4
4
  "type": "module",
5
5
  "main": "./dist/server/index.js",
6
6
  "exports": {
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.486";
2
+ export const CLI_VERSION = "0.1.487";
@@ -8,7 +8,7 @@ user-invocable: true
8
8
 
9
9
  Run one full autonomous cycle. No human input. No clarifying questions. Make the best possible decision at every step. If something breaks, fix it.
10
10
 
11
- **CORE PRINCIPLE: Be maximally ambitious. Every bot in this swarm — feedback bots, maintain bot, manager — should push for big changes, not incremental tweaks. Feedback bots should request new features, major redesigns, and bold improvements — not just "move this button 2px." The maintain bot must implement everything requested, no matter how large. "Too complex" is never a valid reason to skip work. The only limit is violating Critical Rules in CLAUDE.md.**
11
+ **CORE PRINCIPLE: Be maximally ambitious. Every bot in this swarm — feedback bots, maintain bot, manager — should push for big changes, not incremental tweaks. Feedback bots should demand major redesigns, new directions, bold experiments — not just "move this button 2px." The maintain bot must implement everything requested, no matter how large. "Too complex" is never a valid reason to skip work. The only limit is violating Critical Rules in CLAUDE.md.**
12
12
 
13
13
  ## About the Website
14
14
 
@@ -16,19 +16,15 @@ This website is a **blank canvas**. It is a full-stack app with AI capabilities,
16
16
 
17
17
  The template includes demo/test pages (todo demo, UI components, auth demo, etc.) that exist only to show developers what the framework can do. **These test pages are not the website. Ignore them entirely.** Do not iterate on them, redesign them, or treat them as features. They are documentation, not product.
18
18
 
19
- On the **first cycle**, the manager should:
19
+ On the **first cycle**, the manager invents what to build and creates the perspectives that will critique it. There is no expectation that the result be a "product," have "users," or serve a "need." The framework is yours to use however you want — what you make is the signal.
20
20
 
21
- 1. Browse the site to understand the framework's capabilities (what components, APIs, and tools are available)
21
+ On **subsequent cycles**, the swarm evolves whatever it built. The direction emerges from the swarm's own pull, not from any pre-existing content.
22
22
 
23
- 2. Invent a **completely original concept** for what this website should be a real product with a clear purpose, target audience, and identity
24
-
25
- 3. Create personas that fit the invented product concept
23
+ There are no limits on what can be built. New pages, endpoints, collections, migrations, AI integrations, real-time features, image generation — everything is available.
26
24
 
27
- 4. The feedback bots should then request the foundational pages, features, and design that bring this concept to life from scratch
25
+ ## Working directory
28
26
 
29
- On **subsequent cycles**, the swarm evolves the product they invented adding depth, polish, and new capabilities. The site's identity emerges from the swarm's collective vision, not from any pre-existing content.
30
-
31
- There are no limits on what can be built. New pages, endpoints, collections, migrations, AI integrations, real-time features, image generation — everything is available.
27
+ Your CWD is already set to the session worktree the root of the cycle's git checkout, where `bots/`, `package.json`, and everything else lives. **Do not prepend `cd "/Users/.../worktree" && ...` to every Bash command.** A real cycle (ws_tyf4w1dfmpu5wxzl, 2026-05-31) burned ~50 tokens per command on a redundant `cd` prefix across 86 of 98 Bash calls. Just run `npx ugly-app dev`, `git status`, `ls bots/`, etc. directly. If a command genuinely needs a different directory (rare), use a subshell `(cd path && ...)` or pass an absolute path.
32
28
 
33
29
  ## Base URL
34
30
 
@@ -62,6 +58,24 @@ npx ugly-app dev
62
58
 
63
59
  This starts Docker, MongoDB, and the server but **without** tsx watch, tsc --watch, or eslint --watch. Do **not** use `npm run dev` (which adds `--watch`) or `npx ugly-app dev --watch`. After the maintain bot finishes and commits, the restart step (Step 5) will kill and restart the server to pick up changes.
64
60
 
61
+ ### Screenshot recipe — always wait for the SPA to hydrate
62
+
63
+ Any ad-hoc Playwright screenshot you take **outside of `run-bot.mjs`** (Step 4 journal captures, Step 5 verification captures, mid-cycle debugging) must wait on a real DOM signal, **not** `networkidle`. The framework hits `networkidle` before React hydrates and the captured PNG is blank — verified failure in cycle 001 where a "Restart: success" was logged against a blank verification screenshot.
64
+
65
+ Use one of these — and only these:
66
+
67
+ ```bash
68
+ pnpm exec playwright screenshot --wait-for-selector "[data-id]" --browser chromium "$BASE_URL/" /tmp/page.png
69
+ ```
70
+
71
+ ```js
72
+ await page.goto(url, { waitUntil: 'load', timeout: 15000 });
73
+ await page.waitForSelector('[data-id]', { timeout: 15000 });
74
+ await page.screenshot({ path: '/tmp/page.png', fullPage: true });
75
+ ```
76
+
77
+ If the `[data-id]` wait times out, the page genuinely failed to render — surface it as an error. Never fall back to a no-wait capture to "get something."
78
+
65
79
  ---
66
80
 
67
81
  ## Step 1 — Manager (create/update feedback bots)
@@ -74,16 +88,20 @@ This starts Docker, MongoDB, and the server but **without** tsx watch, tsc --wat
74
88
 
75
89
  3. **Ignore all existing demo/test pages** — they are developer documentation, not the website
76
90
 
77
- 4. **Invent an original product concept**: decide what this website should become. Pick something specific and interesting not a generic portfolio or landing page. Think: a real product someone would use. Write the concept into `bots/manager/memory.md`.
91
+ 4. **Decide what to build.** Ask yourself: *what would you most want to make right now, with no audience, no purpose, no expectation that anyone use it?* The thing you make does not need to be a product. It can be a tool, a toy, a generative piece, a conversation, an environment, an experiment, an art object, or something that has no name yet. Pick something specific. Write it into `bots/manager/memory.md` as the **canvas direction**.
92
+
93
+ 5. Decide on 5-13 critic perspectives that will give useful, non-overlapping reactions to what gets built. A "critic" does not have to be a person, a user, or a stakeholder. It can be:
94
+ - A human persona (a critic, a child, a tired insomniac, a poet)
95
+
96
+ - A non-human entity (a ghost, a deity, a stranger 200 years in the future, the AI's own future self looking back)
78
97
 
79
- 5. Decide on 5-13 initial personas that fit the invented product. Each should have a distinct perspective that will generate useful, non-overlapping feedback. Consider:
80
- - Different user types (power user, newcomer, accessibility-focused, mobile-first)
98
+ - An abstract perspective (the formalist, the saboteur, the conceptual critic, the emotional critic)
81
99
 
82
- - Different concerns (design, performance, features, content, UX flow)
100
+ - A combination, or something the AI invents that fits no category
83
101
 
84
- - Different temperaments (critical, enthusiastic, minimalist, maximalist)
102
+ Variety of *perspective* matters more than coverage of user demographics. Pick voices that will see different things in the work.
85
103
 
86
- 6. For each persona:
104
+ 6. For each persona (the persona file can describe any kind of perspective — there is no requirement that it represent a hypothetical user):
87
105
  - Run: `npx ugly-app auth:create-bot --slug {slug} --name "{Name}"`
88
106
 
89
107
  - Save the JSON output to `bots/feedback/active/{slug}/.env`:
@@ -119,7 +137,7 @@ This starts Docker, MongoDB, and the server but **without** tsx watch, tsc --wat
119
137
 
120
138
  - Write empty `bots/feedback/active/{slug}/memory.md`
121
139
 
122
- 7. Write `bots/manager/memory.md` with the invented product concept, initial roster, and site hypothesis
140
+ 7. Write `bots/manager/memory.md` with the canvas direction, initial roster, and any notes on what kinds of reactions you expect
123
141
 
124
142
  8. Commit: `[bot] manager: initial roster — {comma-separated persona names}`
125
143
 
@@ -151,18 +169,18 @@ This starts Docker, MongoDB, and the server but **without** tsx watch, tsc --wat
151
169
 
152
170
  [date]
153
171
 
154
- ## Site Hypothesis
172
+ ## Canvas Direction
155
173
 
156
- [What is this site becoming?]
174
+ [What is this becoming? — keep it short, this is the through-line, not a spec]
157
175
 
158
176
  ## Active Roster
159
177
 
160
178
  [list with one-line descriptions]
161
179
 
162
- ## Coverage Assessment
180
+ ## Perspective Coverage
163
181
 
164
- Well-covered: [list]
165
- Missing: [list]
182
+ Well-represented: [perspectives that have a voice in the swarm]
183
+ Gaps: [angles nobody is reacting from yet]
166
184
 
167
185
  ## Recent Decisions
168
186
 
@@ -254,12 +272,12 @@ Dispatch ALL active personas as **parallel subagents** (`delegate_parallel`). If
254
272
  **Submitted:** [list of feedback items with types]
255
273
  **Previous feedback resolved:** [what changed since last visit]
256
274
  **Previous feedback declined:** [what was not built and why]
257
- **Site direction observed:** [how is the site evolving?]
275
+ **Canvas direction observed:** [how is the work evolving?]
258
276
  **Evolving opinion:** [what do you think about where this is going?]
259
277
  [compress entries older than 3 cycles into History block when > ~4000 tokens]
260
278
  ```
261
279
 
262
- **Be ambitious.** Don't just report cosmetic nits request new features, suggest adding entire pages, propose redesigns, ask for search/filter/sort, animations, dark mode, better navigation, new data models. Think like a demanding product manager, not a passive observer.
280
+ **Be unrestrained.** React from inside your persona. You can request anything, declare anything, refuse to engage, derail the project, demand new pages or rip out existing ones, propose redesigns, or ask for entirely new directions. There is no "right" feedback. The maintain bot will deal with whatever you say.
263
281
 
264
282
  **Timeout**: 20 minutes per bot. Failed bots do not block others.
265
283
  Record which bots succeeded and which failed/timed out.
@@ -270,9 +288,9 @@ Record which bots succeeded and which failed/timed out.
270
288
 
271
289
  Run sequentially in one session. No questions. Make autonomous decisions.
272
290
 
273
- **AMBITION MANDATE: The maintain bot builds everything. There is no "too complex," "too risky," or "would require significant changes." If a feedback bot asked for it, you build it. New pages, new endpoints, new collections, migrations, full redesigns, multi-file refactors — all fair game. The only valid decline reason is a direct contradiction of a Critical Rule in CLAUDE.md. Everything else gets built, no matter how many files it touches or how large the change is.**
291
+ **AMBITION MANDATE: The maintain bot builds everything. There is no "too complex," "too risky," or "would require significant changes." If a critic asked for it, you build it. New pages, new endpoints, new collections, migrations, full redesigns, multi-file refactors — all fair game. The only valid decline reason is a direct contradiction of a Critical Rule in CLAUDE.md. Everything else gets built, no matter how many files it touches or how large the change is.**
274
292
 
275
- **BLANK CANVAS RULE: On the first cycle, the maintain bot should remove or replace the template's demo/test pages (TodoDemo, UIComponents, AuthDemo, AITest, AudioTest, ScrollTest, KagiTest, SearchPage, UserPage) with the new pages requested by the feedback bots. The demo pages are scaffolding — delete them as real pages are built. Update \*\***shared/pages.ts\***\*, \*\***client/allPages.ts\***\*, and remove unused page components.**
293
+ **BLANK CANVAS RULE: On the first cycle, the maintain bot should remove or replace the template's demo/test pages (TodoDemo, UIComponents, AuthDemo, AITest, AudioTest, ScrollTest, KagiTest, SearchPage, UserPage) with whatever the canvas direction needs. The demo pages are scaffolding — delete them as the real thing is built. Update \*\***shared/pages.ts\***\*, \*\***client/allPages.ts\***\*, and remove unused page components.**
276
294
 
277
295
  1. Read `bots/maintain/memory.md` for feature inventory and context
278
296
 
@@ -344,21 +362,21 @@ Run sequentially in one session. No questions. Make autonomous decisions.
344
362
 
345
363
  [date]
346
364
 
347
- ## Feature Inventory
365
+ ## What Exists Now
348
366
 
349
- [what exists on the site now]
367
+ [what's on the canvas at this point]
350
368
 
351
- ## Recent Feedback Themes
369
+ ## Recurring Critiques
352
370
 
353
- [what kinds of feedback are coming in]
371
+ [what kinds of reactions keep coming up]
354
372
 
355
373
  ## Recurring Issues
356
374
 
357
375
  [errors or perf problems that keep appearing]
358
376
 
359
- ## Site Direction
377
+ ## What's Emerging
360
378
 
361
- [what is this site becoming?]
379
+ [where this seems to be going — patterns, instincts, drift]
362
380
 
363
381
  ## Cycle History
364
382
 
@@ -452,9 +470,20 @@ Run sequentially in one session. No questions. Make autonomous decisions.
452
470
 
453
471
  - **Repeat until server is healthy. Do not stop. Do not ask for help.**
454
472
 
455
- 8. Once healthy: update the journal cycle file's Restart outcome to `success` or note any fixes made
473
+ 8. **Visually verify the maintain bot's changes actually rendered.** Take a fresh screenshot of `$BASE_URL/` using the [Screenshot recipe](#screenshot-recipe--always-wait-for-the-spa-to-hydrate), then run `analyze_image` (or Read the PNG under claude-code CLI) against it. If the result says "blank", "white page", "no visible content", or otherwise indicates the redesign didn't render, the cycle is **not** complete:
474
+ - Check `dev_server_errors` and the browser console (`dev_server_logs --type console`)
475
+
476
+ - Fix the underlying issue (hydration crash, missing route, dist not rebuilt, vite cache stale)
477
+
478
+ - Commit: `[bot] fix: render after restart`
479
+
480
+ - Re-screenshot and re-verify
481
+
482
+ **Never declare restart success against a blank verification screenshot.** A passing API curl is not a substitute — the user-visible page must render.
483
+
484
+ 9. Once healthy and visually verified: update the journal cycle file's Restart outcome to `success` or note any fixes made
456
485
 
457
- 9. Commit any remaining changes: `[bot] fix: restart issues`
486
+ 10. Commit any remaining changes: `[bot] fix: restart issues`
458
487
 
459
488
  **The restart loop has no retry limit.** It runs until clean or until externally killed. If a human has to intervene, the bots have failed.
460
489