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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.markdownlint.yml +9 -0
- data/.rubocop.yml +124 -0
- data/.ruby-version +1 -0
- data/.tool-versions +1 -0
- data/.yardopts +4 -0
- data/AGENTS.md +376 -0
- data/CHANGELOG.md +145 -0
- data/CODE_OF_CONDUCT.md +42 -0
- data/CONTRIBUTING.md +159 -0
- data/GOVERNANCE.md +68 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +132 -0
- data/LICENSE +21 -0
- data/NOTICE.md +28 -0
- data/README.md +484 -0
- data/Rakefile +350 -0
- data/SECURITY.md +98 -0
- data/SECURITY_AUDIT.md +33 -0
- data/SUMMARY.md +30 -0
- data/SUPPORT.md +67 -0
- data/book.toml +9 -0
- data/codecov.yml +11 -0
- data/compatibility.yml +453 -0
- data/deny.toml +7 -0
- data/dry-validation-rust.gemspec +56 -0
- data/ext/dry_validation_rust/fuzz/.gitignore +5 -0
- data/ext/dry_validation_rust/fuzz/corpus/parse_plan/basic_params.json +1 -0
- data/lib/dry/schema.rb +6 -0
- data/lib/dry/validation/rust/block_keyword_parameters.rb +20 -0
- data/lib/dry/validation/rust/config.rb +74 -0
- data/lib/dry/validation/rust/contract/result.rb +180 -0
- data/lib/dry/validation/rust/contract/values.rb +73 -0
- data/lib/dry/validation/rust/contract.rb +400 -0
- data/lib/dry/validation/rust/errors.rb +14 -0
- data/lib/dry/validation/rust/evaluator.rb +295 -0
- data/lib/dry/validation/rust/failures.rb +57 -0
- data/lib/dry/validation/rust/generated_predicates.rb +14 -0
- data/lib/dry/validation/rust/macros.rb +45 -0
- data/lib/dry/validation/rust/message.rb +41 -0
- data/lib/dry/validation/rust/message_backend.rb +115 -0
- data/lib/dry/validation/rust/message_set.rb +159 -0
- data/lib/dry/validation/rust/native.rb +25 -0
- data/lib/dry/validation/rust/native.so +0 -0
- data/lib/dry/validation/rust/path.rb +65 -0
- data/lib/dry/validation/rust/path_trie.rb +64 -0
- data/lib/dry/validation/rust/result.rb +3 -0
- data/lib/dry/validation/rust/rule.rb +62 -0
- data/lib/dry/validation/rust/schema/dsl.rb +84 -0
- data/lib/dry/validation/rust/schema/field_builder.rb +156 -0
- data/lib/dry/validation/rust/schema/field_definition.rb +101 -0
- data/lib/dry/validation/rust/schema/predicate_block.rb +57 -0
- data/lib/dry/validation/rust/schema/processor_hooks.rb +46 -0
- data/lib/dry/validation/rust/schema/result.rb +67 -0
- data/lib/dry/validation/rust/schema/ruby_type_processor.rb +59 -0
- data/lib/dry/validation/rust/schema.rb +323 -0
- data/lib/dry/validation/rust/values.rb +3 -0
- data/lib/dry/validation/rust/version.rb +10 -0
- data/lib/dry/validation/rust.rb +55 -0
- data/lib/dry/validation.rb +66 -0
- data/lib/dry-schema.rb +3 -0
- data/lib/dry-validation.rb +3 -0
- data/lib/dry_validation_rust.rb +3 -0
- data/predicates.yml +67 -0
- data/rust-toolchain.toml +9 -0
- data/supply-chain/audits.toml +4 -0
- data/supply-chain/config.toml +368 -0
- data/supply-chain/imports.lock +4 -0
- data/support_matrix.yml +9 -0
- 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
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
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.
|