specproof 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +283 -0
- data/docs/agent-skills.md +60 -0
- data/docs/benchmark.md +24 -0
- data/docs/constrained-partition-pairs-results.md +44 -0
- data/docs/finite-strings-results.md +75 -0
- data/docs/implementation-status.md +65 -0
- data/docs/input-selection-results.md +123 -0
- data/docs/lint-cleanup-plan.md +12 -0
- data/docs/method-targets-results.md +68 -0
- data/docs/minitest-compatibility.md +33 -0
- data/docs/optional-arguments-plan.md +25 -0
- data/docs/optional-arguments-results.md +45 -0
- data/docs/pairwise-partitions-results.md +53 -0
- data/docs/pairwise-results.md +77 -0
- data/docs/pairwise-suggestions-results.md +104 -0
- data/docs/rbs-implementation-status.md +115 -0
- data/docs/rbs-string-literals-results.md +58 -0
- data/docs/real-project-pilot.md +84 -0
- data/docs/report-format.md +244 -0
- data/examples/age_policy/README.md +39 -0
- data/examples/age_policy/faulty/lib/age_policy.rb +9 -0
- data/examples/age_policy/faulty/test/age_policy_examples_test.rb +17 -0
- data/examples/age_policy/faulty/test/age_policy_test.rb +21 -0
- data/examples/age_policy/lib/age_policy.rb +8 -0
- data/examples/age_policy/run.rb +23 -0
- data/examples/age_policy/specification.rb +8 -0
- data/examples/age_policy/test/age_policy_test.rb +18 -0
- data/examples/constrained_partition_pairs/README.md +40 -0
- data/examples/constrained_partition_pairs/lib/account_eligibility.rb +8 -0
- data/examples/constrained_partition_pairs/requirements.md +11 -0
- data/examples/constrained_partition_pairs/run.rb +22 -0
- data/examples/constrained_partition_pairs/specification.rb +17 -0
- data/examples/constrained_partition_pairs/test_account_eligibility.rb +34 -0
- data/examples/input_selection/README.md +22 -0
- data/examples/input_selection/delivery_policy.rb +11 -0
- data/examples/input_selection/requirements.md +9 -0
- data/examples/input_selection/specification.rb +8 -0
- data/examples/input_selection/test_delivery_policy.rb +38 -0
- data/examples/method_targets/README.md +30 -0
- data/examples/method_targets/lib/delivery_defaults.rb +8 -0
- data/examples/method_targets/lib/delivery_options.rb +12 -0
- data/examples/method_targets/requirements.md +20 -0
- data/examples/method_targets/specification_objects.rb +17 -0
- data/examples/method_targets/specification_strings.rb +15 -0
- data/examples/pairwise/README.md +46 -0
- data/examples/pairwise/constrained_requirements.md +6 -0
- data/examples/pairwise/constrained_specification.rb +11 -0
- data/examples/pairwise/corrected/lib/delivery_options.rb +11 -0
- data/examples/pairwise/corrected/test/delivery_options_test.rb +28 -0
- data/examples/pairwise/faulty/lib/delivery_options.rb +11 -0
- data/examples/pairwise/faulty/test/gap_delivery_options_test.rb +10 -0
- data/examples/pairwise/faulty/test/initial_delivery_options_test.rb +23 -0
- data/examples/pairwise/requirements.md +11 -0
- data/examples/pairwise/run.rb +36 -0
- data/examples/pairwise/specification.rb +9 -0
- data/examples/pairwise/three_boolean/lib/boolean_batch.rb +8 -0
- data/examples/pairwise/three_boolean/test/boolean_batch_test.rb +28 -0
- data/examples/pairwise/three_boolean_specification.rb +10 -0
- data/examples/pairwise_partitions/README.md +34 -0
- data/examples/pairwise_partitions/lib/age_policy.rb +8 -0
- data/examples/pairwise_partitions/requirements.md +8 -0
- data/examples/pairwise_partitions/run.rb +22 -0
- data/examples/pairwise_partitions/specification.rb +13 -0
- data/examples/pairwise_partitions/test_age_policy.rb +29 -0
- data/examples/pairwise_suggestions/README.md +48 -0
- data/examples/pairwise_suggestions/run.rb +55 -0
- data/examples/pairwise_suggestions/three_boolean/lib/suggested_boolean_batch.rb +8 -0
- data/examples/pairwise_suggestions/three_boolean/requirements.md +7 -0
- data/examples/pairwise_suggestions/three_boolean/specification.rb +11 -0
- data/examples/pairwise_suggestions/three_boolean/test/baseline_test.rb +9 -0
- data/examples/pairwise_suggestions/three_boolean/test/complete_test.rb +22 -0
- data/examples/partition_gap.rb +8 -0
- data/examples/rbs_registration/README.md +58 -0
- data/examples/rbs_registration/implementations/age_gt/registration.rb +8 -0
- data/examples/rbs_registration/implementations/age_gte/registration.rb +8 -0
- data/examples/rbs_registration/requirements.md +9 -0
- data/examples/rbs_registration/sig/registration.rbs +3 -0
- data/examples/rbs_registration/specification.rb +10 -0
- data/examples/rbs_registration/test_registration.rb +43 -0
- data/examples/rbs_string_literals/README.md +34 -0
- data/examples/rbs_string_literals/lib/delivery_options.rb +9 -0
- data/examples/rbs_string_literals/requirements.md +11 -0
- data/examples/rbs_string_literals/sig/delivery_options.rbs +3 -0
- data/examples/rbs_string_literals/specification.rb +7 -0
- data/examples/rbs_string_literals/test_delivery_options.rb +46 -0
- data/examples/shipping.rb +12 -0
- data/exe/specproof +7 -0
- data/lib/specproof/checker.rb +144 -0
- data/lib/specproof/cli.rb +292 -0
- data/lib/specproof/collector.rb +304 -0
- data/lib/specproof/combinations.rb +226 -0
- data/lib/specproof/composer.rb +97 -0
- data/lib/specproof/coverage.rb +229 -0
- data/lib/specproof/coverage_report.rb +334 -0
- data/lib/specproof/domains.rb +124 -0
- data/lib/specproof/loader.rb +285 -0
- data/lib/specproof/minitest.rb +443 -0
- data/lib/specproof/model.rb +198 -0
- data/lib/specproof/partition_space.rb +268 -0
- data/lib/specproof/planner.rb +125 -0
- data/lib/specproof/report.rb +248 -0
- data/lib/specproof/skills.rb +188 -0
- data/lib/specproof/sources/rbs.rb +137 -0
- data/lib/specproof/sources/rbs_projector.rb +268 -0
- data/lib/specproof/suggestion_report.rb +159 -0
- data/lib/specproof/suggestions.rb +352 -0
- data/lib/specproof/target_name.rb +100 -0
- data/lib/specproof/type_constraints.rb +76 -0
- data/lib/specproof/version.rb +7 -0
- data/lib/specproof.rb +100 -0
- data/sig/specproof.rbs +222 -0
- data/skills/specproof-specify/SKILL.md +282 -0
- data/skills/specproof-specify/references/usage.md +265 -0
- data/skills/specproof-test-gaps/SKILL.md +214 -0
- data/skills/specproof-test-gaps/references/usage.md +231 -0
- metadata +165 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
# Minitest coverage report reference
|
|
2
|
+
|
|
3
|
+
This reference targets SpecProof `0.1.x`, JSON schema `1`, and
|
|
4
|
+
`input-basics-v1` by default. `pairwise-finite-v1` and
|
|
5
|
+
`pairwise-partitions-v1` are opt-in and must be selected explicitly in both
|
|
6
|
+
plan and Minitest setup. Use Minitest
|
|
7
|
+
`>= 5.26.2` and `< 5.28.0` on CRuby `3.3`,
|
|
8
|
+
`3.4`, or `4.0`. The package/runtime major and minor versions must match.
|
|
9
|
+
Prefer `~> 5.26.2` when using published packages; a mislabeled package is
|
|
10
|
+
rejected even when its metadata alone falls within the supported range.
|
|
11
|
+
Confirm `specproof --version` and `specproof_version`; report unsupported
|
|
12
|
+
versions instead of guessing field meanings. Do not infer finite-string support
|
|
13
|
+
from the `0.1.x` version range; verify with a fresh check and plan from the
|
|
14
|
+
installed build.
|
|
15
|
+
|
|
16
|
+
Run the full test suite as a fresh process, for example:
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
bundle exec rake test
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Prefer the repository's existing full-suite command when available. Do not
|
|
23
|
+
filter the suite when claiming total project coverage. The adapter measures
|
|
24
|
+
direct calls to supported methods during the original Minitest run. It does not
|
|
25
|
+
inspect assertions or replay tests. Unsupported signatures, collector errors,
|
|
26
|
+
and out-of-domain inputs cannot be counted as successful obligation evidence.
|
|
27
|
+
|
|
28
|
+
Targets may be canonical strings (`"Owner#instance_method"` or
|
|
29
|
+
`"Owner.singleton_method"`) or Ruby method objects for directly defined public
|
|
30
|
+
methods on named classes/modules. Prefer strings for offline check/plan and
|
|
31
|
+
when an owner might autoload; they remain unresolved. Prefer `Owner.method(:x)`
|
|
32
|
+
or `Owner.instance_method(:x)` when code is loaded and reflection is useful;
|
|
33
|
+
the method is not invoked, and the object must still identify the current direct
|
|
34
|
+
definition when declared. Equivalent forms share canonical target strings,
|
|
35
|
+
digests, and obligation IDs. Bound methods on arbitrary instances, aliases,
|
|
36
|
+
inherited singleton methods, and anonymous owners are unsupported. Reports
|
|
37
|
+
retain string target names; editor navigation depends on language-server
|
|
38
|
+
support. Minitest collection also supports selected singleton methods on named
|
|
39
|
+
classes and modules.
|
|
40
|
+
|
|
41
|
+
After the declaration passes check and plan, capture a fresh report from the
|
|
42
|
+
intended current test suite before editing tests or production code. Inspect its
|
|
43
|
+
`run_id`, digest, input scope, completion, integrity, and `tests_passed` value.
|
|
44
|
+
An incomplete report cannot establish that an obligation was absent; preserve
|
|
45
|
+
the observed test result even when it is false. Use an intact report as the
|
|
46
|
+
baseline for existing input evidence.
|
|
47
|
+
|
|
48
|
+
The report's `scope.input_semantics` is `effective_bound_values`, and
|
|
49
|
+
`scope.argument_presence` is `not_observed`. By default, every named required or
|
|
50
|
+
optional positional/keyword parameter must be analyzed. A deliberately narrow
|
|
51
|
+
input scope must still account for every name: use an explicit
|
|
52
|
+
`exclude_input :name, reason: "..."` for each excluded parameter, and keep at
|
|
53
|
+
least one analyzed input. There is no wildcard or implicit exclusion. Excluded
|
|
54
|
+
values are not read; selected non-primitive values, including defaults, make
|
|
55
|
+
collection incomplete. Do not hide those failures by narrowing or relabeling a
|
|
56
|
+
run. Ruby applies defaults before the observed entry; omitted and explicitly
|
|
57
|
+
equal analyzed values exercise the same obligation. A raising default before
|
|
58
|
+
entry supplies no target entry evidence. Never claim omission coverage from a
|
|
59
|
+
nil/default-value hit.
|
|
60
|
+
|
|
61
|
+
Successful offline check/plan and runtime coverage reports all include
|
|
62
|
+
`scope.completeness_scope: "analyzed_inputs"` and `scope.input_scope`. Each entry
|
|
63
|
+
contains a `target`, `analyzed_inputs` names, and `excluded_inputs` records with
|
|
64
|
+
`name`, `reason`, and declaration `source` (`path`, one-based `line`, `kind`).
|
|
65
|
+
Check/plan scope describes only the declaration. Runtime-only
|
|
66
|
+
`scope.targets` and `scope.declaration_sources` identify composed targets and
|
|
67
|
+
invocation declaration paths; they do not prove which test files ran.
|
|
68
|
+
Always compare the fresh report's contract digest and input scope with the
|
|
69
|
+
current plan and intended method signature. A matching set of obligation IDs
|
|
70
|
+
does not by itself prove a matching scope. Human reports must name excluded
|
|
71
|
+
inputs and reasons.
|
|
72
|
+
|
|
73
|
+
The obligation denominator includes analyzed inputs only. Thus `100%` means
|
|
74
|
+
that every candidate for those inputs was exercised during the reported run; it
|
|
75
|
+
says nothing about excluded values or behavior, output assertions, interactions,
|
|
76
|
+
or complete method correctness. An intentionally filtered scenario report may
|
|
77
|
+
establish only that explicitly named run scope, never total project coverage.
|
|
78
|
+
|
|
79
|
+
With `pairwise-finite-v1`, the plan and runtime rows represent pairs present
|
|
80
|
+
in allowed full assignments. Every target needs a `combinations` group, and a
|
|
81
|
+
single observed valid tuple can satisfy only the pair rows it contains;
|
|
82
|
+
separate calls are not combined. The group may cover a subset of analyzed
|
|
83
|
+
inputs, but every analyzed input in each call must still be valid before any
|
|
84
|
+
hit is counted. `excluded_pairs` contains pairs with no allowed full completion
|
|
85
|
+
and is outside the denominator. Compare pairwise report criterion and exact
|
|
86
|
+
typed pair rows to a fresh pairwise plan. `all_allowed: true` is a requirement
|
|
87
|
+
claim that every tuple is permitted, not a claim of behavioral independence.
|
|
88
|
+
Each `forbid` clause must be based on requirements. Never change restrictions
|
|
89
|
+
to make missing pairs disappear. Pair hits do not establish expected results;
|
|
90
|
+
assertions need an independent behavior oracle.
|
|
91
|
+
|
|
92
|
+
With `pairwise-partitions-v1`, each grouped integer range needs explicit
|
|
93
|
+
`allow_gaps: false`, `allow_overlaps: false` partitions. Other grouped inputs use
|
|
94
|
+
finite values as singleton categories. Use `all_allowed: true` only when every
|
|
95
|
+
full assignment is allowed; otherwise use requirement-backed `forbid` clauses.
|
|
96
|
+
Integer restrictions select whole partitions with `in_partition(:name)`;
|
|
97
|
+
finite restrictions use exact values. A pair is required only when an allowed
|
|
98
|
+
full completion exists, including values of other group inputs, so exclusions
|
|
99
|
+
can be indirect. A forbidden runtime tuple contributes no pair coverage. Never
|
|
100
|
+
change restrictions to make missing pairs disappear. Explicit partitions on
|
|
101
|
+
finite-valued inputs remain unsupported. A category pair is hit when an
|
|
102
|
+
observed integer belongs to that category in a fully allowed tuple; this does
|
|
103
|
+
not mean every value in the category was observed or that the values behave
|
|
104
|
+
equivalently. Compare typed partition rows such as
|
|
105
|
+
`{ "kind": "partition", "name": "minor", "lower": "0", "upper": "17" }`
|
|
106
|
+
with a fresh plan. Suggestions use the category's lower endpoint as a concrete
|
|
107
|
+
integer; that representative does not provide a behavior oracle or boundary
|
|
108
|
+
coverage claim. The normalized constraint value used for the contract digest
|
|
109
|
+
has its own encoding, `{ "kind": "partition_reference", "name": "minor" }`;
|
|
110
|
+
obligation rows keep the existing partition encoding.
|
|
111
|
+
|
|
112
|
+
Finite strings are explicitly enumerated text scenarios, not open-ended String
|
|
113
|
+
coverage. For a required scenario such as `values: [nil, 1, "user_123"]`, retain
|
|
114
|
+
all three types and values; `"user_123"` is distinct from `:user_123`. Do not
|
|
115
|
+
substitute a symbol or omit the string when a required value cannot be planned.
|
|
116
|
+
A fresh plan must report a typed string value before relying on this feature.
|
|
117
|
+
Only exact `String` instances with valid UTF-8 or US-ASCII are accepted; US-ASCII
|
|
118
|
+
is canonicalized to UTF-8. Empty strings, whitespace, Unicode, and embedded NUL
|
|
119
|
+
are valid; invalid bytes, other encodings, and String subclasses are rejected.
|
|
120
|
+
Strings are not trimmed, case-folded, or Unicode-normalized. Owned frozen
|
|
121
|
+
snapshots protect matching from later application mutation without freezing the
|
|
122
|
+
application value. Direct Coverage observations also retain owned snapshots.
|
|
123
|
+
A retained outside-domain string witness is full-sized although witness count
|
|
124
|
+
is bounded. Explicitly selected RBS string literals and finite unions of
|
|
125
|
+
supported literals provide exact scenarios. Unrestricted RBS `String` and
|
|
126
|
+
selected unions containing unsupported members fail atomically. Verify support
|
|
127
|
+
with a fresh plan; do not infer it from `0.1.x`.
|
|
128
|
+
|
|
129
|
+
For a mixed DSL/RBS target, pass the same explicit source options to the
|
|
130
|
+
adapter that you used for offline check and plan:
|
|
131
|
+
|
|
132
|
+
```ruby
|
|
133
|
+
SpecProof::Minitest.install!(
|
|
134
|
+
specifications: ["spec/registration.rb"],
|
|
135
|
+
rbs: ["sig/registration.rbs"],
|
|
136
|
+
targets: ["Registration#eligible?"],
|
|
137
|
+
output: "tmp/specproof-coverage.json",
|
|
138
|
+
fail_on_missing: false
|
|
139
|
+
)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
For pairwise evidence, pass the same explicit criterion to `install!` and the
|
|
143
|
+
offline `plan` command. Use `pairwise-finite-v1` or `pairwise-partitions-v1`
|
|
144
|
+
only when the contract meets that criterion's group rules. Leaving it out
|
|
145
|
+
keeps scalar `input-basics-v1` behavior.
|
|
146
|
+
|
|
147
|
+
For RBS-only input, use `specifications: []` and supply both non-empty `rbs:`
|
|
148
|
+
and `targets:` arrays. Pass `--rbs FILE` and `--target 'Class#instance_method'`
|
|
149
|
+
to offline `check` and `plan`; repeat either option for additional files or
|
|
150
|
+
targets. Check/plan documents contain no runtime scope fields. Only inspect
|
|
151
|
+
`scope.targets` and `scope.declaration_sources` on a fresh coverage report.
|
|
152
|
+
|
|
153
|
+
Parse the generated JSON and require all of the following before claiming the
|
|
154
|
+
current suite covered its plan:
|
|
155
|
+
|
|
156
|
+
- `schema_version` is `1` and `kind` is `"coverage"`.
|
|
157
|
+
- `criterion` matches the selected plan (`"input-basics-v1"` by default or
|
|
158
|
+
either explicit pairwise criterion), and `contract_digest` matches a
|
|
159
|
+
fresh plan report for the same specifications and criterion.
|
|
160
|
+
- `run_id` is present and belongs to the latest full-suite execution; confirm
|
|
161
|
+
it matches the run summary emitted by that invocation.
|
|
162
|
+
- For imported declarations, `scope.targets` lists the composed runtime
|
|
163
|
+
targets, while `scope.declaration_sources` records canonical DSL paths, RBS
|
|
164
|
+
paths, and explicitly selected RBS targets. Compare these values with the
|
|
165
|
+
actual adapter configuration and the test command you ran. They do not
|
|
166
|
+
attest which test files the command loaded.
|
|
167
|
+
- `scope` describes the intended full run, with no test-name inclusion filter
|
|
168
|
+
or exclusion pattern. Inspect its original `arguments` as well as `filter`
|
|
169
|
+
and `exclude`; the report cannot attest which test files the caller loaded.
|
|
170
|
+
- `completion` is `"completed"`, `integrity` is `true`, and `errors` and
|
|
171
|
+
`incomplete_reasons` are empty. Record `tests_passed` independently from
|
|
172
|
+
coverage status.
|
|
173
|
+
- `unknown_count` and `missing_count` are zero, `outside_domain` is empty, and
|
|
174
|
+
every expected obligation ID appears with status `"exercised"` and a positive
|
|
175
|
+
hit count.
|
|
176
|
+
|
|
177
|
+
The suite's test result is separate from coverage status. Require
|
|
178
|
+
`tests_passed: true` when claiming a successful suite run. If it is false, report
|
|
179
|
+
the failing assertions and preserve that result. Change production behavior
|
|
180
|
+
only when the task explicitly authorizes a behavior fix; for test-only or review
|
|
181
|
+
work, keep the regression failure and do not weaken strict missing policy or
|
|
182
|
+
alter input scope to make the run green.
|
|
183
|
+
|
|
184
|
+
The `missing` array lists candidates with no observed calls. `unknown_count`
|
|
185
|
+
and incomplete reports mean collection could not establish a result. Keep both
|
|
186
|
+
states open. Do not treat zero missing values in a stale report as current
|
|
187
|
+
evidence. Compare the fresh digest and run ID, and re-run the whole suite after
|
|
188
|
+
any source, specification, or test change.
|
|
189
|
+
|
|
190
|
+
When a newly added boundary assertion exposes a bug and the task explicitly
|
|
191
|
+
authorizes a behavior fix, preserve the red result from the old implementation,
|
|
192
|
+
fix the method using the independent requirement, then run the full suite
|
|
193
|
+
again. For test-only or review work, preserve production code, keep the failing
|
|
194
|
+
regression, and report the unresolved finding with `tests_passed: false`. In
|
|
195
|
+
either case, retain the failing-run evidence in the task summary and report the
|
|
196
|
+
actual result from the final fresh run.
|
|
197
|
+
|
|
198
|
+
## Suggest allowed assignments for missing pairs
|
|
199
|
+
|
|
200
|
+
Use the pairwise-only command after a fresh runtime run:
|
|
201
|
+
|
|
202
|
+
```sh
|
|
203
|
+
specproof suggest spec/delivery.rb --report tmp/specproof-coverage.json --format json
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
It replans the current declaration and validates the report's schema and kind,
|
|
207
|
+
pairwise criterion, digest, exact typed obligation denominator and declared
|
|
208
|
+
scope, row statuses and hit counts, counters and projections. The report must
|
|
209
|
+
be completed and intact with no errors, incomplete reasons, or unknown
|
|
210
|
+
observations. It accepts either Boolean `tests_passed` value and copies that
|
|
211
|
+
value with the source run ID and scope. Filtered reports remain limited to
|
|
212
|
+
their recorded scope. `suggest` infers the criterion from that validated
|
|
213
|
+
report, requires exactly one report, and rejects `--criterion`. It uses
|
|
214
|
+
`greedy-pairwise-v1` for `pairwise-finite-v1` and
|
|
215
|
+
`greedy-partition-pairwise-v1` for `pairwise-partitions-v1`.
|
|
216
|
+
|
|
217
|
+
Each result row contains a full allowed combination-group assignment and the
|
|
218
|
+
missing obligation IDs it newly covers. `unassigned_inputs` lists analyzed
|
|
219
|
+
parameters outside that group and all explicitly excluded names. Supply those
|
|
220
|
+
inputs yourself; all analyzed runtime inputs must be valid for evidence to
|
|
221
|
+
count. Greedy output is deterministic, but its row count is not guaranteed to
|
|
222
|
+
be minimum.
|
|
223
|
+
|
|
224
|
+
Suggestions are never run and provide no expected output. Derive every new
|
|
225
|
+
assertion from an independent rule, and do not create expected values from the
|
|
226
|
+
method's implementation. The contract digest does not identify implementation
|
|
227
|
+
or test bytes. After editing either, run the intended suite in a fresh process
|
|
228
|
+
and check its new report and run ID. Generation has cumulative limits of
|
|
229
|
+
10,000 full assignments, 10,000 possible pair rows, and 1,000,000 candidate to
|
|
230
|
+
missing-pair memberships; report input is limited to 32 MiB. Oversized work is
|
|
231
|
+
rejected without sampling, truncation, or partial output.
|
metadata
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: specproof
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Lucian Ghinda
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: SpecProof is an experimental proof of concept for checking explicit Ruby
|
|
13
|
+
input domains and partitions, planning deterministic boundary and pairwise candidates,
|
|
14
|
+
and observing test coverage. String targets support offline analysis without loading
|
|
15
|
+
application code.
|
|
16
|
+
email:
|
|
17
|
+
- lucianghinda@users.noreply.github.com
|
|
18
|
+
executables:
|
|
19
|
+
- specproof
|
|
20
|
+
extensions: []
|
|
21
|
+
extra_rdoc_files: []
|
|
22
|
+
files:
|
|
23
|
+
- CHANGELOG.md
|
|
24
|
+
- LICENSE.txt
|
|
25
|
+
- README.md
|
|
26
|
+
- docs/agent-skills.md
|
|
27
|
+
- docs/benchmark.md
|
|
28
|
+
- docs/constrained-partition-pairs-results.md
|
|
29
|
+
- docs/finite-strings-results.md
|
|
30
|
+
- docs/implementation-status.md
|
|
31
|
+
- docs/input-selection-results.md
|
|
32
|
+
- docs/lint-cleanup-plan.md
|
|
33
|
+
- docs/method-targets-results.md
|
|
34
|
+
- docs/minitest-compatibility.md
|
|
35
|
+
- docs/optional-arguments-plan.md
|
|
36
|
+
- docs/optional-arguments-results.md
|
|
37
|
+
- docs/pairwise-partitions-results.md
|
|
38
|
+
- docs/pairwise-results.md
|
|
39
|
+
- docs/pairwise-suggestions-results.md
|
|
40
|
+
- docs/rbs-implementation-status.md
|
|
41
|
+
- docs/rbs-string-literals-results.md
|
|
42
|
+
- docs/real-project-pilot.md
|
|
43
|
+
- docs/report-format.md
|
|
44
|
+
- examples/age_policy/README.md
|
|
45
|
+
- examples/age_policy/faulty/lib/age_policy.rb
|
|
46
|
+
- examples/age_policy/faulty/test/age_policy_examples_test.rb
|
|
47
|
+
- examples/age_policy/faulty/test/age_policy_test.rb
|
|
48
|
+
- examples/age_policy/lib/age_policy.rb
|
|
49
|
+
- examples/age_policy/run.rb
|
|
50
|
+
- examples/age_policy/specification.rb
|
|
51
|
+
- examples/age_policy/test/age_policy_test.rb
|
|
52
|
+
- examples/constrained_partition_pairs/README.md
|
|
53
|
+
- examples/constrained_partition_pairs/lib/account_eligibility.rb
|
|
54
|
+
- examples/constrained_partition_pairs/requirements.md
|
|
55
|
+
- examples/constrained_partition_pairs/run.rb
|
|
56
|
+
- examples/constrained_partition_pairs/specification.rb
|
|
57
|
+
- examples/constrained_partition_pairs/test_account_eligibility.rb
|
|
58
|
+
- examples/input_selection/README.md
|
|
59
|
+
- examples/input_selection/delivery_policy.rb
|
|
60
|
+
- examples/input_selection/requirements.md
|
|
61
|
+
- examples/input_selection/specification.rb
|
|
62
|
+
- examples/input_selection/test_delivery_policy.rb
|
|
63
|
+
- examples/method_targets/README.md
|
|
64
|
+
- examples/method_targets/lib/delivery_defaults.rb
|
|
65
|
+
- examples/method_targets/lib/delivery_options.rb
|
|
66
|
+
- examples/method_targets/requirements.md
|
|
67
|
+
- examples/method_targets/specification_objects.rb
|
|
68
|
+
- examples/method_targets/specification_strings.rb
|
|
69
|
+
- examples/pairwise/README.md
|
|
70
|
+
- examples/pairwise/constrained_requirements.md
|
|
71
|
+
- examples/pairwise/constrained_specification.rb
|
|
72
|
+
- examples/pairwise/corrected/lib/delivery_options.rb
|
|
73
|
+
- examples/pairwise/corrected/test/delivery_options_test.rb
|
|
74
|
+
- examples/pairwise/faulty/lib/delivery_options.rb
|
|
75
|
+
- examples/pairwise/faulty/test/gap_delivery_options_test.rb
|
|
76
|
+
- examples/pairwise/faulty/test/initial_delivery_options_test.rb
|
|
77
|
+
- examples/pairwise/requirements.md
|
|
78
|
+
- examples/pairwise/run.rb
|
|
79
|
+
- examples/pairwise/specification.rb
|
|
80
|
+
- examples/pairwise/three_boolean/lib/boolean_batch.rb
|
|
81
|
+
- examples/pairwise/three_boolean/test/boolean_batch_test.rb
|
|
82
|
+
- examples/pairwise/three_boolean_specification.rb
|
|
83
|
+
- examples/pairwise_partitions/README.md
|
|
84
|
+
- examples/pairwise_partitions/lib/age_policy.rb
|
|
85
|
+
- examples/pairwise_partitions/requirements.md
|
|
86
|
+
- examples/pairwise_partitions/run.rb
|
|
87
|
+
- examples/pairwise_partitions/specification.rb
|
|
88
|
+
- examples/pairwise_partitions/test_age_policy.rb
|
|
89
|
+
- examples/pairwise_suggestions/README.md
|
|
90
|
+
- examples/pairwise_suggestions/run.rb
|
|
91
|
+
- examples/pairwise_suggestions/three_boolean/lib/suggested_boolean_batch.rb
|
|
92
|
+
- examples/pairwise_suggestions/three_boolean/requirements.md
|
|
93
|
+
- examples/pairwise_suggestions/three_boolean/specification.rb
|
|
94
|
+
- examples/pairwise_suggestions/three_boolean/test/baseline_test.rb
|
|
95
|
+
- examples/pairwise_suggestions/three_boolean/test/complete_test.rb
|
|
96
|
+
- examples/partition_gap.rb
|
|
97
|
+
- examples/rbs_registration/README.md
|
|
98
|
+
- examples/rbs_registration/implementations/age_gt/registration.rb
|
|
99
|
+
- examples/rbs_registration/implementations/age_gte/registration.rb
|
|
100
|
+
- examples/rbs_registration/requirements.md
|
|
101
|
+
- examples/rbs_registration/sig/registration.rbs
|
|
102
|
+
- examples/rbs_registration/specification.rb
|
|
103
|
+
- examples/rbs_registration/test_registration.rb
|
|
104
|
+
- examples/rbs_string_literals/README.md
|
|
105
|
+
- examples/rbs_string_literals/lib/delivery_options.rb
|
|
106
|
+
- examples/rbs_string_literals/requirements.md
|
|
107
|
+
- examples/rbs_string_literals/sig/delivery_options.rbs
|
|
108
|
+
- examples/rbs_string_literals/specification.rb
|
|
109
|
+
- examples/rbs_string_literals/test_delivery_options.rb
|
|
110
|
+
- examples/shipping.rb
|
|
111
|
+
- exe/specproof
|
|
112
|
+
- lib/specproof.rb
|
|
113
|
+
- lib/specproof/checker.rb
|
|
114
|
+
- lib/specproof/cli.rb
|
|
115
|
+
- lib/specproof/collector.rb
|
|
116
|
+
- lib/specproof/combinations.rb
|
|
117
|
+
- lib/specproof/composer.rb
|
|
118
|
+
- lib/specproof/coverage.rb
|
|
119
|
+
- lib/specproof/coverage_report.rb
|
|
120
|
+
- lib/specproof/domains.rb
|
|
121
|
+
- lib/specproof/loader.rb
|
|
122
|
+
- lib/specproof/minitest.rb
|
|
123
|
+
- lib/specproof/model.rb
|
|
124
|
+
- lib/specproof/partition_space.rb
|
|
125
|
+
- lib/specproof/planner.rb
|
|
126
|
+
- lib/specproof/report.rb
|
|
127
|
+
- lib/specproof/skills.rb
|
|
128
|
+
- lib/specproof/sources/rbs.rb
|
|
129
|
+
- lib/specproof/sources/rbs_projector.rb
|
|
130
|
+
- lib/specproof/suggestion_report.rb
|
|
131
|
+
- lib/specproof/suggestions.rb
|
|
132
|
+
- lib/specproof/target_name.rb
|
|
133
|
+
- lib/specproof/type_constraints.rb
|
|
134
|
+
- lib/specproof/version.rb
|
|
135
|
+
- sig/specproof.rbs
|
|
136
|
+
- skills/specproof-specify/SKILL.md
|
|
137
|
+
- skills/specproof-specify/references/usage.md
|
|
138
|
+
- skills/specproof-test-gaps/SKILL.md
|
|
139
|
+
- skills/specproof-test-gaps/references/usage.md
|
|
140
|
+
homepage: https://github.com/lucianghinda/specproof
|
|
141
|
+
licenses:
|
|
142
|
+
- MIT
|
|
143
|
+
metadata:
|
|
144
|
+
rubygems_mfa_required: 'true'
|
|
145
|
+
homepage_uri: https://github.com/lucianghinda/specproof
|
|
146
|
+
source_code_uri: https://github.com/lucianghinda/specproof/tree/main
|
|
147
|
+
changelog_uri: https://github.com/lucianghinda/specproof/blob/main/CHANGELOG.md
|
|
148
|
+
rdoc_options: []
|
|
149
|
+
require_paths:
|
|
150
|
+
- lib
|
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
|
+
requirements:
|
|
153
|
+
- - ">="
|
|
154
|
+
- !ruby/object:Gem::Version
|
|
155
|
+
version: '3.3'
|
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
|
+
requirements:
|
|
158
|
+
- - ">="
|
|
159
|
+
- !ruby/object:Gem::Version
|
|
160
|
+
version: '0'
|
|
161
|
+
requirements: []
|
|
162
|
+
rubygems_version: 4.0.11
|
|
163
|
+
specification_version: 4
|
|
164
|
+
summary: Check input specifications and measure boundary and finite pairwise coverage.
|
|
165
|
+
test_files: []
|