← JuicyLucy AdsCONTENT HISTORY

Update to JuicyLucy Ads

Snapshot Sep 30, 2026 · 23:16 UTC · version 0.22.1

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Recreate static image ads from original source creatives into one or many target languages — the multilingual batch workflow. Covers the campaign contract, one-language-per-lane parallelism with adaptive concurrency, fresh-source (Approach B) recreation with strict attempt accounting, resume-after-interruption from filesystem checkpoints, three-level QA (asset, batch, language/project), contact-sheet and OCR review, and final reconciliation including uploader counts. Use for any multilingual static-ad batch, especially replicating an existing campaign folder structure and source set across languages. Single-image fidelity technique (Track A/B) lives in static-image-craft; the production pipeline that feeds this is static-ad-production.",
  "included_files": [
    {
      "relative_path": "references/benchmarking.md",
      "size_in_bytes": 1912
    },
    {
      "relative_path": "references/incident-response.md",
      "size_in_bytes": 2063
    },
    {
      "relative_path": "references/manifests.md",
      "size_in_bytes": 2223
    },
    {
      "relative_path": "references/performance-feedback.md",
      "size_in_bytes": 2080
    },
    {
      "relative_path": "references/qa-and-records.md",
      "size_in_bytes": 3366
    },
    {
      "relative_path": "scripts/make_contact_sheets.py",
      "size_in_bytes": 3077
    },
    {
      "relative_path": "scripts/ocr.swift",
      "size_in_bytes": 3552
    },
    {
      "relative_path": "scripts/verify_campaign.py",
      "size_in_bytes": 6760
    },
    {
      "relative_path": "scripts/verify_multilanguage_campaign.py",
      "size_in_bytes": 3028
    },
    {
      "relative_path": "templates/CAMPAIGN_MANIFEST.json",
      "size_in_bytes": 642
    },
    {
      "relative_path": "templates/LANGUAGE_MANIFEST.json",
      "size_in_bytes": 507
    },
    {
      "relative_path": "templates/PROJECT_STATE.md",
      "size_in_bytes": 2064
    },
    {
      "relative_path": "templates/coordinator-kickoff.md",
      "size_in_bytes": 2520
    },
    {
      "relative_path": "templates/language-worker-kickoff.md",
      "size_in_bytes": 2476
    }
  ],
  "name": "static-localization",
  "skill_md_contents": "---\nname: static-localization\ndescription: Recreate static image ads from original source creatives into one or many target languages — the multilingual batch workflow. Covers the campaign contract, one-language-per-lane parallelism with adaptive concurrency, fresh-source (Approach B) recreation with strict attempt accounting, resume-after-interruption from filesystem checkpoints, three-level QA (asset, batch, language/project), contact-sheet and OCR review, and final reconciliation including uploader counts. Use for any multilingual static-ad batch, especially replicating an existing campaign folder structure and source set across languages. Single-image fidelity technique (Track A/B) lives in static-image-craft; the production pipeline that feeds this is static-ad-production.\n---\n\n# Static Localization\n\nProduce complete, auditable language campaigns while protecting copy accuracy, source\nfidelity, throughput, and conversion intent.\n\n## Resolve the layers first\n\nThis skill carries no brand facts and restates no workspace values.\n\n- **Brand** — resolve the `brand-<slug>` skill before locking any copy: exactly one\n  `brand-*` skill installed → that is the brand; several → ask which; none → say\n  plainly that no brand is installed and create one first (the `juicylucy-setup`\n  skill's `extending.md` § Creating the first brand). The brand's\n  `product-truth.md` owns every capability claim, and its `copy-patterns.md` lists the\n  Latin tokens that stay untranslated in every language.\n- **Workspace** — the `juicylucy` skill owns the conventions this workflow applies:\n  the asset gate and `.qa/` evidence layout (`evidence.json`), filename inheritance\n  (`naming.json`), folder grammar and the global sequence (`foldering.json`), and\n  language codes, scripts, and RTL flags (`languages.json`).\n\nIf either skill cannot be read, **stop and ask** rather than working from memory.\n\n## Medium scope\n\nThis skill recreates **static image ads** across languages. Its asset gate, contact\nsheets, OCR sweep, and fresh-source regeneration are image mechanics with no video\nequivalent. The campaign contract, source-to-ad-set mapping, lane parallelism,\nfilesystem-authoritative checkpoints, and reconciliation rules do generalize — but a\nvideo batch runs through `/video-ad-production`, where the footage is the same file in every\nlanguage, only overlay copy is localized, and the soundtrack stays in its source\nlanguage.\n\n## Establish the campaign contract\n\n1. Inventory the original source folders and sorted image basenames.\n2. Inspect sibling campaigns and the parent directory before assigning numbers —\n   reserve with the `ad-naming` tool (`naming.mjs reserve`, then `naming.mjs folder`),\n   per `foldering.json`'s global-sequence rules; never guess from the prompt.\n3. Map each source batch to one target folder, preserving description, ad count, date\n   suffix, and basename; replace only the leading language token — the `ad-naming`\n   tool's `naming.mjs inherit --filename \"<source>\" --market <code>` does exactly that\n   (`naming.json` § localization inheritance).\n4. Choose each target's language variant from `languages.json` — its codes and notes\n   (default scripts, variant defaults) are authoritative.\n5. Define the customer problem and desired action. Localize for the source promise and\n   the target market; do not translate mechanically when natural acquisition copy is\n   stronger and semantically faithful.\n6. Write `PROJECT_STATE.md` from [templates/PROJECT_STATE.md](templates/PROJECT_STATE.md)\n   before long production: absolute paths, mapping, numbering, checkpoint, attempts,\n   limits, QA state, and the exact next asset.\n7. Lock the ad-set distribution as well as the language total: map every source\n   basename to its ad-set position and reproduce that mapping in every target language.\n8. Decide whether the run is strict visual preservation or cultural creative\n   adaptation. For cultural adaptation, preserve the winning role of the scene while\n   replacing country-specific architecture, transit, people, styling, and hero\n   landmarks — see `static-image-craft` for the fidelity contract either way.\n\n## Allocate one language per lane\n\nFor multiple languages run in parallel:\n\n- Give each agent exactly one non-overlapping language directory and its complete\n  numbering range; keep one language on the root lane; reuse freed slots for the next\n  untouched language.\n- Give every lane the same recreation, attempt, QA, timing, and progress rules.\n- Never let two agents write the same language, folder, tracker, or final report.\n- The root coordinator reconciles progress from live filesystem counts; agent messages\n  and trackers can lag. An optional read-only auditor lane may rerun verification\n  after production but never edits language-owned records.\n- **Adaptive concurrency**: start with two image-generation lanes when the account\n  ceiling is unknown; add only one lane at a time, only after a stable batch\n  checkpoint; on concurrency errors, preserve the newest lane's checkpoint, pause it,\n  and return to the last stable count — report the rollback live. Distinguish a lane\n  limit from a global model limit and keep healthy lanes working.\n- Do not parallelize assets within one language unless the filesystem and copy ledger\n  are explicitly partitioned without collisions.\n\nKickoff prompts for both roles are in [templates/](templates/):\n[coordinator-kickoff.md](templates/coordinator-kickoff.md) and\n[language-worker-kickoff.md](templates/language-worker-kickoff.md). The role split,\nstate machines, and ownership rules they encode: the coordinator owns numbering,\nmanifests, `PROJECT_STATE.md`, reconciliation, user updates, and final cross-language\nQA; a language worker owns exactly one language root and all its evidence; an auditor\nowns nothing and verifies everything.\n\n## Recreate every asset fresh from its source\n\nFor each source image, in sorted filename order:\n\n1. View the original at full resolution.\n2. Extract the scene, subject/object count, crop, palette, hierarchy, CTA, any\n   checkbox or UI state, brand treatment, and exact message.\n3. Lock concise, natural target-language copy before generating, preserving the\n   brand's protected Latin tokens; record it in the translation-provenance ledger.\n4. Generate one completely fresh image using only the corresponding original source as\n   the image reference — the fresh-source contract in `static-image-craft` § Track B.\n5. Require the original concept and hierarchy, the exact locked copy, mobile-safe\n   margins, the campaign's geometry, and no source-language residue, extra words,\n   watermark, or production instructions.\n6. Inspect the result visually before filing: every glyph, line, brand name, CTA,\n   crop, object count, face, and hand.\n7. Validate against the asset gate in the `juicylucy` skill's `evidence.json`.\n8. Copy the accepted image to the exact final filename (leave the generated original\n   in place) and record the file, hash, attempt count, and any platform event.\n\nA defective output is discarded and recreated fresh from the original source — never\nrepaired in place, never used as a reference. Attempt limits and their accounting are\nin [references/qa-and-records.md](references/qa-and-records.md); under a strict\ncampaign contract the limit is two image-producing attempts, then a recorded terminal\nfailure.\n\nSave each accepted result immediately: a long orchestration stream may close while the\nfilesystem checkpoint is healthy.\n\n## Resume after interruption\n\n1. Audit the live filesystem by language and destination basename.\n2. Reconstruct the expected source-to-target mapping.\n3. Queue only missing destinations; skip every existing accepted final.\n4. Keep the same prompt contract, source reference, language, market, and filename.\n5. Report recovered and missing totals before restarting generation.\n\nFilesystem checkpoints are authoritative. Never restart a batch because a host stream,\ncell, or progress display ended, and never resume from chat memory alone.\n\n## Run QA at three levels\n\n**Asset gate** — every accepted file passes the gate in `evidence.json` plus:\ncorrect target-language prefix with unchanged basename and date suffix, exact copy and\nbrand spelling by full-resolution review, and no unintended source-language copy,\nextra text, clipping, malformed glyphs, or material scene drift.\n\n**Batch gate** — after each batch: compare complete source and target basename sets;\nverify the expected count; verify unique SHA-256 hashes; regenerate the contact sheet\n(`adspython <SKILL_DIR>/scripts/make_contact_sheets.py <language root> --output <language root>/.qa/contact-sheets`)\nand review every tile; write the batch QA record before advancing.\n\n**Language and project gates** — after a language completes, run the manifest-based\nverifier; before handoff, independently reconcile every language, folder, image,\nmapping, and hash across the project. Never declare completion from agent reports\nalone. Manifest formats and verifier invocations:\n[references/manifests.md](references/manifests.md), with fill-in templates at\n[templates/LANGUAGE_MANIFEST.json](templates/LANGUAGE_MANIFEST.json) and\n[templates/CAMPAIGN_MANIFEST.json](templates/CAMPAIGN_MANIFEST.json). Evidence package and accounting:\n[references/qa-and-records.md](references/qa-and-records.md).\n\nFor exact-dimension campaigns, verify the literal width and height, not only the ratio\nrange — generators return canvases a pixel or two short; normalize only accepted\nimages at export per `static-image-craft` § canvas drift, then re-verify.\n\nMechanical QA covers every file. Visual QA is described accurately: either every final\nimage and contact sheet was inspected, or the review is explicitly called\nrepresentative sampling. Never imply a sample covered all assets.\n\nWhen any lane, OCR, sync, tracker, uploader, transport, or capacity incident occurs,\nact per [references/incident-response.md](references/incident-response.md).\n\n## Maintain live recovery state\n\n- Update the user at material checkpoints: saved ads, completed ad sets, remaining\n  work, active QA, capacity state.\n- Update `PROJECT_STATE.md` after each batch, retry, lane change, limit event, and QA\n  milestone.\n- Record exact token usage only when the runtime exposes it; otherwise write\n  `Unavailable from runtime` — never estimate.\n- Count idle per the accounting rules in\n  [references/qa-and-records.md](references/qa-and-records.md).\n- If the user requests uninterrupted local work, keep the machine awake with the\n  platform-appropriate mechanism until told to stop, and never restart a production\n  app mid-run when the user has deferred restart.\n\n## Reconcile production and uploader counts\n\nWhat counts as a final ad, and the two-totals rule, are `evidence.json` §\n`counting_rule`. Before announcing or importing a campaign:\n\n1. Report localized totals separately from source-original totals.\n2. Compare filesystem counts to the locked campaign manifest.\n3. Open and decode every final file so cloud placeholders or incomplete sync cannot\n   pass as available assets.\n4. Compare uploader-created ad sets and ads to the same manifest **after the uploader\n   finishes** — a mid-flight count is progress, not a total.\n5. On disagreement, identify the exact missing language, ad-set numbers, and basenames\n   rather than quoting one recursive count.\n\n## Optimize for business performance\n\nPreserve the source offer while making target copy sound native, specific, and\naction-oriented; keep problem, mechanism, user control, proof, and CTA scannable on\nmobile; prefer short copy that fits cleanly over literal wording that cramps layouts.\nBenefit emphasis comes from the brand's `copy-patterns.md`, capability claims from its\n`product-truth.md` — never invent claims, guarantees, or platform affiliations.\n\nAfter launch, connect results back to stable creative filenames per\n[references/performance-feedback.md](references/performance-feedback.md). The\nobjective is profitable acquisition, not asset volume.\n\nTo measure this workflow itself against a human baseline — a new script, a new\nmarket, a new generation model — run the blind benchmark in\n[references/benchmarking.md](references/benchmarking.md).\n"
}

SHA-256 of public snapshot: 1dd4cb033999d5c13ddcd243203c1ed8371a824fa7051ecefe9e1b61d966c8b4