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.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +10 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +283 -0
  5. data/docs/agent-skills.md +60 -0
  6. data/docs/benchmark.md +24 -0
  7. data/docs/constrained-partition-pairs-results.md +44 -0
  8. data/docs/finite-strings-results.md +75 -0
  9. data/docs/implementation-status.md +65 -0
  10. data/docs/input-selection-results.md +123 -0
  11. data/docs/lint-cleanup-plan.md +12 -0
  12. data/docs/method-targets-results.md +68 -0
  13. data/docs/minitest-compatibility.md +33 -0
  14. data/docs/optional-arguments-plan.md +25 -0
  15. data/docs/optional-arguments-results.md +45 -0
  16. data/docs/pairwise-partitions-results.md +53 -0
  17. data/docs/pairwise-results.md +77 -0
  18. data/docs/pairwise-suggestions-results.md +104 -0
  19. data/docs/rbs-implementation-status.md +115 -0
  20. data/docs/rbs-string-literals-results.md +58 -0
  21. data/docs/real-project-pilot.md +84 -0
  22. data/docs/report-format.md +244 -0
  23. data/examples/age_policy/README.md +39 -0
  24. data/examples/age_policy/faulty/lib/age_policy.rb +9 -0
  25. data/examples/age_policy/faulty/test/age_policy_examples_test.rb +17 -0
  26. data/examples/age_policy/faulty/test/age_policy_test.rb +21 -0
  27. data/examples/age_policy/lib/age_policy.rb +8 -0
  28. data/examples/age_policy/run.rb +23 -0
  29. data/examples/age_policy/specification.rb +8 -0
  30. data/examples/age_policy/test/age_policy_test.rb +18 -0
  31. data/examples/constrained_partition_pairs/README.md +40 -0
  32. data/examples/constrained_partition_pairs/lib/account_eligibility.rb +8 -0
  33. data/examples/constrained_partition_pairs/requirements.md +11 -0
  34. data/examples/constrained_partition_pairs/run.rb +22 -0
  35. data/examples/constrained_partition_pairs/specification.rb +17 -0
  36. data/examples/constrained_partition_pairs/test_account_eligibility.rb +34 -0
  37. data/examples/input_selection/README.md +22 -0
  38. data/examples/input_selection/delivery_policy.rb +11 -0
  39. data/examples/input_selection/requirements.md +9 -0
  40. data/examples/input_selection/specification.rb +8 -0
  41. data/examples/input_selection/test_delivery_policy.rb +38 -0
  42. data/examples/method_targets/README.md +30 -0
  43. data/examples/method_targets/lib/delivery_defaults.rb +8 -0
  44. data/examples/method_targets/lib/delivery_options.rb +12 -0
  45. data/examples/method_targets/requirements.md +20 -0
  46. data/examples/method_targets/specification_objects.rb +17 -0
  47. data/examples/method_targets/specification_strings.rb +15 -0
  48. data/examples/pairwise/README.md +46 -0
  49. data/examples/pairwise/constrained_requirements.md +6 -0
  50. data/examples/pairwise/constrained_specification.rb +11 -0
  51. data/examples/pairwise/corrected/lib/delivery_options.rb +11 -0
  52. data/examples/pairwise/corrected/test/delivery_options_test.rb +28 -0
  53. data/examples/pairwise/faulty/lib/delivery_options.rb +11 -0
  54. data/examples/pairwise/faulty/test/gap_delivery_options_test.rb +10 -0
  55. data/examples/pairwise/faulty/test/initial_delivery_options_test.rb +23 -0
  56. data/examples/pairwise/requirements.md +11 -0
  57. data/examples/pairwise/run.rb +36 -0
  58. data/examples/pairwise/specification.rb +9 -0
  59. data/examples/pairwise/three_boolean/lib/boolean_batch.rb +8 -0
  60. data/examples/pairwise/three_boolean/test/boolean_batch_test.rb +28 -0
  61. data/examples/pairwise/three_boolean_specification.rb +10 -0
  62. data/examples/pairwise_partitions/README.md +34 -0
  63. data/examples/pairwise_partitions/lib/age_policy.rb +8 -0
  64. data/examples/pairwise_partitions/requirements.md +8 -0
  65. data/examples/pairwise_partitions/run.rb +22 -0
  66. data/examples/pairwise_partitions/specification.rb +13 -0
  67. data/examples/pairwise_partitions/test_age_policy.rb +29 -0
  68. data/examples/pairwise_suggestions/README.md +48 -0
  69. data/examples/pairwise_suggestions/run.rb +55 -0
  70. data/examples/pairwise_suggestions/three_boolean/lib/suggested_boolean_batch.rb +8 -0
  71. data/examples/pairwise_suggestions/three_boolean/requirements.md +7 -0
  72. data/examples/pairwise_suggestions/three_boolean/specification.rb +11 -0
  73. data/examples/pairwise_suggestions/three_boolean/test/baseline_test.rb +9 -0
  74. data/examples/pairwise_suggestions/three_boolean/test/complete_test.rb +22 -0
  75. data/examples/partition_gap.rb +8 -0
  76. data/examples/rbs_registration/README.md +58 -0
  77. data/examples/rbs_registration/implementations/age_gt/registration.rb +8 -0
  78. data/examples/rbs_registration/implementations/age_gte/registration.rb +8 -0
  79. data/examples/rbs_registration/requirements.md +9 -0
  80. data/examples/rbs_registration/sig/registration.rbs +3 -0
  81. data/examples/rbs_registration/specification.rb +10 -0
  82. data/examples/rbs_registration/test_registration.rb +43 -0
  83. data/examples/rbs_string_literals/README.md +34 -0
  84. data/examples/rbs_string_literals/lib/delivery_options.rb +9 -0
  85. data/examples/rbs_string_literals/requirements.md +11 -0
  86. data/examples/rbs_string_literals/sig/delivery_options.rbs +3 -0
  87. data/examples/rbs_string_literals/specification.rb +7 -0
  88. data/examples/rbs_string_literals/test_delivery_options.rb +46 -0
  89. data/examples/shipping.rb +12 -0
  90. data/exe/specproof +7 -0
  91. data/lib/specproof/checker.rb +144 -0
  92. data/lib/specproof/cli.rb +292 -0
  93. data/lib/specproof/collector.rb +304 -0
  94. data/lib/specproof/combinations.rb +226 -0
  95. data/lib/specproof/composer.rb +97 -0
  96. data/lib/specproof/coverage.rb +229 -0
  97. data/lib/specproof/coverage_report.rb +334 -0
  98. data/lib/specproof/domains.rb +124 -0
  99. data/lib/specproof/loader.rb +285 -0
  100. data/lib/specproof/minitest.rb +443 -0
  101. data/lib/specproof/model.rb +198 -0
  102. data/lib/specproof/partition_space.rb +268 -0
  103. data/lib/specproof/planner.rb +125 -0
  104. data/lib/specproof/report.rb +248 -0
  105. data/lib/specproof/skills.rb +188 -0
  106. data/lib/specproof/sources/rbs.rb +137 -0
  107. data/lib/specproof/sources/rbs_projector.rb +268 -0
  108. data/lib/specproof/suggestion_report.rb +159 -0
  109. data/lib/specproof/suggestions.rb +352 -0
  110. data/lib/specproof/target_name.rb +100 -0
  111. data/lib/specproof/type_constraints.rb +76 -0
  112. data/lib/specproof/version.rb +7 -0
  113. data/lib/specproof.rb +100 -0
  114. data/sig/specproof.rbs +222 -0
  115. data/skills/specproof-specify/SKILL.md +282 -0
  116. data/skills/specproof-specify/references/usage.md +265 -0
  117. data/skills/specproof-test-gaps/SKILL.md +214 -0
  118. data/skills/specproof-test-gaps/references/usage.md +231 -0
  119. 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: []