Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
cc41123
feat(design-system): flip tokens to the light sage palette
code-yeongyu Jul 2, 2026
18e3bb3
feat(demo): port source-grounded ulw demo scene data
code-yeongyu Jul 2, 2026
6ee563b
docs(design): rewrite DESIGN.md for the light system
code-yeongyu Jul 2, 2026
3b0fe43
feat(brand): light meta, manifest, OG and favicon surfaces
code-yeongyu Jul 2, 2026
a15c921
test(e2e): port demo specs and encode the new light IA (red)
code-yeongyu Jul 2, 2026
79db92e
refactor(design-system): light primitives and dotted rule grid
code-yeongyu Jul 2, 2026
e425a68
feat(landing): light declarative hero and header
code-yeongyu Jul 2, 2026
4b9e722
feat(landing): light install block and command cards
code-yeongyu Jul 2, 2026
b92a7e6
feat(landing): light feature workflows and skills band
code-yeongyu Jul 2, 2026
249aa8d
feat(landing): light hephaestus, docs cta and footer
code-yeongyu Jul 2, 2026
627e64d
feat(demo): codex window on light canvas with window-theme toggle
code-yeongyu Jul 2, 2026
b37db70
feat(landing): port team mode and ulw-research sections to light
code-yeongyu Jul 2, 2026
8ff67f6
fix(docs): light-theme coherence for the docs surface
code-yeongyu Jul 2, 2026
23ad8c6
feat(landing): compose the light IA and retire the raster badge
code-yeongyu Jul 2, 2026
6793424
fix(design-system): deepen accent green for AA on tinted chip fills
code-yeongyu Jul 2, 2026
b4bacf7
feat(design-system): rebuild the identity as a Linear-class dark system
code-yeongyu Jul 3, 2026
cab09be
feat(demo): rebuild the codex window to the real app anatomy
code-yeongyu Jul 3, 2026
b19c809
feat(demo): default the codex window to its dark theme
code-yeongyu Jul 3, 2026
1360261
feat(design-system): restore the emerald atmosphere on a deeper canvas
code-yeongyu Jul 3, 2026
cf583b8
docs(design-system): correct the glow-backdrop comment to real values
code-yeongyu Jul 3, 2026
d89e688
feat(demo): one session, one goal — the run narrative fixed
code-yeongyu Jul 3, 2026
ae09fdd
feat(landing): dark team-mode window with one session per member
code-yeongyu Jul 3, 2026
0da6673
test(e2e): assert the disabled lower step bound at scene 0
code-yeongyu Jul 3, 2026
37b6087
feat(demo): cinematic recording — not a playable widget
code-yeongyu Jul 3, 2026
f66fa48
docs(demo): sync the sidebar docblock with the static recording
code-yeongyu Jul 3, 2026
1041398
feat(demo): drop the progress bar — a session, not a slideshow
code-yeongyu Jul 3, 2026
7af98c0
feat(demo): running-session spinners mark the live run
code-yeongyu Jul 3, 2026
3a99922
fix(assets): restore the ultrawork badge files
code-yeongyu Jul 3, 2026
2e344c7
feat(demo): replace the step counter with the app's running line
code-yeongyu Jul 3, 2026
c384c6f
feat(landing): restore the glassy Ultrawork badge showcase
code-yeongyu Jul 3, 2026
e279d0d
feat(demo): run progress by the working line + flowing scene continuity
code-yeongyu Jul 3, 2026
537f462
feat(demo): rebuild the recording as an appending chat replay
code-yeongyu Jul 3, 2026
4f6572d
chore(demo): clear the slide-model residue after the replay rebuild
code-yeongyu Jul 3, 2026
b521767
chore(web): remove residual AI slop across the redesign branch
code-yeongyu Jul 3, 2026
a8c3d2a
refactor(web): fold repeated patterns into design-system primitives
code-yeongyu Jul 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .omo/evidence/v11-consolidation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# v11 design-system consolidation — evidence

Lens: omo-programming (TS iron list, no speculative API) + omo-frontend (DESIGN.md §7: pattern twice => design-system).

## Folds (rendered class sets byte-equal; DOM tags unchanged)
- NEW `MonoTag` (surfaces.tsx): mono chip <li> — folds ulw-research lane chips + feature-workflows skills chips (2 sites)
- NEW `CardLabel` (typography.tsx, tone: default|accent): mono uppercase card <h3> — folds hephaestus omoLabel/lazyLabel + team-mode whenTitle (3 sites)
- `AccentSurface` gains `as: "div"|"li"` + `padding` (default p-5, existing consumers unchanged) — absorbs ulw-demo example chip (px-6 py-3) + 5 Hephaestus loop tiles (as="li" p-4)

## Prop-surface tightening (all zero-consumer, DOM-identical)
- CommandCodeSurface / IconWell: no longer accept a className they silently ignored (ChildrenOnlyProps)
- SkipLink: unused children/href props inlined ("Skip to main content", "#content")
- LinkAction: speculative `prefetch?: false` prop inlined to `prefetch={false}`
- KEPT: FactList.dotClassName (shared FactListProps contract; CompactDotList consumer live), className passthrough on rendered primitives (layer-wide idiom)

## Dead CSS/tokens removed (verified 0 source consumers)
- .card-gradient-base/-beam/-sheen/-pools (hero went open-canvas in e425a68)
- --accent-cyan, --accent-teal (compat aliases), --surface-3, --surface-panel-alt, --surface-panel-deep

## DESIGN.md truth-up
- §2 palette table + alias rule reconciled with removed tokens; adapter-token intro now states the fixed-dark reality (light block defined-but-unmounted)
- §5 CodexWindow rewritten for the v10 appending chat replay (was still describing the v1 slide model with toggle + play/pause)
- §5 component lists gained MonoTag / CardLabel / AccentSurface variants
- §6 ulw-demo timeline rewritten (ENTRY_MS 900 append cadence, 4s rest, loop, reduced-motion static)
- §7 hero row + rules reflect the open-canvas hero (no card gradients)

## Gates (all after the change)
- biome lint app e2e components lib: PASS (59 files)
- tsc --noEmit: PASS
- new-string audit: 32 candidates, NEW-STRINGS-OK (no new visible copy)
- Full sweep: 57/57 PASS (v11-full-e2e.txt)
- Lighthouse: 100x4 (v11-lighthouse.txt)
- Visual eyeball on built server :4341 — v11-heph-loop.png / v11-skills-band.png / v11-demo-chip.png (all identical to pre-change rendering)

Cleanup: screenshot server on :4341 killed; playwright self-managed servers torn down (no LISTEN on 4340/4341).
Binary file added .omo/evidence/v11-demo-chip.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
101 changes: 101 additions & 0 deletions .omo/evidence/v11-full-e2e.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
[WebServer] $ node ./scripts/generate-docs-content.mjs
[WebServer] Docs content already current with 20 HTML-compiled docs
[WebServer] $ NODE_OPTIONS=--no-deprecation next build
[WebServer] ▲ Next.js 16.2.9 (Turbopack)
[WebServer]
[WebServer] Creating an optimized production build ...
[WebServer] ✓ Compiled successfully in 1076ms
[WebServer] Running TypeScript ...
[WebServer] Finished TypeScript in 2.2s ...
[WebServer] Collecting page data using 13 workers ...
[WebServer] Generating static pages using 13 workers (0/11) ...
[WebServer] Generating static pages using 13 workers (2/11)
[WebServer] Generating static pages using 13 workers (5/11)
[WebServer] Generating static pages using 13 workers (8/11)
[WebServer] ✓ Generating static pages using 13 workers (11/11) in 719ms
[WebServer] Finalizing page optimization ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /api/github-stars
[WebServer] ├ ○ /apple-icon.png
[WebServer] ├ ○ /docs
[WebServer] ├ ○ /icon.svg
[WebServer] ├ ○ /manifest.webmanifest
[WebServer] ├ ○ /opengraph-image
[WebServer] ├ ○ /robots.txt
[WebServer] ├ ○ /sitemap.xml
[WebServer] └ ○ /twitter-image
[WebServer]
[WebServer]
[WebServer] ○ (Static) prerendered as static content
[WebServer] ƒ (Dynamic) server-rendered on demand
[WebServer]
[WebServer] $ NODE_OPTIONS=--no-deprecation next start
[WebServer] ▲ Next.js 16.2.9
[WebServer] - Local: http://localhost:56465
[WebServer] - Network: http://192.168.0.3:56465
[WebServer] ✓ Ready in 94ms

Running 57 tests using 1 worker

✓ 1 [chromium] › e2e/docs.spec.ts:15:3 › docs page — structure › responds 200 (19ms)
✓ 2 [chromium] › e2e/docs.spec.ts:20:3 › docs page — structure › has exactly one h1 (220ms)
✓ 3 [chromium] › e2e/docs.spec.ts:25:3 › docs page — structure › renders every section as a visible element carrying its id + title (168ms)
✓ 4 [chromium] › e2e/docs.spec.ts:35:3 › docs page — structure › nav lists every section title as links or buttons (167ms)
✓ 5 [chromium] › e2e/docs.spec.ts:46:3 › docs page — structure › documents lazycodex-ai as the npm install alias (118ms)
✓ 6 [chromium] › e2e/docs.spec.ts:63:3 › docs page — structure › documents skills and built-in workflow usage (170ms)
✓ 7 [chromium] › e2e/docs.spec.ts:80:3 › docs page — structure › orders Skills immediately after Commands and before Concepts (0ms)
✓ 8 [chromium] › e2e/docs.spec.ts:91:3 › docs page — navigation › clicking the $ulw-loop nav entry jumps to that section (168ms)
✓ 9 [chromium] › e2e/docs.spec.ts:106:3 › docs page — no-JS SSR › server-renders every section heading without JavaScript (144ms)
✓ 10 [chromium] › e2e/github-stars.spec.ts:21:3 › github stars API › responds with a numeric live star count (13ms)
✓ 11 [chromium] › e2e/github-stars.spec.ts:37:3 › github stars live source parsing › uses GH_TOKEN when GITHUB_TOKEN is absent (2ms)
✓ 12 [chromium] › e2e/github-stars.spec.ts:63:3 › github stars live source parsing › falls back to Shields when GitHub rejects the request (1ms)
✓ 13 [chromium] › e2e/github-stars.spec.ts:87:3 › github stars live source parsing › parses Shields comma and compact star payloads (0ms)
✓ 14 [chromium] › e2e/github-stars.spec.ts:93:3 › github stars live source parsing › caches the non-zero fallback instead of serving a zero-star shell (0ms)
✓ 15 [chromium] › e2e/github-stars.spec.ts:103:3 › github stars live source parsing › rejects zero-star upstream payloads as stale or broken source data (0ms)
✓ 16 [chromium] › e2e/home.spec.ts:17:3 › home page — content › renders the wordmark, hero copy, and footer (106ms)
✓ 17 [chromium] › e2e/home.spec.ts:37:3 › home page — content › does not show launch gating copy (90ms)
✓ 18 [chromium] › e2e/home.spec.ts:44:3 › home page — content › has a single h1 and no broken landmarks (92ms)
✓ 19 [chromium] › e2e/home.spec.ts:52:3 › home page — content › skip-link is hidden until focused (93ms)
✓ 20 [chromium] › e2e/landing-sections.spec.ts:20:3 › team mode section › renders the grounded team mode copy (101ms)
✓ 21 [chromium] › e2e/landing-sections.spec.ts:41:3 › ulw-research section › renders the grounded ulw-research copy (96ms)
✓ 22 [chromium] › e2e/landing-sections.spec.ts:56:3 › information architecture › keeps the planned section order (528ms)
✓ 23 [chromium] › e2e/landing.spec.ts:15:3 › landing page — hero › has exactly one h1 reading the wordmark (101ms)
✓ 24 [chromium] › e2e/landing.spec.ts:23:3 › landing page — hero › shows the eyebrow and both hero lines (105ms)
✓ 25 [chromium] › e2e/landing.spec.ts:41:3 › landing page — install + commands › shows the install command and a copy button (101ms)
✓ 26 [chromium] › e2e/landing.spec.ts:51:3 › landing page — install + commands › renders every command with its name and syntax (104ms)
✓ 27 [chromium] › e2e/landing.spec.ts:59:3 › landing page — install + commands › feature workflow guidance keeps the three command pillars first (101ms)
✓ 28 [chromium] › e2e/landing.spec.ts:70:3 › landing page — install + commands › places skill coverage before the concept section (100ms)
✓ 29 [chromium] › e2e/landing.spec.ts:87:3 › landing page — links + footer › github stars pill links to the stargazers url with a count (93ms)
✓ 30 [chromium] › e2e/landing.spec.ts:96:3 › landing page — links + footer › updates the github stars pill from the live API (92ms)
✓ 31 [chromium] › e2e/landing.spec.ts:104:3 › landing page — links + footer › has a Docs link pointing at /docs (95ms)
✓ 32 [chromium] › e2e/landing.spec.ts:111:3 › landing page — links + footer › links to OmO and shows lazycodex.ai (93ms)
✓ 33 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at mobile-small (360×640) (645ms)
✓ 34 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at mobile-iphone-se (375×667) (644ms)
✓ 35 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at mobile-iphone-14 (390×844) (622ms)
✓ 36 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at mobile-large-android (412×915) (623ms)
✓ 37 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at tablet-ipad-portrait (768×1024) (667ms)
✓ 38 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at tablet-ipad-landscape (1024×768) (625ms)
✓ 39 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at tablet-ipad-pro-portrait (1024×1366) (628ms)
✓ 40 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at desktop-laptop (1280×800) (623ms)
✓ 41 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at desktop-fullhd (1440×900) (622ms)
✓ 42 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at desktop-wide (1536×864) (659ms)
✓ 43 [chromium] › e2e/responsive.spec.ts:37:3 › @responsive renders correctly at desktop-ultrawide (1920×1080) (675ms)
✓ 44 [chromium] › e2e/responsive.spec.ts:81:1 › @responsive iPhone-13 device profile (Playwright preset) (607ms)
✓ 45 [chromium] › e2e/responsive.spec.ts:98:1 › @responsive iPad-Pro device profile (Playwright preset) (609ms)
✓ 46 [chromium] › e2e/seo.spec.ts:25:3 › site SEO + metadata › has a unique <title>, description, canonical, lang, viewport (99ms)
✓ 47 [chromium] › e2e/seo.spec.ts:52:3 › site SEO + metadata › has OpenGraph and Twitter card tags (96ms)
✓ 48 [chromium] › e2e/seo.spec.ts:77:3 › site SEO + metadata › has JSON-LD SoftwareApplication structured data (95ms)
✓ 49 [chromium] › e2e/seo.spec.ts:87:3 › site SEO + metadata › /robots.txt and /sitemap.xml are reachable (8ms)
✓ 50 [chromium] › e2e/seo.spec.ts:101:3 › site SEO + metadata › /docs route is reachable (7ms)
✓ 51 [chromium] › e2e/seo.spec.ts:106:3 › site SEO + metadata › /manifest.webmanifest is reachable and valid (3ms)
✓ 52 [chromium] › e2e/seo.spec.ts:114:3 › site SEO + metadata › opengraph image and twitter image render as PNGs (8ms)
✓ 53 [chromium] › e2e/seo.spec.ts:135:3 › site SEO + metadata › serves the unified LazyCodex favicon assets (97ms)
✓ 54 [chromium] › e2e/ulw-demo.spec.ts:35:3 › ulw demo — chat replay @happy › one ask, then the run appends beneath it (6.0s)
✓ 55 [chromium] › e2e/ulw-demo.spec.ts:78:3 › ulw demo — chat replay @happy › walks the whole run to the checkpoint, then loops (46.9s)
✓ 56 [chromium] › e2e/ulw-demo.spec.ts:99:3 › ulw demo — reduced motion + mobile @edge › reduced motion shows the completed run statically (3.1s)
✓ 57 [chromium] › e2e/ulw-demo.spec.ts:117:3 › ulw demo — reduced motion + mobile @edge › no horizontal overflow at 390x844 and the sidebar collapses (2.0s)

57 passed (1.3m)
Binary file added .omo/evidence/v11-heph-loop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions .omo/evidence/v11-lighthouse.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
[WebServer] $ node ./scripts/generate-docs-content.mjs
[WebServer] Docs content already current with 20 HTML-compiled docs
[WebServer] $ NODE_OPTIONS=--no-deprecation next build
[WebServer] ▲ Next.js 16.2.9 (Turbopack)
[WebServer]
[WebServer] Creating an optimized production build ...
[WebServer] ✓ Compiled successfully in 1008ms
[WebServer] Running TypeScript ...
[WebServer] Finished TypeScript in 2.3s ...
[WebServer] Collecting page data using 13 workers ...
[WebServer] Generating static pages using 13 workers (0/11) ...
[WebServer] Generating static pages using 13 workers (2/11)
[WebServer] Generating static pages using 13 workers (5/11)
[WebServer] Generating static pages using 13 workers (8/11)
[WebServer] ✓ Generating static pages using 13 workers (11/11) in 689ms
[WebServer] Finalizing page optimization ...
[WebServer]
[WebServer] Route (app)
[WebServer] ┌ ○ /
[WebServer] ├ ○ /_not-found
[WebServer] ├ ƒ /api/github-stars
[WebServer] ├ ○ /apple-icon.png
[WebServer] ├ ○ /docs
[WebServer] ├ ○ /icon.svg
[WebServer] ├ ○ /manifest.webmanifest
[WebServer] ├ ○ /opengraph-image
[WebServer] ├ ○ /robots.txt
[WebServer] ├ ○ /sitemap.xml
[WebServer] └ ○ /twitter-image
[WebServer]
[WebServer]
[WebServer] ○ (Static) prerendered as static content
[WebServer] ƒ (Dynamic) server-rendered on demand
[WebServer]
[WebServer] $ NODE_OPTIONS=--no-deprecation next start
[WebServer] ▲ Next.js 16.2.9
[WebServer] - Local: http://localhost:56958
[WebServer] - Network: http://192.168.0.3:56958
[WebServer] ✓ Ready in 70ms

Running 2 tests using 1 worker

[Lighthouse mobile] url=http://127.0.0.1:56958 perf=100 a11y=100 bp=100 seo=100
[Lighthouse mobile] Failing audits:
- unused-javascript: score=0.5 (Reduce unused JavaScript)
- bf-cache: score=0 (Page prevented back/forward cache restoration)
- legacy-javascript-insight: score=0.5 (Legacy JavaScript)
- network-dependency-tree-insight: score=0 (Network dependency tree)
- render-blocking-insight: score=0.5 (Render-blocking requests)
✓ 1 [chromium] › e2e/lighthouse.spec.ts:220:3 › @lighthouse — Lighthouse 100/100/100/100 (Playwright Chrome + CDP) › mobile preset hits 100 in every category (15.9s)
[Lighthouse desktop] url=http://127.0.0.1:56958 perf=100 a11y=100 bp=100 seo=100
[Lighthouse desktop] Failing audits:
- unused-javascript: score=0.5 (Reduce unused JavaScript)
- bf-cache: score=0 (Page prevented back/forward cache restoration)
- legacy-javascript-insight: score=0.5 (Legacy JavaScript)
- network-dependency-tree-insight: score=0 (Network dependency tree)
- render-blocking-insight: score=0.5 (Render-blocking requests)
✓ 2 [chromium] › e2e/lighthouse.spec.ts:226:3 › @lighthouse — Lighthouse 100/100/100/100 (Playwright Chrome + CDP) › desktop preset hits 100 in every category (15.8s)

2 passed (39.6s)
Binary file added .omo/evidence/v11-skills-band.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions .omo/evidence/v11-slop-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# AI SLOP REMOVAL REPORT — v11 full-branch sweep

Scope: branch diff vs merge-base main (37 source files, packages/web), 10 parallel deep agents in 2 batches of 5.
Behavior lock: green baseline at 4f6572d — 57/57 e2e (v10-full-e2e.txt) + Lighthouse 100x4 (v10-lighthouse.txt). No new tests needed (full coverage existed).

## Per-file results (only files with changes)
- lib/ulw-demo-scenes.ts: dead code -24 LOC — ULW_DEMO_STEPS, ULW_DEMO_PROOFS, UlwStep (pre-v10 rendering model; zero consumers repo-wide, timeline derivation byte-identical)
- components/site/ulw-demo/window-icons.tsx: dead code -1 — unused "agent" icon path (v9 roster leftover; union narrowing proven safe)
- app/styles/ulw-demo-transcript.css: stale comment -1 — header still described v9 scene-variable reserves
- app/styles/ulw-demo-panel.css: obvious comment -2 — section divider restating the file header verbatim
- components/design-system/brand-mark.tsx: -1 — cx() wrapping a single static string + orphaned import
- components/site/hero.tsx: -1 — WHAT-restating JSX comment

Net: -30 LOC (32 deleted, 2 added). 31 other files verified clean with per-category SKIP reasoning (agents' full reports in session log).

## Notable justified SKIPs
- window-panes.tsx entry-kind if-chain: repo has no assertNever idiom; switch+default would change impossible-branch behavior — SKIP correct
- codex-window.tsx ?.>/?? guards: REQUIRED by noUncheckedIndexedAccess — not defensive slop
- command-card GlyphIcon default branch: runtime safety at data seam; removal trades no-op for potential render throw
- docs.css duplication (sticky columns, 4.5rem offsets): unmergeable without cascade reorder / new custom property

## Flagged for the consolidation pass (handled in the follow-up commit)
- DEAD: .card-gradient-base/-beam/-sheen/-pools (design-system.css) — hero went open-canvas in e425a68; DESIGN.md §7 hero row stale
- DEAD tokens: --accent-cyan, --accent-teal (compat aliases, zero consumers), --surface-3, --surface-panel-alt, --surface-panel-deep
- Accept-but-ignore props: CommandCodeSurface.className, IconWell.className (accepted, never rendered)
- Zero-consumer props: FactList.dotClassName, SkipLink.children/href, LinkAction.prefetch (?: false single-literal)
- ChildrenProps defined in surfaces.tsx AND layout.tsx with different shapes (same name)

## Quality gates
- Regression: green baseline held (behavior-preserving edits only; full sweep re-run scheduled after consolidation commit)
- Lint (biome app e2e components lib): PASS, 59 files
- Typecheck (tsc --noEmit): PASS
- Static/security scan: N/A (not configured)

## Deferred debt ledger
- docs.css at 441 pure LOC (>250 ceiling): NOT split — DESIGN.md sanctions it as the page-specific composition layer; split risks cascade-order changes
- team-mode-section.tsx L89-92 hardcoded visible string (not ledger-sourced like siblings) — flag only, copy changes forbidden
- CompactDotList vs hand-rolled team-mode bullets: dot geometry differs visibly — distinct patterns, not folded

Final Status: CLEAN
Loading
Loading