@iodes/releasekit 0.1.0 → 0.1.2
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.
- package/LICENSE +21 -21
- package/README.md +306 -110
- package/dist/cli.js +7 -5
- package/dist/content.d.ts +8 -0
- package/dist/content.js +5 -3
- package/dist/export.js +4 -3
- package/dist/git.d.ts +17 -6
- package/dist/git.js +9 -9
- package/dist/images.d.ts +14 -5
- package/dist/images.js +32 -8
- package/dist/model.d.ts +29 -19
- package/dist/model.js +27 -8
- package/dist/project.d.ts +1 -2
- package/dist/project.js +7 -12
- package/dist/prompts.d.ts +2 -2
- package/dist/prompts.js +24 -16
- package/dist/schema-export.js +9 -2
- package/dist/validate.js +10 -12
- package/examples/README.md +34 -14
- package/examples/backup-encryption/README.md +19 -0
- package/examples/backup-encryption/dark.png +0 -0
- package/examples/backup-encryption/dark.prompt.md +52 -0
- package/examples/backup-encryption/dimensions-edit.prompt.md +7 -0
- package/examples/backup-encryption/flat-render-requests.md +15 -0
- package/examples/backup-encryption/light.png +0 -0
- package/examples/backup-encryption/light.prompt.md +52 -0
- package/examples/backup-encryption/pair-review.md +18 -0
- package/examples/backup-encryption/scene.yaml +31 -0
- package/examples/connected-route/README.md +23 -0
- package/examples/connected-route/dark.png +0 -0
- package/examples/connected-route/dark.prompt.md +58 -0
- package/examples/connected-route/light.png +0 -0
- package/examples/connected-route/light.prompt.md +58 -0
- package/examples/connected-route/pair-review.md +22 -0
- package/examples/connected-route/render-requests.md +171 -0
- package/examples/connected-route/scene.yaml +59 -0
- package/examples/feature-briefs.yaml +96 -89
- package/examples/location-preferences/README.md +18 -0
- package/examples/location-preferences/dark.png +0 -0
- package/examples/location-preferences/dark.prompt.md +52 -0
- package/examples/location-preferences/light.png +0 -0
- package/examples/location-preferences/light.prompt.md +52 -0
- package/examples/location-preferences/pair-review.md +17 -0
- package/examples/location-preferences/scene.yaml +26 -0
- package/examples/provided-media/README.md +15 -0
- package/examples/provided-media/scene.yaml +22 -0
- package/examples/queue-action/README.md +15 -15
- package/examples/queue-action/alignment-edit.prompt.md +8 -8
- package/examples/queue-action/dark.prompt.md +58 -58
- package/examples/queue-action/light.prompt.md +58 -58
- package/examples/queue-action/pair-review.md +33 -33
- package/examples/queue-action/scene.yaml +41 -41
- package/examples/release-notes.en-US.json +56 -56
- package/examples/release-notes.ko-KR.json +56 -56
- package/examples/storage-breakdown/README.md +18 -0
- package/examples/storage-breakdown/dark.png +0 -0
- package/examples/storage-breakdown/dark.prompt.md +52 -0
- package/examples/storage-breakdown/light.png +0 -0
- package/examples/storage-breakdown/light.prompt.md +52 -0
- package/examples/storage-breakdown/pair-review.md +18 -0
- package/examples/storage-breakdown/scene.yaml +28 -0
- package/examples/tablet-reading/README.md +18 -0
- package/examples/tablet-reading/content-edit.prompt.md +7 -0
- package/examples/tablet-reading/dark.png +0 -0
- package/examples/tablet-reading/dark.prompt.md +52 -0
- package/examples/tablet-reading/light.png +0 -0
- package/examples/tablet-reading/light.prompt.md +52 -0
- package/examples/tablet-reading/pair-review.md +18 -0
- package/examples/tablet-reading/scene.yaml +29 -0
- package/kit/references/composition-recipes.md +89 -73
- package/kit/references/format.md +27 -24
- package/kit/references/media-sources.md +34 -0
- package/kit/references/theme-pairing.md +55 -53
- package/kit/references/visual-language.md +73 -69
- package/kit/references/workflow.md +90 -24
- package/kit/references/writing.md +27 -27
- package/kit/skills/releasekit-draft/SKILL.md +12 -10
- package/kit/skills/releasekit-image/SKILL.md +20 -16
- package/kit/skills/releasekit-review/SKILL.md +16 -12
- package/kit/skills/releasekit-translate/SKILL.md +14 -10
- package/package.json +54 -52
- package/schemas/bundle.schema.json +26 -1
- package/schemas/visual.schema.json +42 -0
- package/schemas/evidence.schema.json +0 -96
|
@@ -1,73 +1,89 @@
|
|
|
1
|
-
# Composition recipes
|
|
2
|
-
|
|
3
|
-
Choose an archetype from the feature's explanatory need. Numeric occupancy ranges below are starting points, not replacements for the scene brief.
|
|
4
|
-
|
|
5
|
-
The rules below are conditional on the selected subject. Choose
|
|
6
|
-
|
|
7
|
-
| Archetype | Use when | Starting composition | Common failure |
|
|
8
|
-
| --- | --- | --- | --- |
|
|
9
|
-
| `icon-tile` | A capability or status is recognizable through one symbol |
|
|
10
|
-
| `symbol-pair` | Two capabilities are connected | Two equally weighted symbols, a short subtle divider, broad empty space | Unequal weights or an arrow implying a direction that does not exist |
|
|
11
|
-
| `ui-detail` | A specific interaction or setting changed | One enlarged fragment occupying about 55–85% of width | A complete invented dashboard with the useful control too small |
|
|
12
|
-
| `device-view` | The device or cross-device context matters | One unobtrusive front-facing display, around 28–48% of width | Decorative device mockups unrelated to the workflow |
|
|
13
|
-
| `object-detail` | A real physical part explains the feature |
|
|
14
|
-
| `spatial-view` | Topology, route, location, or layout is the subject |
|
|
15
|
-
| `data-view` | A new view of information is the feature | One dominant chart or metric panel plus sparse support | Fake improvement numbers or decorative chart noise |
|
|
16
|
-
| `editorial-scene` | The announced content or experience is the subject |
|
|
17
|
-
|
|
18
|
-
## Decision sequence
|
|
19
|
-
|
|
20
|
-
1. Does the reader need to understand where or how to act? Prefer `ui-detail`; use `device-view` only when device context carries meaning.
|
|
21
|
-
2. Is spatial topology
|
|
22
|
-
3. Is the new information display itself the change? Choose `data-view`.
|
|
23
|
-
4. Is
|
|
24
|
-
5. Otherwise, use `icon-tile` for one concept or `symbol-pair` for one relationship.
|
|
25
|
-
|
|
26
|
-
## Correctness checks by subject
|
|
27
|
-
|
|
28
|
-
Select only the relevant checks and make them concrete in the note's `composition`, `preserve`, and `avoid` fields before generating.
|
|
29
|
-
|
|
30
|
-
| Archetype | Check against the release note and product evidence |
|
|
31
|
-
| --- | --- |
|
|
32
|
-
| `icon-tile` | The symbol conveys the announced capability or status without suggesting an unsupported guarantee |
|
|
33
|
-
| `symbol-pair` | The association and any direction are accurate; no invented transfer, synchronization, or automation |
|
|
34
|
-
| `ui-detail` | Control meaning, hierarchy, containment, alignment, and state are correct; any transition identifies fixed and changing elements |
|
|
35
|
-
| `device-view` | Device identity, count, screen content, and cross-device relationships match the feature |
|
|
36
|
-
| `object-detail` | Shape, scale, assembly, contact points, and materials preserve the physical feature |
|
|
37
|
-
| `spatial-view` | Positions, connections, direction, and layer meanings form a consistent spatial model |
|
|
38
|
-
| `data-view` | Categories, values, proportions, units, legends, and selected filters agree wherever present |
|
|
39
|
-
| `editorial-scene` | The depicted experience matches the announced content without added capabilities or unrelated subjects |
|
|
40
|
-
|
|
41
|
-
Review correctness before visual polish and theme correspondence. If a detail is unsupported, reduce specificity to a justified abstraction or resolve it before rendering. A successful theme pair can still repeat the same incorrect feature depiction.
|
|
42
|
-
|
|
43
|
-
## Worked brief: list interaction
|
|
44
|
-
|
|
45
|
-
Message: a saved item can be added to a queue with one swipe.
|
|
46
|
-
|
|
47
|
-
Choose `ui-detail`. Three broad horizontal list rows extend slightly past the right crop. Define the resting list left boundary as `L` and the exposed action width as `D`. The top and bottom row backgrounds and the middle row's action backplate all start at `L`. For this rightward swipe, only the middle foreground row starts at `L + D`; its thumbnail and label bars move with it and retain their original padding. The action occupies the space revealed inside the original row bounds. Its left edge must not protrude outside the resting list. Do not shift the entire list or compress the active row to make room.
|
|
48
|
-
|
|
49
|
-
Represent incidental text as two or three neutral bars with consistent padding. Keep the action icon recognizable and the entire interaction inside the safe margin. This is a horizontal reveal gesture, not a vertical reorder drag: the rows keep their order and vertical positions. One interaction, one accent, no floating hand, arrow trail, extra feature, or surrounding app navigation.
|
|
50
|
-
|
|
51
|
-
Before pairing, check that the resting rows and action backplate share a left boundary, the foreground displacement equals the revealed action width, and its contents moved as one unit. For the theme pair, lock row dimensions, offset, action width, bars, crop, and selected state. Change only canvas and surface roles, neutral label values, and local shadows. A second view that selects another row is a failed pair. Two matching images can still share the same interaction error, so correspondence alone is insufficient.
|
|
52
|
-
|
|
53
|
-
## Worked brief: a saved-location preference
|
|
54
|
-
|
|
55
|
-
Message: a setting can be saved for a selected location.
|
|
56
|
-
|
|
57
|
-
Choose `symbol-pair` if the association itself is sufficient: a simple adjustment glyph and a location pin, balanced around a narrow neutral divider. Choose `ui-detail` if users need to discover the new menu action. Do not add a device just to fill the empty space. A location pin is a metaphor; it must not imply geofencing or automatic behavior absent from the evidence.
|
|
58
|
-
|
|
59
|
-
## Worked brief: activity information
|
|
60
|
-
|
|
61
|
-
Message: users can see an activity breakdown in a new panel.
|
|
62
|
-
|
|
63
|
-
Choose `data-view`. One panel contains a dominant simple chart and two supporting rows. If actual values are not available, omit literal numbers and avoid a rising curve that implies a performance gain. Make the new view, not an invented result, the focus. Use a selected segment or one active filter to establish hierarchy if that interaction is supported.
|
|
64
|
-
|
|
65
|
-
##
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
1
|
+
# Composition recipes
|
|
2
|
+
|
|
3
|
+
Choose an archetype from the feature's explanatory need. Numeric occupancy ranges below are starting points, not replacements for the scene brief.
|
|
4
|
+
|
|
5
|
+
The rules below are conditional on the selected subject. Choose the [media source](media-sources.md) first. These are eight presentation categories; physical details and content previews require supplied media. A worked brief demonstrates one feature's constraints; its objects, coordinates, gestures, or data relationships must not become defaults for unrelated notes.
|
|
6
|
+
|
|
7
|
+
| Archetype | Use when | Starting composition | Common failure |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| `icon-tile` | A capability or status is recognizable through one symbol | Flat tile about 20–24% of canvas width; monochrome filled glyph about 50–65% of tile width | A sculpted 3D object, colored decorative badge, or oversized glyph |
|
|
10
|
+
| `symbol-pair` | Two capabilities are connected | Two equally weighted symbols, a short subtle divider, broad empty space | Unequal weights or an arrow implying a direction that does not exist |
|
|
11
|
+
| `ui-detail` | A specific interaction or setting changed | One enlarged fragment occupying about 55–85% of width | A complete invented dashboard with the useful control too small |
|
|
12
|
+
| `device-view` | The device or cross-device context matters | One unobtrusive front-facing display, around 28–48% of width | Decorative device mockups unrelated to the workflow |
|
|
13
|
+
| `object-detail` | A real physical part explains the feature | Supplied photograph or capture, with a useful crop | Inventing a physical product or generating a 3D substitute |
|
|
14
|
+
| `spatial-view` | Topology, route, location, or layout is the subject | One appropriate scale and viewpoint; fine subdued context around a clear route or selection | An oversized toy street grid, competing map layers, or impossible spatial relationships |
|
|
15
|
+
| `data-view` | A new view of information is the feature | One dominant chart or metric panel plus sparse support | Fake improvement numbers or decorative chart noise |
|
|
16
|
+
| `editorial-scene` | The announced content or experience is the subject | Supplied content artwork or screenshot, with original colors | Inventing a still life or decorative illustration |
|
|
17
|
+
|
|
18
|
+
## Decision sequence
|
|
19
|
+
|
|
20
|
+
1. Does the reader need to understand where or how to act? Prefer `ui-detail`; use `device-view` only when device context carries meaning.
|
|
21
|
+
2. Is spatial topology essential? Choose `spatial-view`. Is a real physical part essential? Choose `object-detail` and request or reuse its image.
|
|
22
|
+
3. Is the new information display itself the change? Choose `data-view`.
|
|
23
|
+
4. Is the actual announced content the subject? Choose `editorial-scene` and request or reuse its artwork or capture.
|
|
24
|
+
5. Otherwise, use `icon-tile` for one concept or `symbol-pair` for one relationship.
|
|
25
|
+
|
|
26
|
+
## Correctness checks by subject
|
|
27
|
+
|
|
28
|
+
Select only the relevant checks and make them concrete in the note's `composition`, `preserve`, and `avoid` fields before generating.
|
|
29
|
+
|
|
30
|
+
| Archetype | Check against the release note and product evidence |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| `icon-tile` | The symbol conveys the announced capability or status without suggesting an unsupported guarantee |
|
|
33
|
+
| `symbol-pair` | The association and any direction are accurate; no invented transfer, synchronization, or automation |
|
|
34
|
+
| `ui-detail` | Control meaning, hierarchy, containment, alignment, and state are correct; any transition identifies fixed and changing elements |
|
|
35
|
+
| `device-view` | Device identity, count, screen content, and cross-device relationships match the feature |
|
|
36
|
+
| `object-detail` | Shape, scale, assembly, contact points, and materials preserve the physical feature |
|
|
37
|
+
| `spatial-view` | Positions, connections, direction, and layer meanings form a consistent spatial model; the focal layer reads first at small size |
|
|
38
|
+
| `data-view` | Categories, values, proportions, units, legends, and selected filters agree wherever present |
|
|
39
|
+
| `editorial-scene` | The depicted experience matches the announced content without added capabilities or unrelated subjects |
|
|
40
|
+
|
|
41
|
+
Review correctness before visual polish and theme correspondence. If a detail is unsupported, reduce specificity to a justified abstraction or resolve it before rendering. A successful theme pair can still repeat the same incorrect feature depiction.
|
|
42
|
+
|
|
43
|
+
## Worked brief: list interaction
|
|
44
|
+
|
|
45
|
+
Message: a saved item can be added to a queue with one swipe.
|
|
46
|
+
|
|
47
|
+
Choose `ui-detail`. Three broad horizontal list rows extend slightly past the right crop. Define the resting list left boundary as `L` and the exposed action width as `D`. The top and bottom row backgrounds and the middle row's action backplate all start at `L`. For this rightward swipe, only the middle foreground row starts at `L + D`; its thumbnail and label bars move with it and retain their original padding. The action occupies the space revealed inside the original row bounds. Its left edge must not protrude outside the resting list. Do not shift the entire list or compress the active row to make room.
|
|
48
|
+
|
|
49
|
+
Represent incidental text as two or three neutral bars with consistent padding. Keep the action icon recognizable and the entire interaction inside the safe margin. This is a horizontal reveal gesture, not a vertical reorder drag: the rows keep their order and vertical positions. One interaction, one accent, no floating hand, arrow trail, extra feature, or surrounding app navigation.
|
|
50
|
+
|
|
51
|
+
Before pairing, check that the resting rows and action backplate share a left boundary, the foreground displacement equals the revealed action width, and its contents moved as one unit. For the theme pair, lock row dimensions, offset, action width, bars, crop, and selected state. Change only canvas and surface roles, neutral label values, and local shadows. A second view that selects another row is a failed pair. Two matching images can still share the same interaction error, so correspondence alone is insufficient.
|
|
52
|
+
|
|
53
|
+
## Worked brief: a saved-location preference
|
|
54
|
+
|
|
55
|
+
Message: a setting can be saved for a selected location.
|
|
56
|
+
|
|
57
|
+
Choose `symbol-pair` if the association itself is sufficient: a simple adjustment glyph and a location pin, balanced around a narrow neutral divider. Choose `ui-detail` if users need to discover the new menu action. Do not add a device just to fill the empty space. A location pin is a metaphor; it must not imply geofencing or automatic behavior absent from the evidence.
|
|
58
|
+
|
|
59
|
+
## Worked brief: activity information
|
|
60
|
+
|
|
61
|
+
Message: users can see an activity breakdown in a new panel.
|
|
62
|
+
|
|
63
|
+
Choose `data-view`. One panel contains a dominant simple chart and two supporting rows. If actual values are not available, omit literal numbers and avoid a rising curve that implies a performance gain. Make the new view, not an invented result, the focus. Use a selected segment or one active filter to establish hierarchy if that interaction is supported.
|
|
64
|
+
|
|
65
|
+
## Map hierarchy within spatial views
|
|
66
|
+
|
|
67
|
+
Choose the level of abstraction from the feature. A relationship diagram can be sparse; a map preview usually needs recognizable cartographic context. Simplify a map by reducing the contrast of minor detail before removing its structure. Use thin, connected local streets, a slightly stronger major network, and quiet flat land or water values. Avoid replacing a regional map with a few broad roads, lane dashes, padded blocks, or a raised checkerboard.
|
|
68
|
+
|
|
69
|
+
Make the route or selected area the first read at roughly 350 pixels wide. Supporting detail may merge into a quiet texture at that size, while the focal path and its meaningful endpoints remain legible. Give the active path a clear stroke hierarchy without making it a glowing cable. Keep geographic context planar; do not add bevels, modeled terrain, grain, or studio lighting for polish.
|
|
70
|
+
|
|
71
|
+
Choose the crop and amount of negative space from the feature. A supported summary can occupy a quiet area beside a map, with a local fade that suppresses background detail behind it. A full-frame map or a focused spatial diagram can be more appropriate for other notes. Do not require a left summary, a right map, a water body, or any particular route shape across this archetype.
|
|
72
|
+
|
|
73
|
+
Marker shapes carry meaning. Saved waypoints, a current-position arrow, a destination pin, traffic, and a route alternative are different states; include only the ones established by the note. A route follows traversable connections, with a bridge or other supported connection wherever needed. For an actual location, path, or coverage claim, request an approved map capture or verified source instead of inventing geography. A fictional gallery scene must state that its geography is illustrative.
|
|
74
|
+
|
|
75
|
+
## Worked brief: a saved route preview
|
|
76
|
+
|
|
77
|
+
Message: the route preview connects two selected saved waypoints. Choose `spatial-view`. For this fictional example, use an original irregular city network with many fine, quiet streets and one continuous blue path. Place a compact abstract summary beside the map when that summary is part of the chosen scene. Use neutral endpoints rather than introducing an unsupported live-navigation state. The map's detail supports recognition; its route supplies the meaning.
|
|
78
|
+
|
|
79
|
+
Before pairing, check continuity, endpoint attachment, meaningful scale, and route priority at mobile size. Preserve the land boundary, primary street structure, route bends, endpoint positions, summary alignment, crop, and semantic route color between themes. If exact real-world geography matters, switch to supplied media. These are feature-derived checks; they do not prescribe this example's layout for every spatial note.
|
|
80
|
+
|
|
81
|
+
## Worked brief: a focused object
|
|
82
|
+
|
|
83
|
+
Message: a new control is available on an existing physical interface.
|
|
84
|
+
|
|
85
|
+
Choose `object-detail` with `source: provided`. Request a photograph or capture of the actual control if an approved image is not already available. Use a crop that preserves surrounding context and the real geometry. Do not synthesize a product from a written fictional specification or introduce an unrelated appliance, robot, or headset. This note stays pending until an appropriate image is supplied.
|
|
86
|
+
|
|
87
|
+
## Exceptions with a reason
|
|
88
|
+
|
|
89
|
+
A supplied content preview can retain its authentic photography, artwork, materials, and colors. A broad spatial view may reach every edge when its relationships require it. Original supplied media can retain its aspect ratio. These are source-preservation choices, not permission to invent a decorative illustration or physical rendering.
|
package/kit/references/format.md
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
|
-
# Content contract
|
|
2
|
-
|
|
3
|
-
Project configuration is `releasekit/config.yaml`. Releases live under `releasekit/releases/<version>/`. Version IDs are filesystem-safe strings, not necessarily semantic versions. A release stores its configured locales and visual policy so future project-default changes do not rewrite past releases.
|
|
4
|
-
|
|
5
|
-
Within one release:
|
|
6
|
-
|
|
7
|
-
| File | Purpose |
|
|
8
|
-
| --- | --- |
|
|
9
|
-
| `release.yaml` | Version, status, explicit previous link, pinned Git range, policy snapshot, ordered note metadata |
|
|
10
|
-
| `
|
|
11
|
-
| `
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
# Content contract
|
|
2
|
+
|
|
3
|
+
Project configuration is `releasekit/config.yaml`. Releases live under `releasekit/releases/<version>/`. Version IDs are filesystem-safe strings, not necessarily semantic versions. A release stores its configured locales and visual policy so future project-default changes do not rewrite past releases.
|
|
4
|
+
|
|
5
|
+
Within one release:
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `release.yaml` | Version, status, explicit previous link, pinned Git range, policy snapshot, ordered note metadata |
|
|
10
|
+
| `notes/<id>/<locale>.md` | Title, alt text, source fingerprint, and Markdown body |
|
|
11
|
+
| `visuals/<id>.yaml` | Scene, image source choice, and imported variant metadata |
|
|
12
|
+
| `prompts/<id>.<theme>.md` | Generation requests for pending generated variants; supplied images have no generation request |
|
|
13
|
+
| `assets/` | Selected raster files with content-derived names |
|
|
14
|
+
|
|
15
|
+
Preparation writes only `release.yaml`: `source` records the immutable Git boundaries, and each note later records its relevant commits or paths. No full patch or separate changed-file index is stored. Draft validation checks note references against the pinned Git range; finalization fingerprints the metadata, note text, and visual briefs. Ready content can be validated and exported without Git history.
|
|
16
|
+
|
|
17
|
+
Notes are ordered by their entries in `release.yaml`. Note IDs are unique within a version and shared across locales. Their consumer identity is the pair `(version, note.id)`; never deduplicate different releases by note ID or title alone.
|
|
18
|
+
|
|
19
|
+
Frontmatter fields are `title`, `alt`, and `sourceHash`. The source locale normally uses `sourceHash: null`. Translation marking records a fingerprint of the source title, alt text, and body. An image-free note can use empty alt text. An image-enabled note requires a complete visual brief and its active image assets before finalization. Its scaffold leaves `archetype` and `source` unselected; the authoring agent chooses both from the note and product evidence.
|
|
20
|
+
|
|
21
|
+
`scene.source` is `generated` or `provided`. Legacy briefs may omit it: `object-detail` and `editorial-scene` use supplied media; other categories default to generated graphics. Those two supplied-only categories reject an explicit `generated` choice. For generated media, `variants` contains the configured dark/light pair or single theme. Supplied media can contain just `shared`, or distinct dark/light entries following project policy. Do not mix shared and themed entries. The shared slot retains native dimensions and bytes, does not depend on presentation palettes, and exports as one asset with `fallbackTheme: shared`. Missing supplied inputs remain pending. See [media sources](media-sources.md).
|
|
22
|
+
|
|
23
|
+
`releasekit finalize` checks references and content, then records `status: ready` and a content fingerprint. A later edit invalidates that fingerprint. Reopen the draft before changing content; publishing is a separate user-controlled workflow.
|
|
24
|
+
|
|
25
|
+
The generated JSON schemas shipped with the package are the structural source of truth. `releasekit export` produces `release-notes.json` plus relative image assets. It includes only display fields, configured image variants, the chosen locale, and explicit version groups. Source patches, prompts, internal paths, and Git evidence are not included. Consumers should safely render `bodyMarkdown` and use image `variants[theme]` or `variants[fallbackTheme]` without recoloring the raster.
|
|
26
|
+
|
|
27
|
+
An export destination must not already exist. This avoids overwriting content or mixing assets from separate builds. Validation completes before the destination is created.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Choosing the image source
|
|
2
|
+
|
|
3
|
+
A release note needs a truthful explanation of the feature. It does not need an invented illustration for every subject. Choose the source before composition and rendering.
|
|
4
|
+
|
|
5
|
+
| Source | Appropriate use | Agent action |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `generated` | Flat functional glyphs, simplified interface fragments, schematic relationships, maps, or data graphics supported by the brief | Build the scene and use the configured image generator |
|
|
8
|
+
| `provided` | Actual product appearance, physical details, content artwork, photos, exact interfaces, or a user's selected image | Find an approved existing asset or request the relevant capture/image, inspect it, and import it |
|
|
9
|
+
|
|
10
|
+
Set `scene.source` in the note's visual YAML. `object-detail` and `editorial-scene` require `provided`; explicitly choosing `generated` for either is rejected. For older briefs without this field, those two categories default to supplied media and the others to generated graphics. The categories describe presentation, not eight styles that must all be invented.
|
|
11
|
+
|
|
12
|
+
Use `provided` for another category whenever a real capture explains it better. Do not invent a device's appearance, fabricate actual product content, or turn a capability icon into a sculpted object. Decorative illustration and 3D still-life generation are outside this kit's release-note language.
|
|
13
|
+
|
|
14
|
+
For a map, distinguish an illustrative spatial explanation from an actual place, computed route, or coverage claim. Exact geography and routing need an approved map capture or verified source. Request a supplied image when that evidence is missing. Generated fictional geography is suitable only when explicitly identified as illustrative; visual plausibility does not establish geographic accuracy.
|
|
15
|
+
|
|
16
|
+
## Missing input
|
|
17
|
+
|
|
18
|
+
`releasekit image plan <version>` returns `action: provide` with `promptFile: null` when supplied media is needed. The instruction identifies the subject and import slot. Reuse available approved project files first. Otherwise ask the user for the specific capture, photograph, or content image. Continue independent copy and translation work while the asset is pending. Do not treat a missing capture as permission to synthesize its content.
|
|
19
|
+
|
|
20
|
+
The plan reports `generationRequests` and `providedRequests` separately. Always use the current plan; old prompt files are historical artifacts, not authorization to generate a newly supplied-only scene. Finalization remains blocked until the selected source is imported and validated.
|
|
21
|
+
|
|
22
|
+
## One image shared by both viewer themes
|
|
23
|
+
|
|
24
|
+
A native photo, content image, or screenshot often has one authentic appearance. Import it once:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
releasekit image import 1.4.0 product-detail --theme shared --file ./approved-capture.png
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
This requires `source: provided`. The CLI copies the selected bytes unchanged. `variants.shared` stores one asset; the public bundle exports one file with `fallbackTheme: shared`. The normal consumer lookup, `variants[theme] ?? variants[fallbackTheme]`, displays that file in either viewer theme. A shared slot is not a fabricated pair and does not require a second generation or duplicate file. Its original dimensions and colors are retained.
|
|
31
|
+
|
|
32
|
+
If the product actually supplies distinct dark/light captures, import those with `--theme dark` and `--theme light`. Once one themed capture is imported, the plan requests the remaining configured capture. Choose shared or distinct themed entries, not both in the same note; remove the previous variant entries deliberately when switching. A missing theme is never generated as a substitute for an authentic capture.
|
|
33
|
+
|
|
34
|
+
Inspect the content and crop before import. Keep the original source while preparing any user-authorized crop or presentation adjustment. Theme changes must not alter product content. File validation checks bytes and metadata; the agent's review establishes whether the selected media is the appropriate approved source.
|
|
@@ -1,53 +1,55 @@
|
|
|
1
|
-
# Theme pairs and generation cost
|
|
2
|
-
|
|
3
|
-
## Project policy
|
|
4
|
-
|
|
5
|
-
`visuals.themes` in `releasekit/config.yaml` accepts `both`, `dark`, or `light`. The recommended default is `both`. Single-theme projects request only that variant. Image count depends on image-enabled notes and missing or stale variants; it does not multiply by the number of translations.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
1
|
+
# Theme pairs and generation cost
|
|
2
|
+
|
|
3
|
+
## Project policy
|
|
4
|
+
|
|
5
|
+
`visuals.themes` in `releasekit/config.yaml` accepts `both`, `dark`, or `light`. The recommended default is `both`. Single-theme projects request only that variant. Image count depends on image-enabled notes and missing or stale variants; it does not multiply by the number of translations.
|
|
6
|
+
|
|
7
|
+
This generation policy does not require inventing a second appearance for supplied media. A capture or approved content image can use one `shared` asset in either viewer theme. See [media sources](media-sources.md) for supplied-image requests and importing one source or distinct genuine theme captures.
|
|
8
|
+
|
|
9
|
+
`releasekit image plan <version>` writes pending prompt files and reports requested, ready, and pending asset counts. It never calls an image service. These counts are work units, not currency estimates or a guarantee about provider billing. Editing a provider's existing image can still cost money. Do not advertise automatic theme conversion as a free second generation.
|
|
10
|
+
|
|
11
|
+
Policy is captured in each release when it is prepared. Editing the project default affects new releases. To apply the current project policy to an existing draft, run `releasekit image plan <version> --sync-config`. Previously selected files are retained; themes disabled by the new policy are not exported. Ready releases must be reopened before their policy changes.
|
|
12
|
+
|
|
13
|
+
## One scene, two presentation treatments
|
|
14
|
+
|
|
15
|
+
Both outputs share the same scene brief. Lock subject identity, geometry, object count, positions, scale, crop, camera, UI topology, action state, chart values, and any allowed literal labels. Change presentation surfaces, neutral values, lighting, shadows, and necessary edge separation. Preserve meaningful status colors and natural photographic or material colors.
|
|
16
|
+
|
|
17
|
+
| Role | Dark treatment | Light treatment |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Canvas | Quiet charcoal | Quiet near-white |
|
|
20
|
+
| Interface surface | Separate adjacent dark values | Separate white and pale-gray values |
|
|
21
|
+
| Primary neutral symbol | Legible mid-light neutral | Legible mid-dark neutral |
|
|
22
|
+
| Secondary detail | Subdued, still distinguishable | Subdued, still distinguishable |
|
|
23
|
+
| Contact shadow | Soft, with enough local separation | Light, restrained, never muddy |
|
|
24
|
+
| Interaction or status color | Preserve semantic hue | Preserve semantic hue |
|
|
25
|
+
| Photo or product material | Preserve authentic appearance | Preserve authentic appearance |
|
|
26
|
+
|
|
27
|
+
Do not invert pixels or shift brightness globally. A black lens remains a black lens on a light canvas. A warning remains the same warning color. If the underlying application has only one authentic UI theme, retain that UI and adapt the surrounding presentation rather than claiming an unsupported application theme.
|
|
28
|
+
|
|
29
|
+
## Generation sequence
|
|
30
|
+
|
|
31
|
+
1. Complete the shared brief and inspect its product references.
|
|
32
|
+
2. Read the image plan and the project's requested themes. Reuse existing current assets. The following rendering steps apply to `action: generate`; handle `action: provide` through the supplied-image workflow.
|
|
33
|
+
3. Generate one requested variant using its prompt. Select and inspect the result.
|
|
34
|
+
4. Import it. Re-run the image plan; a valid approved counterpart is now offered as a composition reference for the other theme.
|
|
35
|
+
5. When the available tool supports image references or edits, use the counterpart for a constrained theme edit. Otherwise repeat the exact scene contract and inspect for layout drift. Never claim pixel-identical geometry from independent stochastic generations.
|
|
36
|
+
6. Compare the pair. Both files should have the same pixel dimensions. Verify pose, crop, UI state, values, and semantic colors by sight, then import the selected counterpart.
|
|
37
|
+
|
|
38
|
+
Use one file per theme, not a split canvas or a two-panel comparison image. Keep previously accepted files while iterating. Do not restart the entire release when one small defect can be corrected locally.
|
|
39
|
+
|
|
40
|
+
## External generation handoff
|
|
41
|
+
|
|
42
|
+
If the agent has no image generator, preserve the prompt files and list the pending assets. The user can generate them with another tool and return the files. Import each with:
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
releasekit image import 1.4.0 queue-action --theme dark --file ./selected-dark.png
|
|
46
|
+
releasekit image import 1.4.0 queue-action --theme light --file ./selected-light.png
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
For generated illustrations, only configured themes are required. A missing theme in a two-theme project remains pending and blocks finalization. Supplied media can instead use one genuine shared source. Do not create placeholders, automatic inversion, or duplicate files to satisfy validation.
|
|
50
|
+
|
|
51
|
+
## Consumer behavior
|
|
52
|
+
|
|
53
|
+
Exported image data includes `variants` and `fallbackTheme`. A consumer selects the requested theme if present, otherwise the explicitly exported fallback. The fallback can be `dark`, `light`, or `shared`. A supplied shared asset therefore appears once as `variants.shared`, with `fallbackTheme: shared`; the bundle does not pretend a second asset exists. Consumers should not invert or recolor raster assets.
|
|
54
|
+
|
|
55
|
+
The file validator checks format, actual decoding, dimensions, content digest, scene freshness, and configured themes. It rejects identical files masquerading as a pair. The image review checks composition and meaning; a hash cannot establish either.
|
|
@@ -1,69 +1,73 @@
|
|
|
1
|
-
# Quiet product illustration
|
|
2
|
-
|
|
3
|
-
This is an original, brand-neutral visual language for product release notes. Its purpose is recognition: a reader should understand which capability changed before reading the paragraph. Translate external references into abstract design decisions. Keep reference-company names, reference-site URLs, attributed styles, recognizable unrelated products, and copied artwork out of briefs and generated assets.
|
|
4
|
-
|
|
5
|
-
## Start with the change, then choose the picture
|
|
6
|
-
|
|
7
|
-
Read the end-state diff and the product context. Write a one-sentence visual message: what the user can now do, what changed, and which visible detail proves it. Separate established product facts from an illustrative metaphor. Do not turn an internal refactor into a new feature, or invent a control path, metric, security guarantee, or device to make an image more interesting.
|
|
8
|
-
|
|
9
|
-
Select the simplest useful archetype in [composition-recipes.md](composition-recipes.md). A release can mix archetypes while sharing the same canvas treatment and restraint. A UI workflow deserves a UI fragment; a generic shield cannot explain a new selection interaction. Conversely, a routine status notice rarely needs a complete application dashboard.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
- Keep
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
- `
|
|
55
|
-
- `
|
|
56
|
-
- `
|
|
57
|
-
- `
|
|
58
|
-
- `
|
|
59
|
-
- `
|
|
60
|
-
- `
|
|
61
|
-
- `
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
1
|
+
# Quiet product illustration
|
|
2
|
+
|
|
3
|
+
This is an original, brand-neutral visual language for product release notes. Its purpose is recognition: a reader should understand which capability changed before reading the paragraph. Translate external references into abstract design decisions. Keep reference-company names, reference-site URLs, attributed styles, recognizable unrelated products, and copied artwork out of briefs and generated assets.
|
|
4
|
+
|
|
5
|
+
## Start with the change, then choose the picture
|
|
6
|
+
|
|
7
|
+
Read the end-state diff and the product context. Write a one-sentence visual message: what the user can now do, what changed, and which visible detail proves it. Separate established product facts from an illustrative metaphor. Do not turn an internal refactor into a new feature, or invent a control path, metric, security guarantee, or device to make an image more interesting.
|
|
8
|
+
|
|
9
|
+
Select the simplest useful archetype in [composition-recipes.md](composition-recipes.md). A release can mix archetypes while sharing the same canvas treatment and restraint. A UI workflow deserves a UI fragment; a generic shield cannot explain a new selection interaction. Conversely, a routine status notice rarely needs a complete application dashboard.
|
|
10
|
+
|
|
11
|
+
Choose [generated or supplied media](media-sources.md) before rendering. Generate restrained flat explanations; use actual captures, photographs, or approved artwork when the appearance itself is the subject. Physical details and content previews require supplied images. A missing source stays pending; a fictional written scene is not a replacement for an actual product or content capture.
|
|
12
|
+
|
|
13
|
+
For each note, derive the scene from that feature independently. Describe the relevant state and relationships: a control's state, two capabilities' association, a physical assembly, spatial connections, data proportions, or the announced content. Record supported facts and limits in `context`; write concrete correctness constraints in `composition`, `preserve`, and `avoid`. Those constraints are local to the note. A worked example supplies a reasoning pattern, not a layout to apply to other features. The agent chooses the representation and reviews its meaning; the CLI compiles the chosen brief and validates files.
|
|
14
|
+
|
|
15
|
+
## Composition grammar
|
|
16
|
+
|
|
17
|
+
- Use a landscape canvas, normally 1280 × 800 (8:5). This is an illustration asset, not a screenshot of the release-note viewer. Keep the heading, release number, paragraph, back navigation, and outer page chrome outside the image.
|
|
18
|
+
- Keep one focal idea. Let the archetype determine subject size: compact symbols need substantial empty space; UI fragments and spatial views can occupy most of the frame. Do not apply a single occupancy rule to every asset.
|
|
19
|
+
- Center compact subjects optically. For an interaction, center the changed control or the gesture's result rather than a large irrelevant panel.
|
|
20
|
+
- Keep essential content about 6% away from edges. A deliberate bottom crop of a device or side crop of a list can increase readability; accidental clipped icons, labels, and action targets cannot.
|
|
21
|
+
- Reduce irrelevant UI labels to neutral bars of varied length. Keep alignment, padding, hierarchy, groupings, and interaction topology recognizable. Avoid uniform skeleton placeholders that obscure the actual action.
|
|
22
|
+
- Preserve the relationships that make this feature correct. Specify containment and selected state for controls, fixed and changing parts for transitions, assembly and contact for objects, connections for spatial views, and quantitative relationships for charts. Apply only relationships relevant to the actual subject.
|
|
23
|
+
- Treat the scene's visible-element inventory as complete. Keep schematic elements abstract; do not invent additional content or decoration. Include authentic photographic or detailed content when the brief calls for it.
|
|
24
|
+
- An authentic photo, product material, map layer, or content preview can keep natural detail and color. Most surrounding interface scaffolding should remain quiet.
|
|
25
|
+
- Quiet does not always mean sparse. A map may retain many fine streets at low contrast so its subject still reads as geography; establish hierarchy through value and line weight before removing useful structure. Use the selected recipe's scale and density, not a universal icon-like simplification.
|
|
26
|
+
- Use one viewpoint. UI crops are normally straight-on; spatial relationships can use an orthographic or elevated camera; a physical detail can use a restrained three-quarter angle.
|
|
27
|
+
|
|
28
|
+
## Value, depth, and materials
|
|
29
|
+
|
|
30
|
+
Separate the canvas, base surface, raised surface, primary symbol, secondary detail, and divider. These are semantic roles, not a global color filter. The project defines their dark and light values.
|
|
31
|
+
|
|
32
|
+
On dark backgrounds, distinguish charcoal layers and use mid-light neutral symbols. Do not crush a dark object into the canvas or turn every small glyph pure white. On light backgrounds, use near-white space, subtle gray separation, and darker neutral symbols. A dark device or natural photo may stay dark in a light presentation.
|
|
33
|
+
|
|
34
|
+
For icons, use a compact flat rounded-square tile with a monochrome filled glyph and clear negative space. A typical tile occupies 20–24% of the canvas width, with the glyph around 50–65% of the tile width. Keep broad margins, uniform background fills, and related corner radii. Use color only when the feature gives it a functional meaning. Do not default to a colored badge, physical object, or modeled icon.
|
|
35
|
+
|
|
36
|
+
Flat icons and symbol pairs have no perspective, extrusion, material texture, gradients, lighting, or shadows. Simplified interfaces may use restrained layer separation where it explains the actual control hierarchy. Preserve shading already present in supplied media. Do not add sculpted objects, decorative 3D, studio lighting, glass, glow, or bevels to generated release illustrations.
|
|
37
|
+
|
|
38
|
+
## Color has a job
|
|
39
|
+
|
|
40
|
+
Use the project accent for the changed control, selected item, active route, or direct interaction cue. Do not color every surface. Preserve established meanings such as warnings, completed states, traffic or map semantics, and authentic content colors between themes.
|
|
41
|
+
|
|
42
|
+
Limited color is a default for interface explanation, not a prohibition on colorful features. A supplied capture of a creative tool can retain its colorful output. A spatial view can require several functional colors. Actual content artwork retains its original appearance. The color should belong to the feature, rather than decorate a routine release card.
|
|
43
|
+
|
|
44
|
+
## Language independence
|
|
45
|
+
|
|
46
|
+
Keep illustrations reusable across locales. Put release copy in Markdown and alt text in each locale. Omit readable text and numbers by default. If a short label or numeric value is indispensable, include it verbatim in the brief's `text` list and trace it to evidence or an explicitly illustrative example. Do not let the model fabricate microcopy, timestamps, status-bar details, or statistics.
|
|
47
|
+
|
|
48
|
+
The generator may use neutral bars in place of labels, but it must preserve the hierarchy and shape of the real workflow. If exact UI fidelity matters, use a supplied product capture as evidence and describe the specific simplification to make. Do not fabricate a light product UI merely because the output canvas is light.
|
|
49
|
+
|
|
50
|
+
## Scene brief contract
|
|
51
|
+
|
|
52
|
+
Each image-enabled note has one shared scene in `visuals/<note>.yaml`:
|
|
53
|
+
|
|
54
|
+
- `archetype`: the selected recipe.
|
|
55
|
+
- `source`: `generated` for a flat explanation or `provided` for an existing capture/image; physical details and content previews require `provided`.
|
|
56
|
+
- `subject`: the actual feature or its justified visual metaphor.
|
|
57
|
+
- `message`: the user-visible change, in one sentence.
|
|
58
|
+
- `focus`: the exact part a reader should notice first.
|
|
59
|
+
- `composition`: explicit placement, scale, crop, camera, and surrounding context.
|
|
60
|
+
- `context`: product facts and any limits on what the image can claim.
|
|
61
|
+
- `elements`: a short inventory of visible objects or UI groups.
|
|
62
|
+
- `preserve`: invariants shared by theme variants and revisions.
|
|
63
|
+
- `avoid`: exclusions specific to this scene.
|
|
64
|
+
- `text`: the only literal labels permitted in the raster; normally empty.
|
|
65
|
+
- `references`: portable project-relative files to inspect before generation.
|
|
66
|
+
|
|
67
|
+
Make the brief concrete enough that another model can render the same scene. “Clean, modern, minimal” alone is not a useful composition specification. State the subject's anchors, grouping, relationships, and any allowed change in state, as well as the safe margin. A chart may need fixed category proportions; a device detail may need a preserved attachment point; a setting may need one enabled control with its associated fields. Read only the worked brief relevant to the current feature.
|
|
68
|
+
|
|
69
|
+
## Review the actual output
|
|
70
|
+
|
|
71
|
+
Inspect the selected image at full resolution and at roughly 350 pixels wide. First compare the image with the release note, product evidence, and scene-specific constraints; use the chosen recipe's correctness checks. Then assess whether the changed capability reads in a moment, the focal object remains distinct, incidental detail stays subordinate, and every explicit label and crop is correct. Attractive styling and theme similarity do not establish factual or structural correctness.
|
|
72
|
+
|
|
73
|
+
For a pair, compare both outputs side by side using [theme-pairing.md](theme-pairing.md). Automated checks establish file integrity, dimensions, configured variants, and scene freshness; they do not prove visual correspondence or truthfulness. Correct a specific defect with a targeted edit instead of randomly regenerating every asset. Preserve accepted files and import the newly selected version.
|