sevgi-showcase 0.94.0 → 0.98.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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +275 -2
  3. data/LICENSE +672 -3
  4. data/README.md +9 -17
  5. data/lib/sevgi/showcase/dark.rb +4 -0
  6. data/lib/sevgi/showcase/minitest/script.rb +59 -57
  7. data/lib/sevgi/showcase/minitest/shell.rb +136 -113
  8. data/lib/sevgi/showcase/minitest/suite.rb +48 -46
  9. data/lib/sevgi/showcase/minitest.rb +6 -0
  10. data/lib/sevgi/showcase/version.rb +1 -1
  11. data/lib/sevgi/showcase.rb +1 -2
  12. data/srv/checkers.sevgi +79 -0
  13. data/srv/checkers.svg +117 -0
  14. data/srv/clover.sevgi +19 -0
  15. data/srv/clover.svg +11 -0
  16. data/srv/clover.yml +3 -0
  17. data/srv/copperplate.sevgi +50 -0
  18. data/srv/copperplate.svg +99 -0
  19. data/srv/copperplate.yml +5 -0
  20. data/srv/{gear-wheel.sevgi → gear.sevgi} +7 -9
  21. data/srv/gear.svg +11 -0
  22. data/srv/gear.yml +2 -0
  23. data/srv/{grid-cells.sevgi → grid.sevgi} +9 -9
  24. data/srv/{grid-cells.svg → grid.svg} +13 -1
  25. data/srv/heart.sevgi +17 -0
  26. data/srv/{heart-mask.svg → heart.svg} +3 -3
  27. data/srv/heart.yml +3 -0
  28. data/srv/logo.sevgi +39 -0
  29. data/srv/logo.svg +29 -0
  30. data/srv/logo.yml +4 -0
  31. data/srv/logos.sevgi +34 -0
  32. data/srv/logos.svg +38 -0
  33. data/srv/logos.yml +4 -0
  34. data/srv/{meter-face.sevgi → meter.sevgi} +6 -6
  35. data/srv/meter.svg +18 -0
  36. data/srv/pacman.sevgi +18 -0
  37. data/srv/pacman.svg +15 -0
  38. data/srv/pokey.sevgi +14 -0
  39. data/srv/pokey.svg +6 -0
  40. data/srv/{ruler-line.sevgi → ruler-.sevgi} +7 -7
  41. data/srv/ruler.sevgi +61 -0
  42. data/srv/ruler.svg +445 -0
  43. data/srv/{snow-flake.sevgi → snowflake.sevgi} +2 -2
  44. data/srv/{snow-flake.svg → snowflake.svg} +1 -1
  45. data/srv/snowflake.yml +2 -0
  46. data/srv/squared.sevgi +42 -0
  47. data/srv/squared.svg +71 -0
  48. data/srv/squared.yml +4 -0
  49. data/srv/stars.sevgi +19 -0
  50. data/srv/stars.svg +30 -0
  51. data/srv/stars.yml +3 -0
  52. data/srv/tulips.sevgi +27 -0
  53. data/srv/tulips.svg +19 -0
  54. data/srv/tulips.yml +3 -0
  55. metadata +57 -36
  56. data/srv/checker-board.sevgi +0 -96
  57. data/srv/checker-board.svg +0 -117
  58. data/srv/gear-wheel.svg +0 -12
  59. data/srv/gear-wheel.yml +0 -3
  60. data/srv/heart-mask.sevgi +0 -17
  61. data/srv/heart-mask.yml +0 -3
  62. data/srv/meter-face.svg +0 -13
  63. data/srv/pacman-pokey.sevgi +0 -17
  64. data/srv/pacman-pokey.svg +0 -9
  65. data/srv/pacman-single.sevgi +0 -17
  66. data/srv/pacman-single.svg +0 -14
  67. data/srv/ruler-hline.sevgi +0 -55
  68. data/srv/ruler-hline.svg +0 -443
  69. data/srv/snow-flake.yml +0 -1
  70. /data/srv/{checker-board.yml → checkers.yml} +0 -0
  71. /data/srv/{grid-cells.yml → grid.yml} +0 -0
  72. /data/srv/{meter-face.yml → meter.yml} +0 -0
  73. /data/srv/{pacman-pokey.yml → pacman.yml} +0 -0
  74. /data/srv/{pacman-single.yml → pokey.yml} +0 -0
  75. /data/srv/{ruler-line.svg → ruler-.svg} +0 -0
  76. /data/srv/{ruler-hline.yml → ruler-.yml} +0 -0
  77. /data/srv/{ruler-line.yml → ruler.yml} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36b54e0f7d4b51e0815f49a28194c841e5e56ace94742c2598f95dcf4677e72c
4
- data.tar.gz: b31295af208cee2aa2aad3061556f9848190c78610733510e73dd557b541995e
3
+ metadata.gz: 5cfa0ec43c375bc4dadcf8a6c9ffbfcae8e4fbab1d967207185e7160462eab36
4
+ data.tar.gz: 5a57c57405839b8cce479e7dc6b9f5eff9ed62a9c3a42ef51ff836761b8528e3
5
5
  SHA512:
6
- metadata.gz: 646bd6e535ee9c3d61efbc49ee0e443dec23af2e94cd5b16210bae05f0a70e1a68cbf75272efbcb1d9b2af7ab84d55a2fca470b8bb15f4a806b99822bc30432e
7
- data.tar.gz: 7ff66e247c4d5f0a98dd9fd69b27ee7e14088f67390482fd596630d1a21067fc9c9a16983af747201f44479bba547bb36f8001af26486adb0d2e1d2be5ed1f08
6
+ metadata.gz: 2edf1a1607b43a582c3a8b35be8a77c81d0768715b25542a630a86cb6f10b94df2510a3ec64ab143690c75e82de2efab5b80c6911ec34300cf4329501b76dd34
7
+ data.tar.gz: 5d5dc597fc58f6e7a3995b4f13a289ff3766f9452c64d50886086ddb9d8d6731f53de4cd8fd48643fb8d3844e93f746c3a9c1727540c22190a66fb156f8803a8
data/CHANGELOG.md CHANGED
@@ -1,4 +1,277 @@
1
1
  # Changelog
2
2
 
3
- Sevgi Showcase follows the root Sevgi release notes:
4
- https://github.com/roktas/sevgi/blob/main/CHANGELOG.md
3
+ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
+
6
+ ## Unreleased
7
+
8
+ ## 0.98.2 - 2026-07-25
9
+
10
+ ### Fixed
11
+
12
+ - Restored the `sevgi` CLI's main-object scope so bare toolkit calls remain available inside script helper classes.
13
+
14
+ ## 0.98.1 - 2026-07-20
15
+
16
+ ### Changed
17
+
18
+ - Changed the `sevgi` CLI to use the executor's isolated scope by default.
19
+
20
+ ### Removed
21
+
22
+ - Removed the redundant `-n` and `--nomain` CLI options; library consumers can still select `main: true` through
23
+ `Sevgi.execute` and `Sevgi.execute_file` when needed.
24
+
25
+ ## 0.98.0 - 2026-07-20
26
+
27
+ ### Added
28
+
29
+ - Added standard-input support to `sevgi`, `igves`, and `igsev`; `sevgi --as NAME` and
30
+ `Sevgi.execute_file(..., as: NAME)` supply the logical source basename used by implicit SVG, PDF, and PNG
31
+ destinations without changing physical load identity.
32
+
33
+ ## 0.97.0 - 2026-07-19
34
+
35
+ ### Added
36
+
37
+ - Added `sevgi-appendix`, containing the Sevgi agent skill and a RuboCop plugin for preserving readable `.sevgi` DSL
38
+ source alongside rubyfmt-formatted Ruby; the umbrella `sevgi` gem installs the matching Appendix version.
39
+ - Added `sevgi --skill` to report the validated path of the matching packaged agent skill for product-neutral setup.
40
+ - Added `igsev` to the umbrella gem for normalizing an SVG file through a complete SVG-to-Sevgi-to-SVG round trip.
41
+
42
+ ### Changed
43
+
44
+ - Made Homebrew the recommended complete CLI installation while retaining Bundler and focused component gems for Ruby
45
+ application dependencies.
46
+
47
+ ## 0.96.0 - 2026-07-18
48
+
49
+ ### Added
50
+
51
+ - Added exact, subtree-wide attribute omission to Derender content/file conversion, evaluation, and inclusion APIs;
52
+ `igves --omit` exposes the same behavior from the command line.
53
+ - Added `Sevgi.SVG` as the explicit namespaced form of the top-level SVG document entrypoint.
54
+ - Added the opt-in recursive `SVG::Modules` contract for callable drawing namespaces.
55
+ - Added callable drawing-module `base` blocks, document and paper registry introspection, Canvas structural equality,
56
+ renderer options on `RenderChildren`, axis translation helpers, and a CC BY RDF helper.
57
+ - Formalized non-rendering `-` metadata and `+` attribute updates as `Attributes::META_PREFIX` and
58
+ `Attributes::UPDATE_SUFFIX`; repeated Array updates now concatenate into a stable flat value.
59
+
60
+ ### Changed
61
+
62
+ - Breaking: replaced the `SVG = Sevgi::Graphics` alias with an independent SVG facade. Facade operations now use
63
+ capitalized names such as `SVG.Canvas` and `SVG.Document`; lowercase component helpers remain on
64
+ `Sevgi::Graphics`, and the stuttering `SVG.SVG` form was removed.
65
+ - Breaking: made low-level `Executor.execute` and `execute_file` runners private; consumers use
66
+ `Sevgi.execute` and `Sevgi.execute_file` while retaining the public result and error types.
67
+ - Breaking: removed the abstract `Document::Base` layer from the selectable document-profile registry; `Minimal` and
68
+ `Default` are now sibling concrete profiles, and custom profile hierarchies should derive from `Base`.
69
+ - Breaking: renamed Parallelogram segment and constraint arguments by geometric role: `base`, `side`, and
70
+ `constraint` replace axis-implying constructor names.
71
+ - Made degree-based sine and cosine exact at integer quarter turns, eliminating cardinal Geometry residue.
72
+ - Documented complete file-system failure families for file comparison, output, touch, and upward location helpers.
73
+ - Formalized generated Tile ids, positional CSS classes, template placement, and per-use callback signatures.
74
+ - Formalized String and Symbol ids across Derender selection APIs and documented file-read failures consistently.
75
+ - Breaking: made top-level `Decompile`, `Derender`, `Evaluate`, and `EvaluateChildren` consume inline SVG/XML;
76
+ file inputs now use the corresponding `File`-suffixed entrypoints.
77
+ - Breaking: replaced callable drawing module `call` block registration with argument-independent `base` blocks;
78
+ inherited bases run parent-first, and modules with one drawing method conventionally name it `call`.
79
+ - Breaking: made bracket and call notation the canonical Geometry constructors. Among Data value types, bracket notation
80
+ is public only for Point, Segment, LengthAngle, Margin, and Paper; use `.new` for Location and result carriers, and
81
+ `Stay` for traversal stop tokens.
82
+ - Breaking: aligned Point and Segment comparison with Ruby `Comparable`; malformed or unrelated comparison operands now
83
+ return nil from `<=>`.
84
+ - Breaking: executor entrypoints now return immutable `Executor::Result` values and expose only `execute` and
85
+ `execute_file`; inspect `result.error`, `result.stack`, and `result.value` instead of executor scopes or lifecycle state.
86
+ - Breaking: wrapper attributes and callable arguments use distinct channels, `With` rejects parentless receivers, and
87
+ unsupported direct constructors are private; use the documented factories for Content, concrete Geometry lined
88
+ elements, and Grid query values.
89
+ - Breaking: Canvas uses `.new` for explicit fields, `.from_paper(paper, **overrides)` for paper conversion, and
90
+ `.call`/`Graphics.canvas` for dispatch; the misleading keyword-only `.from_paper(width:, height:)` form was removed.
91
+ - Breaking: `Save`, `Write`, `PNG`, `PDF`, and Sundries native export normalize successful destinations to expanded
92
+ String paths and create missing parent directories; change-aware SVG writes still return nil when unchanged.
93
+ - Breaking: renamed `Derender.evaluate_file_children` to `evaluate_children_file`; decompiled nodes now own immutable
94
+ public state while parser, strategy, and construction plumbing remain private.
95
+ - Expanded runtime/YARD parity checks and exact contracts for inherited, extended, generated, and dynamic API surfaces,
96
+ forwarded options, error channels, path ownership, whitespace, namespaces, nil behavior, and return values.
97
+
98
+ ### Fixed
99
+
100
+ - Rejected directories from default file discovery while preserving custom locator matchers.
101
+ - Kept `Ancestral` context in non-rendering `-context` metadata instead of leaking it into SVG attributes.
102
+ - Preserved source Canvas units and names when deriving fitted Grid canvases.
103
+ - Prevented stale documentation assets from mixing old layouts with new HTML, and moved sidebar navigation into the
104
+ tablet menu at 1024px and below.
105
+ - Normalized numeric slots owned by path, shape, transform, tile, and Inkscape page helpers to finite SVG number spelling;
106
+ arbitrary user-supplied attributes remain untouched.
107
+ - Made named callable wrapper and symbol ids stable while omitting defaults for anonymous modules, and indexed every
108
+ rendered id value, including false and numeric values, through its serialized string.
109
+ - Preserved signed Geometry constraint directions, rejected invalid sweep/export channels through Sevgi error families,
110
+ and validated raw output paths before expansion or rendering.
111
+ - Made callable module configuration copy-owned and freeze-aware, document subclasses inherit their nearest profile, and
112
+ false executor boot receivers remain explicit rather than defaulting to an internal scope.
113
+ - Made element trees, attributes, identifiers, locator results, document profiles, Derender nodes, shell results, and
114
+ executor results retain owned immutable snapshots where their public contracts promise value semantics.
115
+ - Corrected Shell combined-output separators, nil export density errors, document render-option routing, executor source
116
+ snapshots, selected-node namespace/whitespace documentation, and Standard character-data validation.
117
+
118
+ ### Removed
119
+
120
+ - Removed public access to pluralization tables and the internal SVG save extension; pluralization rules are now deeply
121
+ immutable.
122
+ - Removed public documentation and constant access for command-line implementation modules; the `sevgi` and `igves`
123
+ executables remain unchanged.
124
+ - Removed eager loading and public documentation of private Showcase build/test support; explicit support entrypoints
125
+ now keep the harness under the Showcase namespace.
126
+ - Removed public access to document profile name normalizers; registry operations retain them as private plumbing.
127
+ - Removed the redundant `Margin.margin` constructor; use canonical bracket notation.
128
+ - Removed public executor orchestration, obsolete callable-module hooks, the old public attribute syntax constants, and
129
+ direct construction of abstract or internally wired Content, Element, and Grid query types.
130
+ - Removed accidental public access to abstract Lined factories, internal element-name/export maps, result/location
131
+ bracket constructors, and direct Stop construction.
132
+
133
+ ## 0.95.0 - 2026-07-11
134
+
135
+ ### Security
136
+
137
+ - Validated XML-bound names, metadata, content, attributes, comments, preambles, and renderer inputs before serialization;
138
+ mutable content and attribute inputs can no longer invalidate an earlier check.
139
+ - Emitted collision-safe Derender source and preserved qualified or foreign nodes without dispatching them through
140
+ same-named Ruby or DSL methods.
141
+ - Verified physical gem payloads and checksums, then published immutable archives in dependency order from one manifest
142
+ through pinned, least-privilege workflows.
143
+
144
+ ### Added
145
+
146
+ - Added opt-in real-browser Showcase coverage for tab navigation and mobile SVG sizing, with failure-safe server and
147
+ browser lifecycle tests.
148
+ - Added comprehensive public YARD contract checks plus focused release-preflight and root Rakefile coverage.
149
+
150
+ ### Changed
151
+
152
+ - CI now exercises the exact Ruby 3.4.0 compatibility floor separately from the current development Ruby.
153
+ - Standard no longer caches missing SVG specifications, preserving later registry updates.
154
+ - Document and Paper profile registration is process-global and thread-atomic; identical non-bang definitions return the
155
+ canonical registration while conflicting definitions fail without replacement.
156
+ - Content, document metadata, and attribute stores capture caller-independent snapshots and stringify custom mutable
157
+ leaves once at their public mutation boundaries.
158
+ - Release verification validates actual archive contents, records their order and checksums in a manifest, and keeps the
159
+ Ruby floor compatible with the checked-in bundle.
160
+
161
+ ### Fixed
162
+
163
+ - Preserved mixed inline text, namespace-qualified and foreign nodes, whitespace, nested SVG elements, raw evaluation
164
+ parents, and Ruby-name collisions during Derender conversion.
165
+ - Rejected cyclic or invalid graphics payloads, unsafe XML renderer inputs, non-finite canvas and geometry values, and
166
+ malformed Standard, ruler, tile, grid, and export arguments before partial mutation or rendering.
167
+ - Kept open paths from receiving synthetic interiors and made per-call intersection precision independent of ambient
168
+ thread precision.
169
+ - Made multi-element append/prepend ordered and atomic, document and paper registration coherent under contention, and
170
+ copied graphics trees independent of their sources.
171
+ - Corrected PDF stamping across nested graphics-state restoration and duplicate stream rewrites.
172
+ - Made SIGINT forwarding trap-safe, balanced executor signal guards for empty scripts, and rejected recursive script-load
173
+ cycles without losing the original executor context.
174
+ - Packaged canonical README, LICENSE, and CHANGELOG files in every component gem, made manifests and release verification
175
+ independent of the working directory, validated physical package members, and preserved dependency order through the
176
+ production publishing path.
177
+ - Made Showcase shell and browser cleanup failure-safe and kept generated examples stable across browser layouts.
178
+
179
+ ### Removed
180
+
181
+ - Removed the stale internal `Undefined::Self` sentinel constant and obsolete root release-script plumbing.
182
+
183
+ ## 0.94.0 - 2026-07-10
184
+
185
+ ### Security
186
+
187
+ - XML content is validated before rendering, preventing control characters and unsafe markup from reaching generated
188
+ documents.
189
+ - Derender evaluation treats XML as data rather than executable Ruby.
190
+
191
+ ### Changed
192
+
193
+ - Breaking: made geometry element collections immutable and element equality/hash exact; use `#eq?(precision:)` for
194
+ approximate element comparison.
195
+ - Breaking: replaced `Derender.evaluate!` and `Derender.evaluate_file!` with explicit `evaluate_children` and
196
+ `evaluate_file_children` children-only APIs.
197
+ - Native PDF/PNG export dependencies are optional at runtime; users of those exporters must install Cairo/RSVG and the
198
+ relevant PDF libraries explicitly.
199
+ - Executor, Showcase, and shell execution isolate process-global state and preserve nested load failures with their
200
+ source context.
201
+ - Generated documentation and complete package archives are validated by release checks.
202
+
203
+ ### Fixed
204
+
205
+ - Preserved parsed XML semantics and nested inline text during Derender conversion.
206
+ - Rejected cyclic duplicate/adoption operations and invalid graphics, geometry, Standard, ruler, tile, and export inputs
207
+ before partial mutation or rendering.
208
+ - Reported PDF stamp replacements accurately.
209
+ - Hardened Showcase navigation, SVG preview scaling, rendered artifacts, and documentation layouts.
210
+
211
+ ## 0.93.1 - 2026-07-08
212
+
213
+ ### Changed
214
+
215
+ - Added the checker board example to the documentation showcase flow.
216
+ - Consolidated Victor Book attribution for adapted showcase examples into a single documentation note.
217
+
218
+ ### Fixed
219
+
220
+ - Fixed documentation site deployment to build with Zola 0.22.1 so showcase code syntax highlighting is rendered in
221
+ production.
222
+
223
+ ## 0.93.0 - 2026-07-08
224
+
225
+ ### Added
226
+
227
+ - Added scoped numeric precision control with thread-local defaults and `F.with_precision`.
228
+ - Added opt-in SimpleCov coverage reporting with generated output under `.cache/ruby/coverage`.
229
+ - Added YARD API documentation setup and initial public API documentation across the main components.
230
+ - Added initial user documentation pages and expanded showcase examples.
231
+
232
+ ### Changed
233
+
234
+ - Breaking: cleaned up public API names and DSL ergonomics across geometry, graphics, derender, and sundries.
235
+ - Reworked graphics document and paper profile registration semantics around explicit DSL words.
236
+ - Stabilized executor load-stack handling and CLI error reporting for script-mode DSL failures.
237
+ - Moved generated Ruby tooling output under `.cache/ruby`.
238
+ - Separated GitHub Release verification from manual RubyGems publishing.
239
+
240
+ ### Fixed
241
+
242
+ - Hardened graphics DSL dispatch, namespace isolation, document rendering, paper sizes, and validation handoff.
243
+ - Fixed derender escaping, executable text DSL output, evaluation, and load edge cases.
244
+ - Stabilized SVG standard validation, namespace handling, color data, and error contracts.
245
+ - Aligned geometry line shifting with equation offsets and tightened primitive edge cases.
246
+ - Stabilized sundries grid, ruler, tile, and native export edge cases.
247
+ - Fixed showcase rendering, SVG tab display, syntax highlighting, layout, and stale artifact handling.
248
+
249
+ ### Removed
250
+
251
+ - Removed dead graphics canvas conforming API.
252
+ - Removed unsupported bang derender/decompile wrappers.
253
+
254
+ ## 0.73.2 - 2026-07-04
255
+
256
+ ### Fixed
257
+
258
+ - Removed parent-directory license paths from gem packages so published gems install cleanly.
259
+
260
+ ## 0.73.1 - 2026-07-04
261
+
262
+ ### Fixed
263
+
264
+ - Corrected the SVG standard `seashell` color value.
265
+ - Deferred `sevgi-sundries` export loading in graphics so optional native export dependencies are only loaded when
266
+ `PDF` or `PNG` export is used.
267
+ - Removed a shadowed block parameter in graphics dispatch.
268
+ - Fixed component lint task execution from the repository root.
269
+
270
+ ### Changed
271
+
272
+ - Updated the development Ruby version to 4.0.5 and refreshed the bundle.
273
+ - Adopted rubyfmt-driven formatting and updated RuboCop configuration.
274
+
275
+ ## 0.73.0 - 2026-05-01
276
+
277
+ Initial release.