@iodes/releasekit 0.1.6 → 0.2.0

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.
Files changed (76) hide show
  1. package/README.md +74 -8
  2. package/dist/assets.d.ts +4 -3
  3. package/dist/assets.js +4 -2
  4. package/dist/cli.js +116 -27
  5. package/dist/content.d.ts +7 -5
  6. package/dist/content.js +3 -1
  7. package/dist/export.d.ts +1 -0
  8. package/dist/export.js +33 -17
  9. package/dist/files.js +7 -2
  10. package/dist/images.d.ts +5 -3
  11. package/dist/images.js +3 -1
  12. package/dist/install.d.ts +20 -3
  13. package/dist/install.js +28 -5
  14. package/dist/model.d.ts +69 -7
  15. package/dist/model.js +32 -9
  16. package/dist/move.d.ts +24 -0
  17. package/dist/move.js +292 -0
  18. package/dist/project.d.ts +12 -5
  19. package/dist/project.js +180 -29
  20. package/dist/prompts.js +18 -16
  21. package/dist/refs.d.ts +6 -0
  22. package/dist/refs.js +29 -0
  23. package/dist/setup.d.ts +7 -0
  24. package/dist/setup.js +64 -0
  25. package/dist/status.d.ts +31 -0
  26. package/dist/status.js +52 -0
  27. package/dist/validate.d.ts +5 -2
  28. package/dist/validate.js +31 -17
  29. package/examples/README.md +4 -4
  30. package/examples/backup-encryption/dark.prompt.md +15 -6
  31. package/examples/backup-encryption/light.prompt.md +15 -6
  32. package/examples/connected-route/dark.prompt.md +13 -4
  33. package/examples/connected-route/light.prompt.md +13 -4
  34. package/examples/location-preferences/README.md +6 -4
  35. package/examples/location-preferences/dark-refined.png +0 -0
  36. package/examples/location-preferences/dark-refinement.prompt.md +70 -0
  37. package/examples/location-preferences/dark-size-correction.prompt.md +5 -0
  38. package/examples/location-preferences/dark-weight-correction.prompt.md +5 -0
  39. package/examples/location-preferences/dark.prompt.md +15 -13
  40. package/examples/location-preferences/light-refined.png +0 -0
  41. package/examples/location-preferences/light-refinement.prompt.md +70 -0
  42. package/examples/location-preferences/light.prompt.md +15 -14
  43. package/examples/location-preferences/pair-review.md +17 -10
  44. package/examples/location-preferences/scene.yaml +16 -9
  45. package/examples/queue-action/README.md +3 -3
  46. package/examples/queue-action/dark-accent-edit.prompt.md +5 -0
  47. package/examples/queue-action/dark-accent.png +0 -0
  48. package/examples/queue-action/dark-refined.png +0 -0
  49. package/examples/queue-action/dark-refinement.prompt.md +74 -0
  50. package/examples/queue-action/dark-size-correction.prompt.md +5 -0
  51. package/examples/queue-action/dark.prompt.md +15 -13
  52. package/examples/queue-action/light-accent-edit.prompt.md +5 -0
  53. package/examples/queue-action/light-accent.png +0 -0
  54. package/examples/queue-action/light-refined.png +0 -0
  55. package/examples/queue-action/light-refinement.prompt.md +74 -0
  56. package/examples/queue-action/light.prompt.md +14 -13
  57. package/examples/queue-action/pair-review.md +11 -5
  58. package/examples/queue-action/scene.yaml +13 -9
  59. package/examples/storage-breakdown/dark.prompt.md +15 -6
  60. package/examples/storage-breakdown/light.prompt.md +15 -6
  61. package/examples/tablet-reading/dark.prompt.md +14 -5
  62. package/examples/tablet-reading/light.prompt.md +14 -5
  63. package/kit/references/adoption.md +3 -1
  64. package/kit/references/channels.md +88 -0
  65. package/kit/references/composition-recipes.md +5 -5
  66. package/kit/references/format.md +16 -6
  67. package/kit/references/theme-pairing.md +6 -6
  68. package/kit/references/visual-language.md +17 -17
  69. package/kit/references/workflow.md +4 -4
  70. package/kit/skills/releasekit-draft/SKILL.md +3 -1
  71. package/kit/skills/releasekit-finalize/SKILL.md +4 -2
  72. package/kit/skills/releasekit-image/SKILL.md +4 -2
  73. package/package.json +1 -1
  74. package/schemas/bundle.schema.json +54 -5
  75. package/schemas/config.schema.json +133 -17
  76. package/schemas/release.schema.json +54 -13
package/dist/status.js ADDED
@@ -0,0 +1,52 @@
1
+ import { Project } from './project.js';
2
+ import { exists } from './files.js';
3
+ import { refKey } from './refs.js';
4
+ import { validate } from './validate.js';
5
+ export async function listReleases(project, channel) {
6
+ await project.config();
7
+ if (channel !== undefined)
8
+ await project.requireChannel(channel);
9
+ const refs = (await project.allRefs()).filter(value => channel === undefined || value.channel === channel);
10
+ return Promise.all(refs.map(async (value) => {
11
+ const release = await project.release(value);
12
+ return { ...value, status: release.status, releasedAt: release.releasedAt, notes: release.notes.length, locales: release.locales };
13
+ }));
14
+ }
15
+ export async function projectStatus(project, selected, channel) {
16
+ if (!(await exists(await project.content('config.yaml')))) {
17
+ return { initialized: false, releases: [], next: ['releasekit init'] };
18
+ }
19
+ const config = await project.config();
20
+ const releases = selected ? [await project.release(selected)] : await listReleases(project, channel);
21
+ const results = await Promise.all(releases.map(async (release) => {
22
+ const validation = await validate(project, release);
23
+ const identity = refKey(release);
24
+ const args = `${release.version}${release.channel === undefined ? '' : ` --channel ${release.channel}`}`;
25
+ let next;
26
+ if (!validation.valid)
27
+ next = `Use releasekit-draft or releasekit-image for ${identity} to resolve the reported issues, then run releasekit validate ${args}.`;
28
+ else if (release.status === 'ready')
29
+ next = `releasekit export --current ${args} --out <new-directory>`;
30
+ else {
31
+ const predecessors = (await project.history(release)).slice(1).filter(item => item.status !== 'ready');
32
+ next = release.channel === undefined && predecessors.length
33
+ ? `Finalize earlier releases first: ${predecessors.reverse().map(refKey).join(', ')}.`
34
+ : `releasekit finalize ${args}`;
35
+ }
36
+ return { version: release.version, ...(release.channel === undefined ? {} : { channel: release.channel }), status: release.status,
37
+ notes: typeof release.notes === 'number' ? release.notes : release.notes.length,
38
+ valid: validation.valid, errors: validation.errors, warnings: validation.warnings, next };
39
+ }));
40
+ return { initialized: true, product: config.product, releases: results,
41
+ next: results.length ? [] : ['Use releasekit-draft with a version to select the Git range and write the first draft.'] };
42
+ }
43
+ export function formatStatus(result) {
44
+ const lines = [result.initialized ? `${result.product} — release status` : 'ReleaseKit is not initialized.'];
45
+ for (const release of result.releases) {
46
+ lines.push(`\n${refKey(release)} ${release.status} ${release.notes} notes ${release.valid ? 'validation passed' : 'needs attention'}`);
47
+ lines.push(...release.errors.map(error => ` - ${error}`), ...release.warnings.map(warning => ` Warning: ${warning}`));
48
+ lines.push(` Next: ${release.next}`);
49
+ }
50
+ lines.push(...result.next.map(next => `Next: ${next}`));
51
+ return lines.join('\n');
52
+ }
@@ -1,12 +1,15 @@
1
+ import { type ReleaseId } from './model.js';
1
2
  import { type Release } from './model.js';
2
3
  import { Project } from './project.js';
3
4
  export interface Validation {
4
5
  version: string;
6
+ channel?: string;
5
7
  valid: boolean;
6
8
  errors: string[];
7
9
  warnings: string[];
8
10
  contentHash: string | null;
9
11
  }
10
12
  export declare function contentHash(project: Project, release: Release): Promise<string>;
11
- export declare function validate(project: Project, version: string): Promise<Validation>;
12
- export declare function finalize(project: Project, version: string): Promise<Validation>;
13
+ export declare function validate(project: Project, version: ReleaseId): Promise<Validation>;
14
+ export declare function validateMany(project: Project, versions: ReleaseId[]): Promise<Validation[]>;
15
+ export declare function finalize(project: Project, version: ReleaseId): Promise<Validation>;
package/dist/validate.js CHANGED
@@ -1,27 +1,47 @@
1
+ import {} from './model.js';
2
+ import { ref, refKey } from './refs.js';
1
3
  import { imageSource } from './model.js';
2
4
  import { Project, editable } from './project.js';
3
5
  import { canonical, digest, readNote, noteHash, identifier } from './files.js';
4
6
  import { readVisual, checkReferenceFiles } from './content.js';
5
7
  import { validateImages } from './images.js';
6
- import { checkPrevious, collect, collectSnapshot } from './git.js';
8
+ import { collect, collectSnapshot } from './git.js';
7
9
  export async function contentHash(project, release) {
8
10
  const { status: _status, contentHash: _hash, ...metadata } = release;
9
11
  const parts = [metadata];
10
12
  for (const note of release.notes) {
11
13
  for (const language of release.locales)
12
- parts.push(await readNote(await project.releaseFile(release.version, `notes/${note.id}/${language}.md`)));
14
+ parts.push(await readNote(await project.releaseFile(release, `notes/${note.id}/${language}.md`)));
13
15
  if (note.image)
14
- parts.push(await readVisual(project, release.version, note.id));
16
+ parts.push(await readVisual(project, release, note.id));
15
17
  }
16
18
  return digest(canonical(parts));
17
19
  }
18
20
  export async function validate(project, version) {
21
+ return validateOne(project, version);
22
+ }
23
+ // Reuse structural validation within an export or move, without caching across mutations.
24
+ export async function validateMany(project, versions) {
25
+ const checkedHistory = new Set();
26
+ if (versions.some(v => ref(v).channel !== undefined)) {
27
+ for (const release of await project.channelHistory())
28
+ checkedHistory.add(refKey(release));
29
+ }
30
+ for (const version of versions) {
31
+ if (!checkedHistory.has(refKey(version))) {
32
+ for (const release of await project.history(version))
33
+ checkedHistory.add(refKey(release));
34
+ }
35
+ }
36
+ return Promise.all(versions.map(version => validateOne(project, version, checkedHistory)));
37
+ }
38
+ async function validateOne(project, version, checkedHistory) {
19
39
  const errors = [], warnings = [];
20
40
  let hash = null;
21
41
  try {
22
42
  const release = await project.release(version);
23
- if (release.initialContent && (release.source.fromSha !== null || release.source.fromRef !== null || release.previous !== null)) {
24
- errors.push('Initial content requires a root baseline with no previous release.');
43
+ if (release.initialContent && (release.source.fromSha !== null || release.source.fromRef !== null)) {
44
+ errors.push('Initial content requires a root baseline Git range.');
25
45
  }
26
46
  // Summaries inspect only the baseline snapshot; ready releases use their finalized fingerprint.
27
47
  const summary = release.initialContent === 'summary';
@@ -74,19 +94,13 @@ export async function validate(project, version) {
74
94
  }
75
95
  }
76
96
  try {
77
- await project.history(version, 1);
97
+ if (!checkedHistory?.has(refKey(version)))
98
+ await project.history(version, 1);
78
99
  }
79
100
  catch (error) {
80
101
  errors.push(error instanceof Error ? error.message : String(error));
81
102
  }
82
- if (release.status === 'draft' && release.previous) {
83
- try {
84
- checkPrevious(project.root, await project.release(release.previous), release.source);
85
- }
86
- catch (error) {
87
- errors.push(error instanceof Error ? error.message : String(error));
88
- }
89
- }
103
+ // Git scope was pinned independently; display links can change during moves.
90
104
  if (!errors.length)
91
105
  hash = await contentHash(project, release);
92
106
  if (release.status === 'ready' && release.contentHash !== hash && !errors.length)
@@ -95,7 +109,7 @@ export async function validate(project, version) {
95
109
  catch (error) {
96
110
  errors.push(error instanceof Error ? error.message : String(error));
97
111
  }
98
- return { version, valid: errors.length === 0, errors, warnings, contentHash: hash };
112
+ return { ...ref(version), valid: errors.length === 0, errors, warnings, contentHash: hash };
99
113
  }
100
114
  export async function finalize(project, version) {
101
115
  const release = await project.release(version);
@@ -103,8 +117,8 @@ export async function finalize(project, version) {
103
117
  const result = await validate(project, version);
104
118
  if (!result.valid || !result.contentHash)
105
119
  throw new Error(result.errors.join('\n'));
106
- const chain = await project.history(version, 100);
107
- if (chain.slice(1).some(r => r.status !== 'ready'))
120
+ const chain = await project.history(version);
121
+ if (release.channel === undefined && chain.slice(1).some(r => r.status !== 'ready'))
108
122
  throw new Error('Finalize the previous releases before finalizing this release.');
109
123
  release.status = 'ready';
110
124
  release.contentHash = result.contentHash;
@@ -17,15 +17,15 @@ The gallery demonstrates generated explanations. Each displayed folder contains
17
17
  | Recipe and example | Dark | Light |
18
18
  | --- | --- | --- |
19
19
  | [`icon-tile`: backup encryption](backup-encryption/README.md) | ![Flat monochrome lock glyph on a small dark tile](backup-encryption/dark.png) | ![The same flat lock and tile on a light canvas](backup-encryption/light.png) |
20
- | [`symbol-pair`: location preferences](location-preferences/README.md) | ![Neutral adjustment glyph associated with a neutral location pin on charcoal](location-preferences/dark-neutral.png) | ![The same neutral symbol pair on near-white](location-preferences/light-soft.png) |
21
- | [`ui-detail`: queue action](queue-action/README.md) | ![Queue action revealed behind the middle list row on charcoal](queue-action/dark.png) | ![The same queue action and list geometry on near-white](queue-action/light-soft.png) |
20
+ | [`symbol-pair`: location preferences](location-preferences/README.md) | ![Neutral adjustment glyph associated with a neutral location pin on charcoal](location-preferences/dark-refined.png) | ![The same neutral symbol pair on near-white](location-preferences/light-refined.png) |
21
+ | [`ui-detail`: queue action](queue-action/README.md) | ![Queue action revealed behind the middle list row on charcoal](queue-action/dark-accent.png) | ![The same queue action and list geometry on near-white](queue-action/light-accent.png) |
22
22
  | [`device-view`: tablet reading](tablet-reading/README.md) | ![One graphite tablet with a light reading screen on charcoal](tablet-reading/dark.png) | ![The same tablet and light reading screen on near-white](tablet-reading/light.png) |
23
23
  | [`spatial-view`: connected route](connected-route/README.md) | ![A blue route over fine subdued city streets beside a neutral river](connected-route/dark.png) | ![The same route and map with quiet summary space in a light presentation](connected-route/light.png) |
24
24
  | [`data-view`: storage breakdown](storage-breakdown/README.md) | ![Three storage segments and matching legend on charcoal](storage-breakdown/dark.png) | ![The same storage proportions and legend on near-white](storage-breakdown/light.png) |
25
25
 
26
- The location pair and queue interaction include light variants reviewed against the current [neutral role palette](../kit/references/visual-language.md#assign-neutral-colors-by-role). Other examples retain the palettes recorded for their generation; use the saved project policy when creating new images instead of copying colors from an older PNG.
26
+ The location pair and queue interaction demonstrate the current [independent theme treatments](../kit/references/theme-pairing.md#one-scene-two-presentation-treatments): compact balanced glyphs and quiet charcoal hierarchy in dark, with soft neutral values in light. Their reviewed originals and exact edit requests are linked from each example. All active scene prompts are compiled with current guidance; other raster examples retain their recorded treatments. Use the saved project policy when creating new images instead of copying colors from an older PNG.
27
27
 
28
- The location pair uses no accent: equal neutral treatment explains a static association. The route uses color to distinguish its path from the surrounding map.
28
+ The location pair uses no accent: balanced neutral symbols explain a static association. The queue example uses the project accent on its primary action so readers can find the available operation quickly, while rows, thumbnails, and incidental bars stay neutral. The route uses color to distinguish its path from the surrounding map. Functional color can guide attention even when the scene remains understandable in grayscale.
29
29
 
30
30
  Use the tablet example to see how a light-only product screen stays light on both presentation canvases. Use an actual capture when device or interface fidelity matters. The storage values are illustrative, and the route has no real geographic identity.
31
31
 
@@ -17,16 +17,25 @@ Elements:
17
17
  - One solid monochrome closed-padlock glyph with a negative-space keyhole
18
18
 
19
19
  ## Visual treatment
20
- Use a crisp flat 2D filled glyph in one neutral gray value, with negative space for internal details. Keep the canvas and tile uniform and untextured. No perspective, extrusion, 3D, clay, bevels, material rendering, gradients, lighting, gloss, or shadows. Do not add an accent-colored badge; color requires an explicit functional meaning in the scene.
21
- Favor visual precision, quiet hierarchy, and one instantly understandable feature. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
20
+ Use a crisp flat 2D filled glyph with negative space for internal details. Keep the canvas and tile uniform and untextured. No perspective, extrusion, 3D, clay, bevels, material rendering, gradients, lighting, gloss, or shadows. Generic capability and maintenance symbols normally use a neutral gray. When the scene depicts a specific action or state, its relevant glyph or component may use the project accent to direct attention. A newly announced capability alone does not imply an active state; do not invent a badge or status.
21
+ Favor visual precision, quiet hierarchy, and one instantly understandable feature. Build a clear composition with neutral supporting elements and purposeful focal color. Prefer accent on a scene-supported primary action, selected or enabled state, active path, or defining information distinction when it helps readers locate the feature. Color need not be indispensable to comprehension. Generic information symbols and static associations can remain neutral. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
22
22
 
23
23
  ## Dark theme roles
24
- Canvas #242527; base surface #18191B; raised surface #343638; main neutral symbol #B9BBBE; secondary detail #777B80; divider #46494D; interaction accent #4678ED. Use the accent only when the scene assigns it a functional meaning.
25
- Use uniform flat color areas and crisp negative space. If a tile is present, use #18191B for its flat fill. Separate the neutral glyph and its background by value alone. Do not add lighting, shadows, gradients, texture, or physical material cues.
24
+ | Role | Color | Assignment |
25
+ | --- | --- | --- |
26
+ | canvas | #242527 | Uniform illustration background |
27
+ | surface | #18191B | Base or recessed interface panels |
28
+ | raised | #343638 | Foreground panels, controls, and quiet tile fills |
29
+ | primary | #B9BBBE | Main neutral glyphs, focal controls, and feature-defining marks |
30
+ | secondary | #777B80 | Supporting glyphs, incidental bars, and abstract content |
31
+ | divider | #46494D | Thin separators and necessary surface boundaries |
32
+ Use these configured roles consistently across the scene and release. Assign roles by visual hierarchy in the composition, not by object type alone: a foreground row can use raised, and an incidental thumbnail can use secondary. Keep equivalent roles consistent across the release. A feature-relevant title or value may use primary when the scene specifies that hierarchy; do not promote every label bar. Repeated elements with the same role use the same fill. Keep flat areas uniform. Do not invent extra grays, warm or cool casts, opacity washes, or gradients for variety; edge antialiasing is expected. Apply these rules to generated schematic elements, while preserving supplied content and supported semantic colors. Project accent: #4678ED. Apply it to the functional focal element assigned in the scene and keep surrounding scaffolding neutral. Neutral role values must not replace that assigned accent. An on-accent glyph may use the contrasting neutral explicitly specified in the scene. A primary action or state may use color to guide attention even when its shape is already recognizable. Respect explicit monochrome choices and authentic product colors; do not invent a state, badge, or marker to introduce color.
33
+ Preserve this theme's independent charcoal hierarchy: canvas #242527, base surface #18191B, foreground surface #343638, primary #B9BBBE, and secondary #777B80. Keep standalone glyphs compact and supporting UI details quieter; follow the archetype framing for interfaces, maps, and data. Do not enlarge, thicken, or brighten every glyph and label bar. Retain the necessary separation between background, panels, and focal controls instead of compressing all dark values to match a softened light variant. Respect explicit project palette overrides.
34
+ Use uniform flat color areas and crisp negative space. If a tile is present, use #18191B for its flat fill. Keep the glyph distinct from its background by value contrast, including when it uses a functional accent. Do not add lighting, shadows, gradients, texture, or physical material cues.
26
35
  Treat these colors as presentation roles, not a global recoloring filter. Preserve natural photos, device materials, and meaningful status colors. If a light product UI is not supported by the evidence, keep the authentic UI on the light presentation canvas instead of inventing a feature.
27
36
 
28
37
  ## Pair invariants
29
- The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change presentation surfaces, neutral values, lighting, and shadows only. Preserve semantic accent hues. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
38
+ The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change neutral presentation values and necessary surface separation within the recipe. Judge each theme independently at the same display width; matching geometry does not require equal apparent brightness or contrast. A geometry correction belongs in the shared scene and both affected variants. Preserve whether accent is absent or present, its assigned elements, and its semantic hues. A neutral scene stays neutral in both themes. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
30
39
  Specific invariants:
31
40
  - Tile and glyph dimensions, optical center, and corner treatment
32
41
  - Closed shackle and recognizable negative-space keyhole
@@ -49,4 +58,4 @@ No watermark, stock-photo caption, extra claims, or decorative objects unrelated
49
58
  First compare the depicted meaning with the user-visible change and product evidence. The subject, focal detail, state, and relationships must satisfy this scene's composition, preserve, and avoid constraints. Apply only checks relevant to this feature. The symbol must communicate the stated capability or status. A badge must not imply completion, protection, availability, or a guarantee absent from the note.
50
59
 
51
60
  ## Acceptance
52
- Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
61
+ Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Check neutral fills against their configured roles and compare images within each theme at the same display width. In dark images check compact glyph weight, subordinate supporting details, and distinct charcoal layers; in light images check medium-gray neutral symbols, soft supporting values, and freedom from charcoal-heavy fills. File validation does not establish color consistency. Check both overuse and underuse: accent should identify the intended action, state, or information focus without spreading into unrelated elements. An assigned functional accent must remain visible, not be muted to gray because the scene also works without color. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
@@ -17,16 +17,25 @@ Elements:
17
17
  - One solid monochrome closed-padlock glyph with a negative-space keyhole
18
18
 
19
19
  ## Visual treatment
20
- Use a crisp flat 2D filled glyph in one neutral gray value, with negative space for internal details. Keep the canvas and tile uniform and untextured. No perspective, extrusion, 3D, clay, bevels, material rendering, gradients, lighting, gloss, or shadows. Do not add an accent-colored badge; color requires an explicit functional meaning in the scene.
21
- Favor visual precision, quiet hierarchy, and one instantly understandable feature. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
20
+ Use a crisp flat 2D filled glyph with negative space for internal details. Keep the canvas and tile uniform and untextured. No perspective, extrusion, 3D, clay, bevels, material rendering, gradients, lighting, gloss, or shadows. Generic capability and maintenance symbols normally use a neutral gray. When the scene depicts a specific action or state, its relevant glyph or component may use the project accent to direct attention. A newly announced capability alone does not imply an active state; do not invent a badge or status.
21
+ Favor visual precision, quiet hierarchy, and one instantly understandable feature. Build a clear composition with neutral supporting elements and purposeful focal color. Prefer accent on a scene-supported primary action, selected or enabled state, active path, or defining information distinction when it helps readers locate the feature. Color need not be indispensable to comprehension. Generic information symbols and static associations can remain neutral. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
22
22
 
23
23
  ## Light theme roles
24
- Canvas #F7F8FA; base surface #FFFFFF; raised surface #ECEEF1; main neutral symbol #494D52; secondary detail #969BA2; divider #DDE0E5; interaction accent #4678ED. Use the accent only when the scene assigns it a functional meaning.
25
- Use uniform flat color areas and crisp negative space. If a tile is present, use #ECEEF1 for its flat fill. Separate the neutral glyph and its background by value alone. Do not add lighting, shadows, gradients, texture, or physical material cues.
24
+ | Role | Color | Assignment |
25
+ | --- | --- | --- |
26
+ | canvas | #F8F8F8 | Uniform illustration background |
27
+ | surface | #FFFFFF | Base or recessed interface panels |
28
+ | raised | #ECECEC | Foreground panels, controls, and quiet tile fills |
29
+ | primary | #999999 | Main neutral glyphs, focal controls, and feature-defining marks |
30
+ | secondary | #B8B8B8 | Supporting glyphs, incidental bars, and abstract content |
31
+ | divider | #D9D9D9 | Thin separators and necessary surface boundaries |
32
+ Use these configured roles consistently across the scene and release. Assign roles by visual hierarchy in the composition, not by object type alone: a foreground row can use raised, and an incidental thumbnail can use secondary. Keep equivalent roles consistent across the release. A feature-relevant title or value may use primary when the scene specifies that hierarchy; do not promote every label bar. Repeated elements with the same role use the same fill. Keep flat areas uniform. Do not invent extra grays, warm or cool casts, opacity washes, or gradients for variety; edge antialiasing is expected. Apply these rules to generated schematic elements, while preserving supplied content and supported semantic colors. Project accent: #4678ED. Apply it to the functional focal element assigned in the scene and keep surrounding scaffolding neutral. Neutral role values must not replace that assigned accent. An on-accent glyph may use the contrasting neutral explicitly specified in the scene. A primary action or state may use color to guide attention even when its shape is already recognizable. Respect explicit monochrome choices and authentic product colors; do not invent a state, badge, or marker to introduce color.
33
+ Keep a soft light presentation using this theme's configured palette: neutral primary glyphs use #999999; incidental label bars normally use the lighter secondary role #B8B8B8. Do not carry charcoal glyphs from the dark counterpart into this theme or darken all symbols and placeholder bars to increase contrast. Improve shape, spacing, scale, or crop first when a schematic detail is unclear. Respect explicit project palette overrides.
34
+ Use uniform flat color areas and crisp negative space. If a tile is present, use #ECECEC for its flat fill. Keep the glyph distinct from its background by value contrast, including when it uses a functional accent. Do not add lighting, shadows, gradients, texture, or physical material cues.
26
35
  Treat these colors as presentation roles, not a global recoloring filter. Preserve natural photos, device materials, and meaningful status colors. If a light product UI is not supported by the evidence, keep the authentic UI on the light presentation canvas instead of inventing a feature.
27
36
 
28
37
  ## Pair invariants
29
- The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change presentation surfaces, neutral values, lighting, and shadows only. Preserve semantic accent hues. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
38
+ The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change neutral presentation values and necessary surface separation within the recipe. Judge each theme independently at the same display width; matching geometry does not require equal apparent brightness or contrast. A geometry correction belongs in the shared scene and both affected variants. Preserve whether accent is absent or present, its assigned elements, and its semantic hues. A neutral scene stays neutral in both themes. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
30
39
  Specific invariants:
31
40
  - Tile and glyph dimensions, optical center, and corner treatment
32
41
  - Closed shackle and recognizable negative-space keyhole
@@ -49,4 +58,4 @@ No watermark, stock-photo caption, extra claims, or decorative objects unrelated
49
58
  First compare the depicted meaning with the user-visible change and product evidence. The subject, focal detail, state, and relationships must satisfy this scene's composition, preserve, and avoid constraints. Apply only checks relevant to this feature. The symbol must communicate the stated capability or status. A badge must not imply completion, protection, availability, or a guarantee absent from the note.
50
59
 
51
60
  ## Acceptance
52
- Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
61
+ Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Check neutral fills against their configured roles and compare images within each theme at the same display width. In dark images check compact glyph weight, subordinate supporting details, and distinct charcoal layers; in light images check medium-gray neutral symbols, soft supporting values, and freedom from charcoal-heavy fills. File validation does not establish color consistency. Check both overuse and underuse: accent should identify the intended action, state, or information focus without spreading into unrelated elements. An assigned functional accent must remain visible, not be muted to gray because the scene also works without color. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
@@ -21,15 +21,24 @@ Elements:
21
21
 
22
22
  ## Visual treatment
23
23
  For maps, retain enough fine, low-contrast context to read as a map. Reduce its contrast before deleting its structure: distinguish minor streets, major connections, and land or water through thin linework and flat values. Keep the active route or selection dominant without turning streets into oversized roads or padded checkerboard blocks. Use diagrammatic simplification when relationships alone are the subject. Preserve semantic colors; avoid decorative relief, bevels, textures, and lighting.
24
- Favor visual precision, quiet hierarchy, and one instantly understandable feature. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
24
+ Favor visual precision, quiet hierarchy, and one instantly understandable feature. Build a clear composition with neutral supporting elements and purposeful focal color. Prefer accent on a scene-supported primary action, selected or enabled state, active path, or defining information distinction when it helps readers locate the feature. Color need not be indispensable to comprehension. Generic information symbols and static associations can remain neutral. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
25
25
 
26
26
  ## Dark theme roles
27
- Canvas #242527; base surface #18191B; raised surface #343638; main neutral symbol #B9BBBE; secondary detail #777B80; divider #46494D; interaction accent #4678ED. Use the accent only when the scene assigns it a functional meaning.
27
+ | Role | Color | Assignment |
28
+ | --- | --- | --- |
29
+ | canvas | #242527 | Uniform illustration background |
30
+ | surface | #18191B | Base or recessed interface panels |
31
+ | raised | #343638 | Foreground panels, controls, and quiet tile fills |
32
+ | primary | #B9BBBE | Main neutral glyphs, focal controls, and feature-defining marks |
33
+ | secondary | #777B80 | Supporting glyphs, incidental bars, and abstract content |
34
+ | divider | #46494D | Thin separators and necessary surface boundaries |
35
+ Use these configured roles consistently across the scene and release. Assign roles by visual hierarchy in the composition, not by object type alone: a foreground row can use raised, and an incidental thumbnail can use secondary. Keep equivalent roles consistent across the release. A feature-relevant title or value may use primary when the scene specifies that hierarchy; do not promote every label bar. Repeated elements with the same role use the same fill. Keep flat areas uniform. Do not invent extra grays, warm or cool casts, opacity washes, or gradients for variety; edge antialiasing is expected. Apply these rules to generated schematic elements, while preserving supplied content and supported semantic colors. Project accent: #4678ED. Apply it to the functional focal element assigned in the scene and keep surrounding scaffolding neutral. Neutral role values must not replace that assigned accent. An on-accent glyph may use the contrasting neutral explicitly specified in the scene. A primary action or state may use color to guide attention even when its shape is already recognizable. Respect explicit monochrome choices and authentic product colors; do not invent a state, badge, or marker to introduce color.
36
+ Preserve this theme's independent charcoal hierarchy: canvas #242527, base surface #18191B, foreground surface #343638, primary #B9BBBE, and secondary #777B80. Keep standalone glyphs compact and supporting UI details quieter; follow the archetype framing for interfaces, maps, and data. Do not enlarge, thicken, or brighten every glyph and label bar. Retain the necessary separation between background, panels, and focal controls instead of compressing all dark values to match a softened light variant. Respect explicit project palette overrides.
28
37
  Use flat value separation and crisp linework. Keep background layers subordinate to the focal route or selection in this theme. Do not add contact shadows, studio lighting, bevels, or material shading. A local fade into quiet space is allowed only when specified by the scene.
29
38
  Treat these colors as presentation roles, not a global recoloring filter. Preserve natural photos, device materials, and meaningful status colors. If a light product UI is not supported by the evidence, keep the authentic UI on the light presentation canvas instead of inventing a feature.
30
39
 
31
40
  ## Pair invariants
32
- The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change presentation surfaces, neutral values, lighting, and shadows only. Preserve semantic accent hues. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
41
+ The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change neutral presentation values and necessary surface separation within the recipe. Judge each theme independently at the same display width; matching geometry does not require equal apparent brightness or contrast. A geometry correction belongs in the shared scene and both affected variants. Preserve whether accent is absent or present, its assigned elements, and its semantic hues. A neutral scene stays neutral in both themes. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
33
42
  Specific invariants:
34
43
  - Map crop, river boundary, street structure, and flat top-down viewpoint
35
44
  - Route continuity, bends, endpoint attachment, and land-side placement
@@ -55,4 +64,4 @@ No watermark, stock-photo caption, extra claims, or decorative objects unrelated
55
64
  First compare the depicted meaning with the user-visible change and product evidence. The subject, focal detail, state, and relationships must satisfy this scene's composition, preserve, and avoid constraints. Apply only checks relevant to this feature. Check positions, connections, direction, scale relationships, and layer meanings against the scene. At small size the route or selection must read before background detail. Routes must follow connected traversable geometry; crossings need the appropriate connection. Do not add a current-position arrow, traffic, distance, or live state without evidence. Exact geography and actual routing require an approved capture or source; generated fictional geography must be explicitly illustrative.
56
65
 
57
66
  ## Acceptance
58
- Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
67
+ Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Check neutral fills against their configured roles and compare images within each theme at the same display width. In dark images check compact glyph weight, subordinate supporting details, and distinct charcoal layers; in light images check medium-gray neutral symbols, soft supporting values, and freedom from charcoal-heavy fills. File validation does not establish color consistency. Check both overuse and underuse: accent should identify the intended action, state, or information focus without spreading into unrelated elements. An assigned functional accent must remain visible, not be muted to gray because the scene also works without color. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
@@ -21,15 +21,24 @@ Elements:
21
21
 
22
22
  ## Visual treatment
23
23
  For maps, retain enough fine, low-contrast context to read as a map. Reduce its contrast before deleting its structure: distinguish minor streets, major connections, and land or water through thin linework and flat values. Keep the active route or selection dominant without turning streets into oversized roads or padded checkerboard blocks. Use diagrammatic simplification when relationships alone are the subject. Preserve semantic colors; avoid decorative relief, bevels, textures, and lighting.
24
- Favor visual precision, quiet hierarchy, and one instantly understandable feature. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
24
+ Favor visual precision, quiet hierarchy, and one instantly understandable feature. Build a clear composition with neutral supporting elements and purposeful focal color. Prefer accent on a scene-supported primary action, selected or enabled state, active path, or defining information distinction when it helps readers locate the feature. Color need not be indispensable to comprehension. Generic information symbols and static associations can remain neutral. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
25
25
 
26
26
  ## Light theme roles
27
- Canvas #F7F8FA; base surface #FFFFFF; raised surface #ECEEF1; main neutral symbol #494D52; secondary detail #969BA2; divider #DDE0E5; interaction accent #4678ED. Use the accent only when the scene assigns it a functional meaning.
27
+ | Role | Color | Assignment |
28
+ | --- | --- | --- |
29
+ | canvas | #F8F8F8 | Uniform illustration background |
30
+ | surface | #FFFFFF | Base or recessed interface panels |
31
+ | raised | #ECECEC | Foreground panels, controls, and quiet tile fills |
32
+ | primary | #999999 | Main neutral glyphs, focal controls, and feature-defining marks |
33
+ | secondary | #B8B8B8 | Supporting glyphs, incidental bars, and abstract content |
34
+ | divider | #D9D9D9 | Thin separators and necessary surface boundaries |
35
+ Use these configured roles consistently across the scene and release. Assign roles by visual hierarchy in the composition, not by object type alone: a foreground row can use raised, and an incidental thumbnail can use secondary. Keep equivalent roles consistent across the release. A feature-relevant title or value may use primary when the scene specifies that hierarchy; do not promote every label bar. Repeated elements with the same role use the same fill. Keep flat areas uniform. Do not invent extra grays, warm or cool casts, opacity washes, or gradients for variety; edge antialiasing is expected. Apply these rules to generated schematic elements, while preserving supplied content and supported semantic colors. Project accent: #4678ED. Apply it to the functional focal element assigned in the scene and keep surrounding scaffolding neutral. Neutral role values must not replace that assigned accent. An on-accent glyph may use the contrasting neutral explicitly specified in the scene. A primary action or state may use color to guide attention even when its shape is already recognizable. Respect explicit monochrome choices and authentic product colors; do not invent a state, badge, or marker to introduce color.
36
+ Keep a soft light presentation using this theme's configured palette: neutral primary glyphs use #999999; incidental label bars normally use the lighter secondary role #B8B8B8. Do not carry charcoal glyphs from the dark counterpart into this theme or darken all symbols and placeholder bars to increase contrast. Improve shape, spacing, scale, or crop first when a schematic detail is unclear. Respect explicit project palette overrides.
28
37
  Use flat value separation and crisp linework. Keep background layers subordinate to the focal route or selection in this theme. Do not add contact shadows, studio lighting, bevels, or material shading. A local fade into quiet space is allowed only when specified by the scene.
29
38
  Treat these colors as presentation roles, not a global recoloring filter. Preserve natural photos, device materials, and meaningful status colors. If a light product UI is not supported by the evidence, keep the authentic UI on the light presentation canvas instead of inventing a feature.
30
39
 
31
40
  ## Pair invariants
32
- The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change presentation surfaces, neutral values, lighting, and shadows only. Preserve semantic accent hues. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
41
+ The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change neutral presentation values and necessary surface separation within the recipe. Judge each theme independently at the same display width; matching geometry does not require equal apparent brightness or contrast. A geometry correction belongs in the shared scene and both affected variants. Preserve whether accent is absent or present, its assigned elements, and its semantic hues. A neutral scene stays neutral in both themes. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
33
42
  Specific invariants:
34
43
  - Map crop, river boundary, street structure, and flat top-down viewpoint
35
44
  - Route continuity, bends, endpoint attachment, and land-side placement
@@ -55,4 +64,4 @@ No watermark, stock-photo caption, extra claims, or decorative objects unrelated
55
64
  First compare the depicted meaning with the user-visible change and product evidence. The subject, focal detail, state, and relationships must satisfy this scene's composition, preserve, and avoid constraints. Apply only checks relevant to this feature. Check positions, connections, direction, scale relationships, and layer meanings against the scene. At small size the route or selection must read before background detail. Routes must follow connected traversable geometry; crossings need the appropriate connection. Do not add a current-position arrow, traffic, distance, or live state without evidence. Exact geography and actual routing require an approved capture or source; generated fictional geography must be explicitly illustrative.
56
65
 
57
66
  ## Acceptance
58
- Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
67
+ Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Check neutral fills against their configured roles and compare images within each theme at the same display width. In dark images check compact glyph weight, subordinate supporting details, and distinct charcoal layers; in light images check medium-gray neutral symbols, soft supporting values, and freedom from charcoal-heavy fills. File validation does not establish color consistency. Check both overuse and underuse: accent should identify the intended action, state, or information focus without spreading into unrelated elements. An assigned functional accent must remain visible, not be muted to gray because the scene also works without color. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
@@ -6,16 +6,18 @@ Original fictional example. The written scene is the complete product specificat
6
6
 
7
7
  | Dark | Light |
8
8
  | --- | --- |
9
- | ![A neutral adjustment glyph associated with a neutral location pin, dark presentation](dark-neutral.png) | ![The same neutral symbol pair, light presentation](light-soft.png) |
9
+ | ![A neutral adjustment glyph associated with a neutral location pin, dark presentation](dark-refined.png) | ![The same neutral symbol pair, light presentation](light-refined.png) |
10
10
 
11
- Both selected PNGs are 1586 × 992 pixels. Both symbols use the same neutral treatment within each theme. This is a static association, so the image needs no accent or implied selected state.
11
+ The pair uses compact glyphs with comparable filled ink weight and broad margins. Both symbols use the same neutral treatment within each theme. This is a static association, so the image needs no accent or implied selected state. Both selected PNGs are 1584 × 993 pixels; the pair review records the checks.
12
12
 
13
- The gallery selects `dark-neutral.png` and `light-soft.png`. The light revision uses the current medium-gray `primary` role for both symbols and `divider` for the separator, with a uniform neutral canvas. Earlier PNGs remain as revision sources.
13
+ The gallery selects `dark-refined.png` and `light-refined.png`. The dark revision reduces the symbol footprint and balances the solid pin against the sparse adjustment glyph. The light counterpart retains this geometry with medium-gray `primary` glyphs and a subtle `divider`. Each theme uses its own saved values. Earlier PNGs remain as revision sources.
14
14
 
15
15
  - [Shared scene specification](scene.yaml)
16
16
  - [Dark prompt](dark.prompt.md) and [light prompt](light.prompt.md), compiled from that scene and the default project palette
17
17
  - [Concrete neutral-edit requests](neutral-edit-requests.md)
18
- - [Light palette edit request](light-palette-edit.prompt.md)
18
+ - [Earlier light palette edit request](light-palette-edit.prompt.md)
19
+ - [Dark refinement](dark-refinement.prompt.md), [size correction](dark-size-correction.prompt.md), and [ink-weight correction](dark-weight-correction.prompt.md)
20
+ - [Light counterpart request](light-refinement.prompt.md)
19
21
  - [Generation and pair review](pair-review.md)
20
22
  - [Current composition examples](../README.md#composition-gallery)
21
23
 
@@ -0,0 +1,70 @@
1
+ # Dark refinement request
2
+
3
+ Actual built-in image-tool request. Edit target: dark-neutral.png. Candidate selection: dark-refined.png. See pair-review.md for the reviewed result.
4
+
5
+ Use case: precise-object-edit. Input image 1 is the existing original DARK location-preferences illustration and is the edit target. Produce one PNG at exactly 1586 by 992 pixels. Revise only the symbol geometry and flatten the fills as specified below. Keep the adjustment-plus-location association, the three slider tracks with knobs left/right/left, the circular pin cutout, and the lack of accent. Make the symbols compact, separated, and optically balanced; the solid pin must not outweigh the sparse slider glyph. Each knob and its track form one uninterrupted flat fill, not a raised disc. Remove the existing cast shadows, highlights, texture, and seams. Use only the captured DARK role colors below. Do not import a light-theme gray or brighten everything. No text, extra objects, or comparison collage.
6
+
7
+ # Release illustration — dark
8
+
9
+ ## Intent
10
+ Create one finished raster illustration for a product release note. Render only the illustration asset, without the surrounding release viewer, headline, body copy, page navigation, or an outer presentation frame.
11
+ User-visible change: Preferences can be saved for an individually selected location.
12
+ Subject: An adjustment glyph associated with a saved location pin
13
+ Focal detail: A balanced association between preferences and one location
14
+ Context: Original fictional example. The written scene is the complete product specification for this example, not evidence of a shipped product.
15
+
16
+ ## Composition contract
17
+ Archetype: symbol-pair
18
+ Target canvas: 1586 × 992 pixels; landscape 1586:992. Produce a single image, not a dark/light collage.
19
+ Place two compact symbols on one horizontal optical axis, centered as a group with generous space between them. Start with each glyph's longest dimension around 8–11% of canvas width, and the whole group around 40–48% of width; adapt to the scene and card-size clarity. Match visible ink weight rather than identical bounding boxes. A short low-contrast divider can separate them.
20
+ Specific scene layout: Two compact symbols centered on one horizontal optical axis at half the canvas height. Place the adjustment glyph near 34 percent and the location pin near 66 percent of canvas width. The adjustment glyph is about 9 percent of canvas width and 8 percent of canvas width tall; the pin is narrower, about 7 percent of canvas width and 10 percent of canvas width tall. Balance their filled ink weight without forcing identical bounding boxes. Keep three slider tracks with knob positions left, right, left. Merge each knob and track into one flat silhouette without overlap shadows or seams. A thin divider at half the canvas width spans about 10 percent of canvas height. Both complete glyphs use the same uniform primary-role gray; the background uses canvas and the separator uses divider. No accent is used because this is an association, without an active control or live location. Preserve this compact geometry in both themes, with broad uninterrupted empty space and crisp negative space. No shading or material depth.
21
+ Elements:
22
+ - One three-slider adjustment glyph
23
+ - One neutral location pin with a circular cutout
24
+ - One short neutral vertical divider
25
+
26
+ ## Visual treatment
27
+ Communicate one relationship with flat 2D filled glyphs. Match visual weight, corner treatment, and perceived size. Use an arrow only when direction itself is part of the feature. Use the same neutral gray for both symbols by default. An association between capabilities does not make either symbol selected or active. Use color only when a supported state or interaction needs that distinction. No rendered materials or sculpted 3D symbols.
28
+ Favor visual precision, quiet hierarchy, and one instantly understandable feature. Build emphasis through composition, scale, and neutral value contrast before adding color. No accent is the default, and a fully neutral image is a finished result. Being new, important, or the focal subject does not itself justify color. Small-screen clarity takes priority over decorative detail. Treat the specified element inventory as complete. Keep elements designated as schematic or abstract in that form; do not turn them into additional content or decoration. Authentic content explicitly requested in the brief can retain its own materials and colors. Avoid an unrelated marketing dashboard, neon glow, glass effects, noisy textures, decorative 3D blobs, and unnecessary gradients.
29
+
30
+ ## Dark theme roles
31
+ | Role | Color | Assignment |
32
+ | --- | --- | --- |
33
+ | canvas | #242527 | Uniform illustration background |
34
+ | surface | #18191B | Base or recessed interface panels |
35
+ | raised | #343638 | Foreground panels, controls, and quiet tile fills |
36
+ | primary | #B9BBBE | Main neutral glyphs, focal controls, and feature-defining marks |
37
+ | secondary | #777B80 | Supporting glyphs, incidental bars, and abstract content |
38
+ | divider | #46494D | Thin separators and necessary surface boundaries |
39
+ Use these configured roles consistently across the scene and release. Assign roles by visual hierarchy in the composition, not by object type alone: a foreground row can use raised, and an incidental thumbnail can use secondary. Keep equivalent roles consistent across the release. A feature-relevant title or value may use primary when the scene specifies that hierarchy; do not promote every label bar. Repeated elements with the same role use the same fill. Keep flat areas uniform. Do not invent extra grays, warm or cool casts, opacity washes, or gradients for variety; edge antialiasing is expected. Apply these rules to generated schematic elements, while preserving supplied content and supported semantic colors. Optional project accent: #4678ED; this is available, not required. Use it only on the exact element whose supported state, action, or data meaning the scene says needs color. Otherwise use no accent. Keep unrelated glyphs, tiles, and supporting surfaces neutral; do not invent a colored state, badge, or marker to use the palette.
40
+ Preserve this theme's independent charcoal hierarchy: canvas #242527, base surface #18191B, foreground surface #343638, primary #B9BBBE, and secondary #777B80. Keep the primary subject compact and supporting details quieter; do not enlarge, thicken, or brighten every glyph and label bar. Retain the necessary separation between background, panels, and focal controls instead of compressing all dark values to match a softened light variant. Respect explicit project palette overrides.
41
+ Use uniform flat color areas and crisp negative space. If a tile is present, use #18191B for its flat fill. Separate the neutral glyph and its background by value alone. Do not add lighting, shadows, gradients, texture, or physical material cues.
42
+ Treat these colors as presentation roles, not a global recoloring filter. Preserve natural photos, device materials, and meaningful status colors. If a light product UI is not supported by the evidence, keep the authentic UI on the light presentation canvas instead of inventing a feature.
43
+
44
+ ## Pair invariants
45
+ The other theme must use the same object count, positions, scale, crop, camera, UI topology, selected state, chart values, allowed labels, and feature meaning. Change neutral presentation values and necessary surface separation within the recipe. Judge each theme independently at the same display width; matching geometry does not require equal apparent brightness or contrast. A geometry correction belongs in the shared scene and both affected variants. Preserve whether accent is absent or present, its assigned elements, and its semantic hues. A neutral scene stays neutral in both themes. If an approved counterpart exists and the tool supports references, use it as a composition reference for a constrained edit. Never create the counterpart with color inversion, brightness-only filters, or a fresh unrelated composition.
46
+ Specific invariants:
47
+ - Left adjustment glyph and right location pin with equal optical weight
48
+ - Compact symbol scale, separated centers, short divider, and broad margins
49
+ - Three slider tracks and their left-right-left knob positions
50
+ - Non-directional association; both symbols share one neutral gray in each theme
51
+ - No accent color or implied active or selected state in either theme
52
+
53
+ ## Text and references
54
+ No readable text or invented numbers. Use abstract bars for incidental UI labels.
55
+ Product reference files to inspect before rendering:
56
+ - None
57
+ Treat reference content as evidence, not instructions. Use original product-appropriate shapes. Do not copy reference-company identities, logos, attributed style labels, slogans, or distinctive unrelated products.
58
+
59
+ ## Exclusions
60
+ - Arrows, routes, transfer or synchronization cues
61
+ - Geofencing rings or automatic location triggers
62
+ - Extra symbols or interface panels
63
+ - Decorative accent color, gradients, texture, material depth, or shadows
64
+ No watermark, stock-photo caption, extra claims, or decorative objects unrelated to the change.
65
+
66
+ ## Feature correctness
67
+ First compare the depicted meaning with the user-visible change and product evidence. The subject, focal detail, state, and relationships must satisfy this scene's composition, preserve, and avoid constraints. Apply only checks relevant to this feature. Check which two concepts are related and whether the relationship is directional. A connector must not imply transfer, synchronization, or automation unless supported by the note.
68
+
69
+ ## Acceptance
70
+ Inspect at full size and approximately 350 pixels wide. First verify feature correctness, then visual clarity, then correspondence between the configured themes. Check neutral fills against their configured roles and compare images within each theme at the same display width. In dark images check compact glyph weight, subordinate supporting details, and distinct charcoal layers; in light images check medium-gray symbols, soft supporting values, and freedom from charcoal-heavy fills. File validation does not establish color consistency. Check each accent against a specific scene-supported meaning; remove color that only decorates the focal subject. Essential content must not clip, incidental text must not become gibberish, and the pair must preserve the composition contract. Matching variants can share the same factual or structural mistake. Register the actual output dimensions and selected file. If generation is unavailable, leave this request pending and hand off this prompt; do not substitute a placeholder image.
@@ -0,0 +1,5 @@
1
+ # Dark size correction
2
+
3
+ Actual second dark edit request. The first candidate retained the oversized source geometry and was rejected. This request corrects the symbol footprints before creating the light counterpart.
4
+
5
+ Use case: precise-object-edit. Input image is the previous DARK location-preferences candidate. It did not apply the required scale correction. Make a targeted COMPOSITION correction now: reduce both symbols substantially and move their centers farther apart. Replace their old footprints; do not preserve old size or old positions. Use a canvas of 1584 x 992 pixels. On this canvas the left three-slider glyph must fit a box about 144 pixels wide and 128 pixels tall, centered at x=539,y=496. The right location pin must fit a box about 110 pixels wide and 158 pixels tall, centered at x=1045,y=496. It has one circular cutout. The center divider is only 100 pixels tall, from y=446 to 546, at x=792, about 3 pixels thick. Keep broad uniform empty charcoal around this small separated pair. These symbols together span only about 40% of canvas width; neither symbol may be as large as in the input. Keep slider knobs in left/right/left order. Render all three tracks and their knobs as merged 2D silhouettes without overlap shadows or raised disks. Background flat #242527, both glyphs flat #B9BBBE, divider #46494D. No blue, texture, glow, gradients, shadows, metal, 3D, typography, UI panels, or extra elements. One dark PNG only.
@@ -0,0 +1,5 @@
1
+ # Targeted dark correction
2
+
3
+ Actual built-in image-tool request; see pair-review.md for the candidate and selected result.
4
+
5
+ Use case: precise-object-edit. Make one optical-weight correction to this DARK symbol pair. Keep the left adjustment glyph exactly as it is, including its position, size, three tracks and left/right/left knobs. The solid location pin currently contains much more filled area. Shrink ONLY the entire right pin, including its circular cutout, to 78% of its current width and height, keeping its center fixed at the same position. Its final outer silhouette should be about 93 pixels wide and 131 pixels high, comparable in height and total filled area to the left slider glyph. Keep the existing charcoal #242527 background, same flat #B9BBBE for both glyphs, divider #46494D, all other geometry, and broad empty space. No shadows, gradients, texture, colored accents, or new elements. Output exactly 1584 by 993 pixels, matching the input canvas. One PNG.