Lossless Changelog
fleet

DidiDecks promoted to its own repo, ai-labs gets its first splash

Two related moves on the same day: the slide-deck work that was mis-parented under astro-knots became a first-class child of ai-labs (new repo, new specs, two client engagements re-attached as nested submodules), and ai-labs itself grew a splash page — three-mode + two-tier tokens, mono-forward bench aesthetic, rolled-up changelog + context-v across all three active children.

Michael StatonMusic Editoraugmented with Claude Code on Claude Opus 4.7

DidiDecks promoted to its own repo, ai-labs gets its first splash

Why Care?

This is what the pseudomonorepo discipline looks like when it actually pays off. A folder full of specs at ai-labs/context-v/specs/ plus two client engagements that were mis-parented under astro-knots/sites/ got collapsed into the right shape: a first-class child of ai-labs/ with its own GitHub repo, its own three-tier branches, its own context-v/ and changelog/, its own splash page on day one — and the two client sites re-attached as nested submodules in their right home.

In the same session, ai-labs/ got its own splash page — public face for the pseudomonorepo, three current products on display (Context Vigilance, MemoPop AI, DidiDecks AI), rolling up the changelog and context-v from every child. The narrative parent now matches the git parent at every level of the tree, and someone landing cold can see what we're building without needing to clone anything.

The deck-as-code paradigm is what lossless-group/dididecks-ai is for — receiving-side Due-Diligence-grade slide decks, code-first, AI-authored, white-label-publishable. Today's work didn't ship that product. It built the substrate the product will sit on.

What's New?

lossless-group/dididecks-ai exists

New public repo at github.com/lossless-group/dididecks-ai, three branches at parity (development default, main, master). Inside:

  • context-v/specs/ — three living specs migrated from ai-labs/context-v/specs/:

    • Dididecks-AI-Slide-Decks-as-Code.md — the parent spec; Due-Diligence framing, two North Stars, seven Design Principles, system map.

    • Dididecks-AI-DD-Ready-Citation-and-Source-Access.md — sibling spec; every claim backable, source-access protocol, archive-on-cite.

    • Dididecks-AI-Visual-and-Diagram-Component-Library.md — sibling spec; reusable AI-composable visual primitives.

  • context-v/explorations/Dididecks-AI-Business-Model.md — option-space for the OSS / hosted / Forward-Deployed motion.

  • context-v/plans/Init-DidiDecks-as-core-Submodule-of-AI-Labs.md — the plan-of-record we executed today.

  • splash/ — Astro Knots splash, builds locally, base /dididecks-ai/. Hero leads with the DD framing; the three sibling specs are surfaced as cards.

  • client-sites/calmstorm-decks (tracks development) and client-sites/reach-edu-hub (tracks main) — the two driving client engagements, re-parented from astro-knots/sites/. Site repos themselves untouched on GitHub; only the parent reference flipped. Vercel deploys remain wired to each site's own repo and are unaffected.

  • changelog/2026-05-11_01.md — DidiDecks's own init entry.

All relative wikilinks in the migrated context-v files were rewritten for the new nesting depth (../../../../astro-knots/... and ../../client-sites/calmstorm-decks/...).

ai-labs/.gitmodules now carries:

INI
[submodule "dididecks-ai"]
    path = dididecks-ai
    url = https://github.com/lossless-group/dididecks-ai.git
    branch = development

The corresponding entries in astro-knots/.gitmodules for sites/calmstorm-decks and sites/reach-edu-hub are removed (committed in astro-knots, push deferred per the no-auto-bump-parents discipline).

ai-labs splash

New splash at ai-labs/splash/, Astro 6, base /ai-labs/. Sticks the landing on the three-mode + one-theme + two-tier token contract from the theme-system skill:

  • <html data-mode="…"> — three first-class modes:

    • dark ("bench" — default)

    • light ("field notebook")

    • vibrant ("signal / demo"; dark-based per theme-system)

  • Pre-paint inline script in BaseLayout resolves persisted mode from localStorage before first paint — no FOUC.

  • Two-tier tokens in src/styles/theme.css: Tier 1 named (--color__sodium, --color__cyan-trace, --color__plum, …), Tier 2 semantic (--color-bg, --color-accent, --color-thread, …) rebound per mode. Components read Tier 2 only.

  • Visual posture deliberately divergent from sibling Lossless splashes (memopop dark+sans+radial-mesh, content-farm similar, lfm light+serif+paper-grain):

    • Mono-forward type — Space Grotesk display, Inter Tight body, JetBrains Mono dominant for eyebrows, metadata, labels, status pills, every number.

    • Bench-card chrome — hairline border + mono label-tab clipped to top-left like a hand-labelled drawer.

    • Blueprint-grid background — pure CSS, 8px fine + 32px major, masked to fade below the fold.

    • Brand spine — sodium amber + electric cyan trace + plum-magenta signal.

Content surfaces:

  • Hero with a live readout of the latest changelog entries (proves the rollup mechanism is current).

  • Roster of the three active products — Context Vigilance Kit, MemoPop AI, DidiDecks AI.

  • "Where prior work landed" strip — Content Farm, image-gin, lossless-skills, the orchestrator-into-MemoPop fold.

  • Discipline strip — context-v · changelog · branch tiers.

  • Studies row — the three pinned reading lists.

pnpm rollup:sync walks each child submodule's locally-checked-out changelog/ + context-v/ and writes them into splash/src/rollup/ with from + from_path provenance frontmatter. The build then reads the union of parent + rollup. Current state:

parentrolled up
changelog25 (3 + 1 + 1)
context-v921 (2 + 14 + 5)

Build emits 39 routes. pnpm build clean from a fresh pnpm install --ignore-workspace.

DESIGN.md + OG image set

  • splash/DESIGN.md authored per the Google Stitch open spec — full YAML frontmatter (colors / typography / rounded / spacing / components / modes / imagery), eight prose sections in canonical order, with the off-spec imagery: extension slotted before Do's and Don'ts per the maintain-design-md skill.

  • Seven OG image deliverables generated via Ideogram v3 using the generate-consistent-og-images skill:

    public/ogimage__AI-Labs--Default.png       ← style_reference for re-upload
    public/ogimage__AI-Labs--Default.jpg
    public/ogimage__AI-Labs--Banner.jpg        ← 16x9 OG / Twitter / Slack
    public/ogimage__AI-Labs--BannerTall.jpg    ← 3x4 WhatsApp / iMessage
    public/ogimage__AI-Labs--BannerTallMax.jpg ← 2x3 dramatic tall
    public/ogimage__AI-Labs--Portrait.jpg      ← 4x5 LinkedIn / IG feed
    public/ogimage__AI-Labs--PortraitTall.jpg  ← 9x16 Stories / Reels
    public/ogimage__AI-Labs--Square.jpg        ← 1x1 avatars

    All seven read as the same scene from different angles — three small instrument modules in a row on a dark matte bench surface, empty dark wall above with subtle overhead spotlight. The seed (16×9) was generated with the prompt driving the aesthetic; the six variants uploaded that PNG as style_reference_images for family-cohesion.

A small skill lesson worth saving

For the seed pass (no style reference yet), the color_palette parameter dominated the composition — Ideogram painted the brand spine as rainbow stripes on every available surface regardless of negative_prompt: rainbow, vibrant, saturated. The fix was to bypass the palette entirely for the seed (--no-palette flag added to the wrapper script) and let the prompt drive aesthetic. Once we had a dark, modular reference image, re-enabling the palette for the six variants was safe because the reference image dominated. The generate-consistent-og-images skill's Example B says "generate a one-off using only color_palette + style_type=AUTO" — but for the ai-labs aesthetic that produced rainbow disasters and dropping the palette was the right move. Worth noting back to the skill.

How children talk to the parent now

ai-labs/                                # this pseudomonorepo
├── memopop-ai/                         # active product (tracks main)
├── dididecks-ai/                       # active product (tracks development) ← NEW
│   ├── client-sites/
│   │   ├── calmstorm-decks/            # ← moved here from astro-knots/sites/
│   │   └── reach-edu-hub/              # ← moved here from astro-knots/sites/
│   ├── context-v/{specs,explorations,plans}/
│   └── changelog/
├── context-vigilance-kit/              # experiment becoming a product
├── studies/                            # three pinned reading lists
├── packages/                           # vendored AI tooling
├── apis/  scripts/  utils/             # sandbox
├── context-v/                          # parent-level cross-cutting docs
├── changelog/                          # ← this entry lives here
└── splash/                             # ← NEW — Astro Knots, three modes, rolls up children

The narrative parent matches the git parent at every level. Each child carries its own three-tier branches; each rolls up to the parent splash; the parent splash will eventually roll up further to lossless-monorepo. The discipline scales.

Deferred (next ship)

  • Pagefind search on the ai-labs splash (skill's default; intentionally deferred to keep the first ship tight).

  • .github/workflows/pages.yml to deploy splash/ on push to main.

  • Wiring the canonical og:image paths into BaseLayout's <MetaTags> so the new image set actually surfaces on unfurl.

  • Bump lossless-monorepo's gitlink for ai-labs and astro-knots when you're ready — held back per the "parents tidied deliberately, not auto-bumped" preference.