dry-validation-rust 0.1.0.pre6-x64-mingw-ucrt

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 (71) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.markdownlint.yml +9 -0
  4. data/.rubocop.yml +124 -0
  5. data/.ruby-version +1 -0
  6. data/.tool-versions +1 -0
  7. data/.yardopts +4 -0
  8. data/AGENTS.md +376 -0
  9. data/CHANGELOG.md +145 -0
  10. data/CODE_OF_CONDUCT.md +42 -0
  11. data/CONTRIBUTING.md +159 -0
  12. data/GOVERNANCE.md +68 -0
  13. data/Gemfile +15 -0
  14. data/Gemfile.lock +132 -0
  15. data/LICENSE +21 -0
  16. data/NOTICE.md +28 -0
  17. data/README.md +484 -0
  18. data/Rakefile +350 -0
  19. data/SECURITY.md +98 -0
  20. data/SECURITY_AUDIT.md +33 -0
  21. data/SUMMARY.md +30 -0
  22. data/SUPPORT.md +67 -0
  23. data/book.toml +9 -0
  24. data/codecov.yml +11 -0
  25. data/compatibility.yml +453 -0
  26. data/deny.toml +7 -0
  27. data/dry-validation-rust.gemspec +56 -0
  28. data/ext/dry_validation_rust/fuzz/.gitignore +5 -0
  29. data/ext/dry_validation_rust/fuzz/corpus/parse_plan/basic_params.json +1 -0
  30. data/lib/dry/schema.rb +6 -0
  31. data/lib/dry/validation/rust/block_keyword_parameters.rb +20 -0
  32. data/lib/dry/validation/rust/config.rb +74 -0
  33. data/lib/dry/validation/rust/contract/result.rb +180 -0
  34. data/lib/dry/validation/rust/contract/values.rb +73 -0
  35. data/lib/dry/validation/rust/contract.rb +400 -0
  36. data/lib/dry/validation/rust/errors.rb +14 -0
  37. data/lib/dry/validation/rust/evaluator.rb +295 -0
  38. data/lib/dry/validation/rust/failures.rb +57 -0
  39. data/lib/dry/validation/rust/generated_predicates.rb +14 -0
  40. data/lib/dry/validation/rust/macros.rb +45 -0
  41. data/lib/dry/validation/rust/message.rb +41 -0
  42. data/lib/dry/validation/rust/message_backend.rb +115 -0
  43. data/lib/dry/validation/rust/message_set.rb +159 -0
  44. data/lib/dry/validation/rust/native.rb +25 -0
  45. data/lib/dry/validation/rust/native.so +0 -0
  46. data/lib/dry/validation/rust/path.rb +65 -0
  47. data/lib/dry/validation/rust/path_trie.rb +64 -0
  48. data/lib/dry/validation/rust/result.rb +3 -0
  49. data/lib/dry/validation/rust/rule.rb +62 -0
  50. data/lib/dry/validation/rust/schema/dsl.rb +84 -0
  51. data/lib/dry/validation/rust/schema/field_builder.rb +156 -0
  52. data/lib/dry/validation/rust/schema/field_definition.rb +101 -0
  53. data/lib/dry/validation/rust/schema/predicate_block.rb +57 -0
  54. data/lib/dry/validation/rust/schema/processor_hooks.rb +46 -0
  55. data/lib/dry/validation/rust/schema/result.rb +67 -0
  56. data/lib/dry/validation/rust/schema/ruby_type_processor.rb +59 -0
  57. data/lib/dry/validation/rust/schema.rb +323 -0
  58. data/lib/dry/validation/rust/values.rb +3 -0
  59. data/lib/dry/validation/rust/version.rb +10 -0
  60. data/lib/dry/validation/rust.rb +55 -0
  61. data/lib/dry/validation.rb +66 -0
  62. data/lib/dry-schema.rb +3 -0
  63. data/lib/dry-validation.rb +3 -0
  64. data/lib/dry_validation_rust.rb +3 -0
  65. data/predicates.yml +67 -0
  66. data/rust-toolchain.toml +9 -0
  67. data/supply-chain/audits.toml +4 -0
  68. data/supply-chain/config.toml +368 -0
  69. data/supply-chain/imports.lock +4 -0
  70. data/support_matrix.yml +9 -0
  71. metadata +261 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2b453a01f2bae38a733f8b3145c9f015599549d1e177eb834fc079d7443bda91
4
+ data.tar.gz: 22651b06ba22ffab3cd5fd6a9bad0b03d1d7d98cf74a69e9593ed24e5c8faa7f
5
+ SHA512:
6
+ metadata.gz: 3ce997c6fb6de7d2ac0ec6d38dc8aec68fc105129f19b88f1a05373f886aa1116e53ac4b8ad3a7c77b081ade90d1e8baaf0f55122e8f3096c8c6cabb5d0c9d2c
7
+ data.tar.gz: 7eddeba3a78a99a9361558beffb250cd8ba105b49a6c40a5c7a74686337d6b5d5ab5ba383b3b74a986897b79d9ad50eb7cf4b08bff60b4775a715629946629f5
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /pkg/
3
+ /coverage/
4
+ /ext/dry_validation_rust/Makefile
5
+ /ext/dry_validation_rust/mkmf.log
6
+ /ext/dry_validation_rust/native.*
7
+ /lib/dry/validation/rust/native.so
8
+ /ext/dry_validation_rust/target/
9
+ /ext/dry_validation_rust/fuzz/target/
10
+ /tmp/
11
+ /build-week-2026/
12
+ /.vscode/
13
+ /target/
data/.markdownlint.yml ADDED
@@ -0,0 +1,9 @@
1
+ MD013:
2
+ line_length: 120
3
+ code_blocks: false
4
+ tables: false
5
+ MD024:
6
+ siblings_only: true
7
+ MD033: false
8
+ MD041: false
9
+ MD060: false
data/.rubocop.yml ADDED
@@ -0,0 +1,124 @@
1
+ plugins:
2
+ - rubocop-performance
3
+ - rubocop-minitest
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 3.3
7
+ NewCops: enable
8
+
9
+ # Keep complexity limits meaningful for the library while excluding declarative
10
+ # test cases and command orchestration from limits that do not aid readability.
11
+ Metrics/AbcSize:
12
+ Max: 40
13
+ Exclude:
14
+ - 'Rakefile'
15
+ - 'benchmark/**/*'
16
+ - 'script/**/*'
17
+ - 'test/**/*'
18
+
19
+ Metrics/BlockLength:
20
+ Max: 30
21
+
22
+ Metrics/ClassLength:
23
+ Max: 200
24
+ Exclude:
25
+ - 'script/**/*'
26
+ - 'test/**/*'
27
+
28
+ Metrics/CyclomaticComplexity:
29
+ Max: 16
30
+ Exclude:
31
+ - 'Rakefile'
32
+ - 'benchmark/**/*'
33
+ - 'script/**/*'
34
+ - 'test/**/*'
35
+
36
+ Metrics/MethodLength:
37
+ Max: 30
38
+ Exclude:
39
+ - 'Rakefile'
40
+ - 'benchmark/**/*'
41
+ - 'script/**/*'
42
+ - 'test/**/*'
43
+
44
+ Metrics/ParameterLists:
45
+ Max: 7
46
+
47
+ Metrics/PerceivedComplexity:
48
+ Max: 16
49
+ Exclude:
50
+ - 'Rakefile'
51
+ - 'benchmark/**/*'
52
+ - 'script/**/*'
53
+ - 'test/**/*'
54
+
55
+ Layout/LineLength:
56
+ Exclude:
57
+ - 'Rakefile'
58
+ - 'benchmark/**/*'
59
+ - 'script/**/*'
60
+ - 'test/**/*'
61
+
62
+ Style/Documentation:
63
+ Enabled: false
64
+
65
+ Gemspec/DevelopmentDependencies:
66
+ Enabled: false
67
+
68
+ Naming/FileName:
69
+ Exclude:
70
+ - 'lib/dry-schema.rb'
71
+ - 'lib/dry-validation.rb'
72
+
73
+ Naming/MethodName:
74
+ Exclude:
75
+ - 'lib/dry/validation.rb'
76
+ - 'lib/dry/validation/rust.rb'
77
+ - 'lib/dry/validation/rust/schema.rb'
78
+
79
+ # The suite uses several assertions to describe each public behavioral scenario.
80
+ # Enforcing assertion style or count would make tests less readable without
81
+ # improving coverage or failure diagnostics.
82
+ Minitest/AssertInDelta:
83
+ Enabled: false
84
+
85
+ Minitest/AssertPathExists:
86
+ Enabled: false
87
+
88
+ Minitest/AssertPredicate:
89
+ Enabled: false
90
+
91
+ Minitest/AssertTruthy:
92
+ Enabled: false
93
+
94
+ Minitest/AssertWithExpectedArgument:
95
+ Enabled: false
96
+
97
+ Minitest/EmptyLineBeforeAssertionMethods:
98
+ Enabled: false
99
+
100
+ Minitest/MultipleAssertions:
101
+ Enabled: false
102
+
103
+ Minitest/RefuteFalse:
104
+ Enabled: false
105
+
106
+ Minitest/RefutePathExists:
107
+ Enabled: false
108
+
109
+ Minitest/RefutePredicate:
110
+ Enabled: false
111
+
112
+ # These allocation-oriented rewrites are not applied wholesale without measured
113
+ # benchmarks; the performance suite remains the source of such evidence.
114
+ Performance/CollectionLiteralInLoop:
115
+ Enabled: false
116
+
117
+ Performance/DoubleStartEndWith:
118
+ Enabled: false
119
+
120
+ Performance/MapCompact:
121
+ Enabled: false
122
+
123
+ Performance/TimesMap:
124
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.7
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.3.7
data/.yardopts ADDED
@@ -0,0 +1,4 @@
1
+ --markup markdown
2
+ --protected
3
+ --no-private
4
+ lib/**/*.rb
data/AGENTS.md ADDED
@@ -0,0 +1,376 @@
1
+ # AGENTS.md — Lean feature delivery
2
+
3
+ These instructions apply to coding agents working in this repository.
4
+
5
+ ## Mission
6
+
7
+ Ship correct, reviewable user value with the least process needed to keep the codebase understandable and safe for a team.
8
+
9
+ Optimize for this order:
10
+
11
+ 1. user-visible behavior;
12
+ 2. correctness and safety;
13
+ 3. focused verification;
14
+ 4. maintainable code;
15
+ 5. minimal affected documentation;
16
+ 6. repository polish.
17
+
18
+ Do not optimize for the number of documents, tests, abstractions, or process artifacts produced.
19
+
20
+ ## Project state and progress
21
+
22
+ Do not maintain a per-task or per-commit progress log.
23
+
24
+ Code, tests, differential fixtures, benchmarks, pull requests, and Git history
25
+ are the primary evidence that implementation work happened.
26
+
27
+ Use these authoritative locations instead:
28
+
29
+ - `docs/ROADMAP.md` — intended milestone outcomes, dependency order, and exit goals;
30
+ - `compat/status.yml` — small machine-readable current milestone/task state;
31
+ - `docs/COMPATIBILITY.md` — detailed supported and unsupported behavior;
32
+ - `docs/SUPPORT_MATRIX.md` — version, runtime, and platform support;
33
+ - benchmark sources/baselines and README benchmark sections — performance evidence;
34
+ - ADRs — durable cross-cutting decisions;
35
+ - issues/PRs/Git history — work history and temporary implementation context.
36
+
37
+ Update `compat/status.yml` only when a tracked durable state actually changes,
38
+ for example:
39
+
40
+ - a milestone moves between `not_started`, `active`, `blocked`, and `complete`;
41
+ - a named milestone task changes state;
42
+ - an external blocker is added or resolved;
43
+ - the declared release phase changes.
44
+
45
+ Do not update project-state files merely because:
46
+
47
+ - an ordinary bug fix or refactoring was completed;
48
+ - tests, fixtures, source files, or documentation counts changed;
49
+ - a commit was created;
50
+ - an investigation produced temporary notes;
51
+ - a benchmark experiment failed without changing a published claim;
52
+ - a follow-up idea was discovered.
53
+
54
+ When a compatibility, support, benchmark, or architecture truth changes, update
55
+ its authoritative location rather than duplicating the same fact in
56
+ `compat/status.yml`.
57
+
58
+ For milestone-driven work:
59
+
60
+ 1. satisfy the milestone file's acceptance criteria;
61
+ 2. run the required verification;
62
+ 3. update `compat/status.yml` only if a tracked milestone/task state changed;
63
+ 4. update user/developer documentation only where its durable truth changed;
64
+ 5. keep completion details and follow-ups in the task/PR context;
65
+ 6. do not create a separate completion-report document.
66
+
67
+ Documentation describes current durable truth; it is not an activity log.
68
+
69
+ ## Default working mode
70
+
71
+ Work on one coherent capability, defect, or risk at a time.
72
+
73
+ Before editing:
74
+
75
+ 1. read the relevant implementation and tests;
76
+ 2. identify the smallest independently useful slice;
77
+ 3. state the intended behavior, explicit non-goals, likely files, and verification plan;
78
+ 4. reuse existing patterns before introducing new abstractions.
79
+
80
+ During implementation:
81
+
82
+ - keep unrelated code unchanged;
83
+ - prefer a direct implementation over speculative infrastructure;
84
+ - add focused behavioral tests;
85
+ - preserve explicit failures at unsupported or invalid boundaries;
86
+ - record follow-up ideas without implementing them;
87
+ - update only documentation whose truth changed.
88
+
89
+ At completion, report only:
90
+
91
+ 1. behavior changed;
92
+ 2. important files changed;
93
+ 3. checks run and results;
94
+ 4. remaining limitations or risks;
95
+ 5. follow-up ideas intentionally not implemented.
96
+
97
+ ## Scope guardrails
98
+
99
+ For an ordinary task, default limits are:
100
+
101
+ - one public capability or one defect class;
102
+ - at most 1,000 added lines, excluding generated code or fixtures that are the direct product requirement;
103
+ - at most 5 new source files;
104
+ - at most 3 new test files;
105
+ - at most 2 new abstractions;
106
+ - no new documentation file;
107
+ - updates to at most 2 existing documentation files;
108
+ - at most 150 added documentation lines.
109
+
110
+ If the likely change exceeds a limit, reduce it to the smallest useful vertical slice before coding.
111
+ Do not silently continue with a large implementation.
112
+
113
+ These are agent guardrails, not rigid team policy. Exceed them only when the task explicitly requires it
114
+ and the reason is stated before implementation.
115
+
116
+ ## Tests
117
+
118
+ Tests should protect observable behavior, important regressions, safety boundaries, integration
119
+ contracts, and packaging where relevant.
120
+
121
+ Before reporting a code-changing task as complete, run `bundle exec rubocop`
122
+ when Ruby source, tests, tooling, or CI configuration changed. Treat any
123
+ RuboCop failure as unfinished work: fix the offenses or report the remaining
124
+ baseline explicitly instead of claiming completion.
125
+
126
+ Prefer:
127
+
128
+ - focused unit tests for local behavior;
129
+ - integration tests for public flows;
130
+ - contract or differential tests for compatibility claims;
131
+ - regression tests for fixed defects;
132
+ - property, fuzz, or stress tests only for identified risk surfaces.
133
+
134
+ Do not add tests whose main purpose is checking:
135
+
136
+ - Markdown wording or headings;
137
+ - roadmap structure;
138
+ - documentation file presence or count;
139
+ - issue or pull-request template structure;
140
+ - stage completion;
141
+ - repository maturity claims;
142
+ - private implementation details already covered through public behavior.
143
+
144
+ Do not weaken or delete a failing test merely to make checks green.
145
+
146
+ ## Documentation
147
+
148
+ Documentation exists to help users and maintainers make correct decisions.
149
+
150
+ Update documentation when a change affects:
151
+
152
+ - public behavior or API;
153
+ - configuration;
154
+ - installation or operation;
155
+ - compatibility or support boundaries;
156
+ - architecture ownership or data flow;
157
+ - a decision that would otherwise be repeatedly reopened.
158
+
159
+ Do not create a document for:
160
+
161
+ - an ordinary implementation plan;
162
+ - a completed task report;
163
+ - a temporary investigation;
164
+ - information already expressed clearly elsewhere;
165
+ - speculative future architecture.
166
+
167
+ Use comments for local reasoning, tests for executable behavior, `compat/status.yml`
168
+ for small machine-readable current milestone/task state, `docs/ROADMAP.md` for
169
+ intended outcomes, issues for planned work, pull requests for change context,
170
+ ADRs for durable cross-cutting decisions, and user documentation for supported
171
+ usage. Link between authoritative locations instead of copying the same state
172
+ into several documents.
173
+
174
+ ## Abstractions
175
+
176
+ Do not add a framework, registry, adapter layer, plugin system, generic configuration mechanism, or
177
+ extension point for one anticipated use case.
178
+
179
+ Generalize only when:
180
+
181
+ - at least two implemented cases need the same behavior;
182
+ - current duplication is concrete and meaningful;
183
+ - the abstraction reduces total conceptual surface;
184
+ - its ownership and failure behavior are clear.
185
+
186
+ Prefer duplication that is easy to remove over an abstraction that is difficult to understand.
187
+
188
+ ## Failure behavior
189
+
190
+ Invalid, unsupported, or unsafe behavior must fail explicitly and predictably.
191
+
192
+ Never:
193
+
194
+ - silently ignore unsupported input;
195
+ - accept unsupported syntax as a no-op;
196
+ - approximate semantics without an explicit opt-in;
197
+ - hide an unexpected exception as a normal result;
198
+ - substitute a fallback that changes behavior without documentation;
199
+ - claim support because input parses successfully.
200
+
201
+ ## Compatibility and performance claims
202
+
203
+ Compatibility claims require executable evidence against a pinned reference or a clearly documented contract.
204
+
205
+ Performance claims require reproducible before-and-after measurements on representative workloads.
206
+ Report neutral and negative results as well as improvements. Never broaden a synthetic result into a
207
+ general claim.
208
+
209
+ ## Team decisions
210
+
211
+ Use an ADR only when a decision is durable, cross-cutting, costly to reverse, or likely to be reopened by multiple contributors.
212
+
213
+ An ADR should normally fit on one page and contain:
214
+
215
+ - context;
216
+ - decision;
217
+ - consequences;
218
+ - alternatives considered.
219
+
220
+ Do not write an ADR for routine implementation choices.
221
+
222
+ ## Skill selection
223
+
224
+ Use the smallest set of skills needed for the active task.
225
+
226
+ Choose one primary skill for implementation or delivery. Preflight and review skills may be used before
227
+ or after it, but they should not expand the task.
228
+
229
+ ### Primary implementation skills
230
+
231
+ Use exactly one of these for ordinary implementation work:
232
+
233
+ - `.agents/skills/feature-delivery/SKILL.md` — implement one independently useful user-visible capability;
234
+ - `.agents/skills/bug-fix/SKILL.md` — reproduce and fix one defect class with regression coverage;
235
+ - `.agents/skills/compatibility/SKILL.md` — implement one verified compatibility slice against a pinned reference;
236
+ - `.agents/skills/migration/SKILL.md` — enable one realistic migration path with minimal user changes;
237
+ - `.agents/skills/performance/SKILL.md` — improve one measured bottleneck while preserving behavior;
238
+ - `.agents/skills/refactoring/SKILL.md` — improve internal structure without observable behavior changes;
239
+ - `.agents/skills/documentation/SKILL.md` — update documentation when documentation is the primary deliverable;
240
+ - `.agents/skills/release-readiness/SKILL.md` — verify an actual release candidate.
241
+
242
+ Do not combine several primary implementation skills in one ordinary task.
243
+
244
+ If a task appears to require two primary skills, select the dominant outcome and split the remaining
245
+ work into a separate task unless the work is genuinely inseparable.
246
+
247
+ Examples:
248
+
249
+ - a feature that requires a small local refactoring remains a feature-delivery task;
250
+ - a bug fix that includes a benchmark to confirm no regression remains a bug-fix task;
251
+ - a compatibility feature required for a real migration may use migration as the primary skill and
252
+ compatibility evidence as part of its workflow;
253
+ - release preparation must not include unrelated feature development.
254
+
255
+ ### Preflight and decision skills
256
+
257
+ Use these before implementation when needed:
258
+
259
+ - `.agents/skills/scope-guard/SKILL.md` — define the smallest coherent slice and explicit non-goals before coding;
260
+ - `.agents/skills/investigation/SKILL.md` — inspect, reproduce, or evaluate without modifying implementation files;
261
+ - `.agents/skills/architecture-decision/SKILL.md` — evaluate a durable cross-cutting decision and
262
+ create an ADR only when the ADR threshold is met.
263
+
264
+ These skills normally do not modify production code.
265
+
266
+ Use `scope-guard` when the request is broad, ambiguous, milestone-sized, or likely to exceed the scope guardrails.
267
+
268
+ Use `investigation` when the root cause, compatibility behavior, feasibility, or architecture boundary is not yet known.
269
+
270
+ Use `architecture-decision` only when implementation cannot proceed safely without resolving a durable cross-team decision.
271
+
272
+ After a preflight or decision task, start a separate implementation run with the selected primary skill
273
+ and the approved scope.
274
+
275
+ ### Review skills
276
+
277
+ Use these after implementation or for an existing diff:
278
+
279
+ - `.agents/skills/code-review/SKILL.md` — review correctness, compatibility, maintainability, and unnecessary complexity;
280
+ - `.agents/skills/safety-review/SKILL.md` — review panic safety, memory/resource ownership,
281
+ concurrency, failure behavior, and other identified safety risks.
282
+
283
+ A review skill must not turn the review into unrelated implementation work.
284
+
285
+ Use `safety-review` only when the code touches a meaningful safety surface, such as:
286
+
287
+ - native or FFI boundaries;
288
+ - unsafe code;
289
+ - concurrency or synchronization;
290
+ - resource lifetime or cleanup;
291
+ - persistence or data-loss risk;
292
+ - authentication, authorization, or secrets;
293
+ - untrusted parsing or deserialization;
294
+ - panic or exception containment.
295
+
296
+ For ordinary changes, `code-review` alone is sufficient.
297
+
298
+ ### Allowed skill sequences
299
+
300
+ Valid sequences include:
301
+
302
+ ```text
303
+ scope-guard -> feature-delivery -> code-review
304
+ investigation -> bug-fix -> code-review
305
+ investigation -> performance -> code-review
306
+ architecture-decision -> feature-delivery -> code-review
307
+ scope-guard -> migration -> code-review
308
+ feature-delivery -> safety-review
309
+ release-readiness
310
+ ```
311
+
312
+ The arrows represent separate phases or runs. They do not authorize all skills to broaden one implementation session.
313
+
314
+ ### Skill routing rules
315
+
316
+ - Load only the skill needed for the current phase.
317
+ - Do not load every available skill by default.
318
+ - Do not let feature work automatically trigger release, documentation, architecture, or repository-cleanup work.
319
+ - Do not let review skills add unrelated requirements.
320
+ - Do not let `scope-guard` create permanent planning artifacts.
321
+ - Do not let `investigation` modify code unless the user explicitly starts a separate implementation phase.
322
+ - Do not let `documentation` rewrite unrelated documents.
323
+ - Do not let `refactoring` introduce behavior changes.
324
+ - Do not let `performance` optimize without a measured baseline.
325
+ - Do not let `compatibility` claim parity beyond executable evidence.
326
+ - Do not let `migration` become a complete reimplementation of the source system.
327
+ - Do not let `release-readiness` publish, tag, or release without explicit authorization.
328
+
329
+ ## Working with scope guard
330
+
331
+ For a broad or ambiguous task, use this sequence:
332
+
333
+ 1. apply `.agents/skills/scope-guard/SKILL.md` without modifying files;
334
+ 2. identify one approved vertical slice;
335
+ 3. select the matching primary implementation skill;
336
+ 4. implement only the approved slice;
337
+ 5. review the resulting diff with the smallest appropriate review skill.
338
+
339
+ The approved scope should state:
340
+
341
+ - outcome;
342
+ - included behavior;
343
+ - explicit non-goals;
344
+ - likely affected areas;
345
+ - verification plan;
346
+ - stop conditions.
347
+
348
+ Do not reopen or expand the approved scope during implementation unless a required blocker is discovered.
349
+
350
+ ## Follow-up work
351
+
352
+ When work reveals additional ideas, classify them as:
353
+
354
+ - required blocker — include only the smallest necessary fix;
355
+ - related follow-up — report but do not implement;
356
+ - independent defect — recommend a separate bug-fix task;
357
+ - architectural uncertainty — stop and use investigation or architecture-decision;
358
+ - unrelated cleanup — leave unchanged.
359
+
360
+ Do not implement a follow-up merely because it is nearby or easy.
361
+
362
+ ## Prohibited unless explicitly requested
363
+
364
+ Do not:
365
+
366
+ - publish artifacts or releases;
367
+ - create or push tags;
368
+ - make remote repository changes;
369
+ - change branch protection, visibility, or secrets;
370
+ - add credentials;
371
+ - create a new planning hierarchy;
372
+ - generate long compliance reports;
373
+ - reorganize documentation during unrelated feature work;
374
+ - implement backlog ideas discovered during the task;
375
+ - load every skill for every task;
376
+ - convert preflight or review work into an unapproved implementation task.
data/CHANGELOG.md ADDED
@@ -0,0 +1,145 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.1.0.pre6 — 2026-09-02
6
+
7
+ - Added Rails, Hanami, Roda, and Grape integration guides for the side-by-side
8
+ contract API.
9
+ - Added a GitHub Discussions link for usage questions in the README.
10
+ - Added a pull-request checklist and path-based labels for changed areas.
11
+ - Added guided bug, feature, and performance-regression issue forms for contributors.
12
+ - Made the CI support matrix and its published platform table YAML-backed and
13
+ checked for synchronization in CI.
14
+ - Made the documented compatibility matrix YAML-backed and checked for sync in CI.
15
+ - Added hosted Rust API reference documentation to the GitHub Pages site.
16
+ - Added a getting-started guide for installation, first contracts, macros,
17
+ web integration, and native-build troubleshooting.
18
+ - Added an mdBook documentation site with sidebar navigation, native search,
19
+ and GitHub Pages deployment from `main`.
20
+ - Added a searchable YARD Ruby API reference to the GitHub Pages site.
21
+ - Added opt-in MemoryProfiler allocation and retained-memory totals to the
22
+ schema-throughput JSON benchmark matrix for both engines.
23
+ - Added a documented `script/benchmark` entrypoint for reproducible local
24
+ schema-throughput comparisons and JSON measurements.
25
+ - Improved unsupported schema DSL errors with migration guidance for boolean
26
+ predicate composition, UUID predicates, and filtering.
27
+ - Added a five-minute pinned-upstream differential fuzz CI job covering 1,000
28
+ generated schema/input pairs per run.
29
+ - Added a blocking pull-request CI job for the pinned upstream differential
30
+ compatibility suite, with uploaded test logs.
31
+ - Made publication benchmark duration and live progress visible, so long
32
+ full-matrix runs can be distinguished from stalled executions.
33
+ - Added a repeatable publication benchmark runner with calibrated measurements,
34
+ checkpoints, environment metadata, and documented evidence guidance.
35
+ - Added CI checks for Markdown style violations and broken documentation links.
36
+ - Added local Ruby and Rust CPU-flamegraph scripts for diagnosing validation
37
+ hot paths.
38
+ - Added a schema-throughput pull-request regression gate with a 5% p95-latency
39
+ threshold and a GitHub Pages benchmark dashboard refreshed from trusted runs.
40
+ - Added Ruby line-coverage reporting and a Codecov quality gate to CI.
41
+ - Added native Rust line-coverage reporting and a Codecov quality gate to CI.
42
+ - Added beta Rust CI coverage and a weekly nightly Miri check for the native extension.
43
+ - Added an allowed-to-fail Windows CI job that compiles the native extension
44
+ and runs the Ruby test suite with RubyInstaller's UCRT toolchain.
45
+ - Fixed deeply nested Ruby type processing to avoid exhausting Windows' Ruby
46
+ VM stack during validation.
47
+ - Added Gitleaks secret scanning to the Security workflow for pull requests,
48
+ protected-branch pushes, scheduled runs, and manual runs.
49
+ - Added local release automation for version and Cargo-lockfile updates, dated
50
+ changelog sections, and release tags, plus pull-request changelog enforcement.
51
+ - Added representative throughput, allocation, and native Criterion benchmark
52
+ coverage with regression gates where main-branch baselines are available.
53
+ - Improved source and native-gem build reliability across supported targets,
54
+ including MinGW source builds and cross-compilation packaging.
55
+ - Added release-publishing preflight, signed native-gem artifacts, and trusted
56
+ RubyGems publishing support.
57
+
58
+ ## 0.1.0.pre5 — 2026-08-18
59
+
60
+ - Added pluggable schema message backends through custom `MessageBackend`
61
+ subclasses.
62
+ - Changed the native engine boundary to return a typed `SchemaResult` with
63
+ `#output` and `#errors` accessors.
64
+ - Fixed native predicate evaluation to propagate exceptions raised by Ruby
65
+ predicate methods instead of returning validation failures.
66
+ - Added generated predicate ownership declarations and explicit rule-context
67
+ visibility for the supported contract API.
68
+ - Improved native schema, coercion, predicate, and rule-dependency execution
69
+ while preserving the documented compatibility subset.
70
+ - Added Rust 1.75 MSRV verification, source-gem package auditing, and public
71
+ API documentation checks.
72
+
73
+ ## 0.1.0.pre4 — 2026-08-12
74
+
75
+ - Improved native coercion and declared-key validation performance.
76
+ - Fixed predicate-block arity validation and range-predicate message
77
+ interpolation.
78
+ - Improved native structured error reporting and stability coverage for hostile
79
+ Ruby inputs.
80
+ - Refined the public schema, contract, result, values, and message data types
81
+ without broadening the documented compatibility surface.
82
+
83
+ ## 0.1.0.pre3 — 2026-08-09
84
+
85
+ - Added `config.validate_keys = true` for `params` and `json` schemas to
86
+ report undeclared keys, including in nested hashes.
87
+ - Added supported predicate-composition blocks to schema value declarations.
88
+ - Added `:value_coercer` schema processor hooks that run before and after
89
+ native schema evaluation.
90
+ - Added direct-field support for custom `dry-types` objects and constructors.
91
+ - Added configurable YAML message templates and an optional I18n message
92
+ backend for schema errors.
93
+ - Added source-gem package auditing with an isolated installation smoke test.
94
+ - Documented the coordinated vulnerability-disclosure process, including a
95
+ 90-day post-fix-release embargo and the weekly dependency-audit schedule.
96
+
97
+ ## 0.1.0.pre2 — 2026-08-03
98
+
99
+ - Added typed native predicate arguments; invalid null and object arguments are
100
+ rejected when compiling a schema plan.
101
+ - Added explicit depth limits for native schema plans and nested schema
102
+ traversal.
103
+ - Changed `MessageSet#messages` to return a read-only view; use `#add` to add
104
+ messages to a mutable message set.
105
+ - Relaxed the native extension's Magnus dependency to compatible `0.8.x`
106
+ patch releases.
107
+ - Added coercion boundary and concurrent contract-call coverage.
108
+ - Added Rust package-manifest verification to CI.
109
+ - Added product-scope documentation, including the support matrix and pinned
110
+ upstream compatibility references.
111
+ - Added canonical verification and benchmark-smoke scripts.
112
+ - Added fixture-backed baseline behavior tests and verification documentation.
113
+ - Excluded local Cargo target output from source gem file selection.
114
+ - Added public RubyGems metadata and a package audit task for source-gem
115
+ contents, artifact rejection, isolated install, and safe-entrypoint smoke
116
+ verification.
117
+ - Added GitHub Actions workflows for Ruby/Rust CI, compatibility preflight,
118
+ security audit, package audit, and scheduled fuzz preflight.
119
+ - Added Dependabot configuration, dependency audit policy, and dependency
120
+ version capture in canonical verification logs.
121
+ - Added contribution, conduct, security, support, and governance policies plus
122
+ structured issue forms and a pull request template.
123
+ - Added project-management policy, roadmap-to-milestone mapping, issue-quality
124
+ form, canonical labels, work-in-progress limits, and an idempotent GitHub API
125
+ synchronizer with dry-run defaults.
126
+ - Replaced the extensive stage catalog with a compact outcome-oriented roadmap
127
+ and aligned project synchronization, issue milestones, and workflow references.
128
+ - Removed prose-only documentation/community/project-policy tests and made
129
+ remaining configuration tests protect executable, package, or security
130
+ behavior without freezing exact roadmap counts.
131
+
132
+ ## 0.1.0.pre1 — 2026-07-12
133
+
134
+ - Added a Magnus/rb-sys native extension with immutable compiled schema plans.
135
+ - Added `params`, `json`, and non-coercing `schema` modes.
136
+ - Added required, optional, filled, maybe, hash, array, primitive member,
137
+ nested member, coercion, type check, and common predicate support.
138
+ - Added ordered Ruby contract rules, multi-key rules, nested paths,
139
+ `rule.each`, key/base failures, context, options, and macros.
140
+ - Added result, values, message, message-set, pattern-matching, inheritance,
141
+ external schema reuse, and safe/exact entrypoints.
142
+ - Added compatibility, architecture, feasibility, testing, and benchmark
143
+ documentation.
144
+
145
+ This is an experiment, not a production-compatible release.