equiframe 0.12.4__py3-none-any.whl

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 (170) hide show
  1. equiframe/__init__.py +832 -0
  2. equiframe/__main__.py +3 -0
  3. equiframe/_base.py +84 -0
  4. equiframe/_cli_support.py +125 -0
  5. equiframe/_comparison_io.py +161 -0
  6. equiframe/_dataset_provenance.py +146 -0
  7. equiframe/_decimal.py +22 -0
  8. equiframe/_diff_capture.py +433 -0
  9. equiframe/_doctor.py +123 -0
  10. equiframe/_document_io.py +61 -0
  11. equiframe/_documents.py +79 -0
  12. equiframe/_duckdb_transport.py +149 -0
  13. equiframe/_error_reporting.py +52 -0
  14. equiframe/_first_use.py +102 -0
  15. equiframe/_path_compat.py +26 -0
  16. equiframe/_physical.py +133 -0
  17. equiframe/_r_review.R +308 -0
  18. equiframe/_regular_io.py +167 -0
  19. equiframe/_report_format_v1.py +298 -0
  20. equiframe/_report_io.py +591 -0
  21. equiframe/_stability_inventory.py +1421 -0
  22. equiframe/_timezones.py +257 -0
  23. equiframe/_vendor/cyclonedx/LICENSE +201 -0
  24. equiframe/_vendor/cyclonedx/PROVENANCE.md +18 -0
  25. equiframe/_vendor/cyclonedx/bom-1.6.schema.json +5673 -0
  26. equiframe/_vendor/cyclonedx/jsf-0.82.schema.json +240 -0
  27. equiframe/_vendor/cyclonedx/spdx.schema.json +712 -0
  28. equiframe/adapters.py +454 -0
  29. equiframe/assertion_types.py +122 -0
  30. equiframe/assertions.py +271 -0
  31. equiframe/benchmark.py +101 -0
  32. equiframe/bundle.py +240 -0
  33. equiframe/cli.py +693 -0
  34. equiframe/comparison.py +937 -0
  35. equiframe/comparison_report.py +660 -0
  36. equiframe/comparison_types.py +257 -0
  37. equiframe/compatibility.py +546 -0
  38. equiframe/contracts.py +879 -0
  39. equiframe/datasets.py +1301 -0
  40. equiframe/decision.py +34 -0
  41. equiframe/destinations.py +295 -0
  42. equiframe/detector_types.py +431 -0
  43. equiframe/detectors.py +389 -0
  44. equiframe/diff.py +192 -0
  45. equiframe/diff_contracts.py +523 -0
  46. equiframe/docs/adoption.md +329 -0
  47. equiframe/docs/api.md +534 -0
  48. equiframe/docs/arquitecto.md +143 -0
  49. equiframe/docs/choosing-api.md +84 -0
  50. equiframe/docs/cientifico.md +180 -0
  51. equiframe/docs/compatibility.md +254 -0
  52. equiframe/docs/contributing.md +171 -0
  53. equiframe/docs/dependencies.md +237 -0
  54. equiframe/docs/eda.md +166 -0
  55. equiframe/docs/extending.md +158 -0
  56. equiframe/docs/fast-ci.md +52 -0
  57. equiframe/docs/first-use.md +78 -0
  58. equiframe/docs/index.md +142 -0
  59. equiframe/docs/ingestion.md +145 -0
  60. equiframe/docs/inicio.md +129 -0
  61. equiframe/docs/installed-private.md +97 -0
  62. equiframe/docs/journeys.md +362 -0
  63. equiframe/docs/lectura-conversion.md +211 -0
  64. equiframe/docs/licensing.md +17 -0
  65. equiframe/docs/maintenance.md +233 -0
  66. equiframe/docs/migration-ir.md +333 -0
  67. equiframe/docs/option-audit.md +45 -0
  68. equiframe/docs/outcome-gates.md +134 -0
  69. equiframe/docs/performance.md +263 -0
  70. equiframe/docs/piloto-simulado.md +56 -0
  71. equiframe/docs/quickstart.md +156 -0
  72. equiframe/docs/r_review.md +212 -0
  73. equiframe/docs/recipes.md +248 -0
  74. equiframe/docs/releasing.md +183 -0
  75. equiframe/docs/security.md +218 -0
  76. equiframe/docs/semantics.md +274 -0
  77. equiframe/docs/sqlite-snapshots.md +262 -0
  78. equiframe/docs/universal-sources.md +49 -0
  79. equiframe/docs/universalidad-cinco-pasos.md +107 -0
  80. equiframe/docs/upgrading.md +538 -0
  81. equiframe/duckdb_capture.py +410 -0
  82. equiframe/eda/__init__.py +36 -0
  83. equiframe/eda/__main__.py +3 -0
  84. equiframe/eda/_backend.py +612 -0
  85. equiframe/eda/_inventory.py +49 -0
  86. equiframe/eda/_paths.py +49 -0
  87. equiframe/eda/_report.py +291 -0
  88. equiframe/eda/api.py +535 -0
  89. equiframe/eda/cli.py +102 -0
  90. equiframe/eda/models.py +239 -0
  91. equiframe/errors.py +83 -0
  92. equiframe/evidence.py +375 -0
  93. equiframe/examples/integrations/eda_generic.py +60 -0
  94. equiframe/examples/integrations/outcome_gates.py +94 -0
  95. equiframe/examples/integrations/sqlite_snapshot.py +246 -0
  96. equiframe/examples/integrations/sqlite_snapshot_demo.py +226 -0
  97. equiframe/examples/integrations/universal_first_use.py +296 -0
  98. equiframe/examples/journeys/README.md +31 -0
  99. equiframe/examples/journeys/__init__.py +1 -0
  100. equiframe/examples/journeys/a_pandas_refactor.py +88 -0
  101. equiframe/examples/journeys/b_native_migration.py +181 -0
  102. equiframe/examples/journeys/c_retail_etl.py +460 -0
  103. equiframe/examples/journeys/common.py +136 -0
  104. equiframe/examples/journeys/d_financial_reconciliation.py +96 -0
  105. equiframe/examples/journeys/e_telemetry.py +135 -0
  106. equiframe/examples/journeys/f_data_science_preparation.py +84 -0
  107. equiframe/examples/journeys/g_external_snapshots.py +197 -0
  108. equiframe/examples/journeys/h_portable_ci.py +129 -0
  109. equiframe/examples/journeys/requirements.lock +249 -0
  110. equiframe/examples/journeys/verify_journeys.py +117 -0
  111. equiframe/examples/load_convert_compare.py +85 -0
  112. equiframe/execution.py +355 -0
  113. equiframe/execution_types.py +177 -0
  114. equiframe/ingestion.py +744 -0
  115. equiframe/local.py +126 -0
  116. equiframe/migration/__init__.py +94 -0
  117. equiframe/migration/_physical.py +8 -0
  118. equiframe/migration/backends/_timestamp_transport.py +109 -0
  119. equiframe/migration/backends/duckdb.py +651 -0
  120. equiframe/migration/backends/duckdb_decimal.py +125 -0
  121. equiframe/migration/backends/duckdb_time.py +87 -0
  122. equiframe/migration/backends/pandas.py +544 -0
  123. equiframe/migration/backends/polars.py +915 -0
  124. equiframe/migration/backends/polars_decimal.py +231 -0
  125. equiframe/migration/io.py +198 -0
  126. equiframe/migration/ports.py +96 -0
  127. equiframe/migration/runner.py +545 -0
  128. equiframe/migration/runner_types.py +405 -0
  129. equiframe/migration/types.py +354 -0
  130. equiframe/migration/validation.py +619 -0
  131. equiframe/normalization.py +358 -0
  132. equiframe/pipeline.py +274 -0
  133. equiframe/pipeline_types.py +247 -0
  134. equiframe/ports.py +39 -0
  135. equiframe/preprocessing.py +110 -0
  136. equiframe/profile_types.py +343 -0
  137. equiframe/profiles.py +447 -0
  138. equiframe/py.typed +0 -0
  139. equiframe/r_review.py +706 -0
  140. equiframe/reduction.py +518 -0
  141. equiframe/registry.py +121 -0
  142. equiframe/report_rendering.py +366 -0
  143. equiframe/report_types.py +294 -0
  144. equiframe/reporting.py +26 -0
  145. equiframe/rule_types.py +178 -0
  146. equiframe/rules.py +819 -0
  147. equiframe/schemas/r-execution-binding-1.0.schema.json +46 -0
  148. equiframe/schemas/r-review-binding-1.0.schema.json +28 -0
  149. equiframe/schemas/r-review-options-1.0.schema.json +38 -0
  150. equiframe/schemas/r-review-result-1.0.schema.json +207 -0
  151. equiframe/schemas/reviewed-decision-1.0.schema.json +3394 -0
  152. equiframe/serialization.py +152 -0
  153. equiframe/snapshot.py +296 -0
  154. equiframe/sources.py +283 -0
  155. equiframe/tables.py +459 -0
  156. equiframe/types.py +71 -0
  157. equiframe/values.py +252 -0
  158. equiframe/verification_request.py +35 -0
  159. equiframe/verify.py +799 -0
  160. equiframe/verify_types.py +255 -0
  161. equiframe/workflow.py +510 -0
  162. equiframe/workflow_request.py +38 -0
  163. equiframe-0.12.4.dist-info/METADATA +268 -0
  164. equiframe-0.12.4.dist-info/RECORD +170 -0
  165. equiframe-0.12.4.dist-info/WHEEL +4 -0
  166. equiframe-0.12.4.dist-info/entry_points.txt +3 -0
  167. equiframe-0.12.4.dist-info/licenses/LICENSE +21 -0
  168. equiframe-0.12.4.dist-info/licenses/THIRD_PARTY_NOTICES.md +42 -0
  169. equiframe-0.12.4.dist-info/licenses/tools/cyclonedx/LICENSE +201 -0
  170. equiframe-0.12.4.dist-info/licenses/tools/cyclonedx/PROVENANCE.md +18 -0
@@ -0,0 +1,329 @@
1
+ # Adoption: real projects and repeat use
2
+
3
+ [Handbook](index.md) · [Installed recipes](recipes.md) ·
4
+ [Maintenance and incidents](maintenance.md) · [Upgrading](upgrading.md)
5
+
6
+ ## Current status and the acceptance boundary
7
+
8
+ As of **2026-10-06**, no independent human pilot, participant consent or retained
9
+ real-project integration is recorded. The three STEP1 pilot definitions and the
10
+ first-use kit provide a starting protocol and synthetic technical exercises.
11
+ They are not three external projects. Automated recipe execution, independent
12
+ artifact review and a repeated technical replay cannot establish human adoption
13
+ or the five-minute first-diagnosis target. Both remain **pending**.
14
+
15
+ STEP10 adoption needs **at least three independent real projects**, collectively
16
+ covering Python refactoring, SQL/DuckDB and CI regression checking. Each project
17
+ needs an independently observed initial use and retained integration through a
18
+ later real change. The consumers must be independent of the implementation they
19
+ are assessing. Review shared authorship, people, data and project ownership when
20
+ assessing independence; splitting one project into jobs or repeating one fixture
21
+ does not create independent projects. Consent, independence and outcomes require
22
+ human review, not a positive field in a JSON record.
23
+
24
+ The historical adoption requirements above remain unaccredited; a stable API or
25
+ registry publication does not count as human adoption or scientific acceptance.
26
+ The owner has separately authorized manual 0.12.2 TestPyPI/PyPI preparation and
27
+ publication subject to its technical/security/ownership gates. Project-owned
28
+ code is MIT and the maintainer role is assigned. Check [release status](releasing.md)
29
+ for completed publication facts and [security](security.md) for safe reporting.
30
+
31
+ The earlier Linux x86_64 and Python-3.12-only kit results retain their historical
32
+ scope. Current measured Windows/Linux ARM64 Python 3.10–3.13 implementation runs
33
+ are described in [compatibility](compatibility.md); interpreter-specific kits
34
+ need their own matching pins and artifact checks. Neither table establishes
35
+ human adoption, and old receipts do not validate changed wheel bytes.
36
+
37
+ ## U12 acceptance for the 2026-10-07 usability plan
38
+
39
+ The three eligible first-use observations must each reach a correct first diagnosis
40
+ within **300 seconds**, without essential instructions outside the supplied guide.
41
+ This threshold is an explicit acceptance condition of that plan, not a measured
42
+ product property. At least one participant must perform data-architecture tasks
43
+ and one data-science tasks. Consent and independence require human review.
44
+
45
+ Freeze timing before observation: Python preparation and obtaining the kit are
46
+ recorded separately; start at the beginning of installation and stop only at the
47
+ first correct diagnosis. Include dependency downloads, retries, failed attempts
48
+ and help. Never move the starting clock after seeing a result. Keep an unfavorable
49
+ first-use observation; an already-practiced participant cannot produce a new
50
+ first-use observation. Revalidation needs new independent participants. Retained
51
+ integration after a later real project change is a separate necessary condition.
52
+
53
+ [Three fictional role profiles](piloto-simulado.md) may rehearse instructions.
54
+ They have no consent, human measurements, real projects or adoption credit.
55
+ The schema checker only checks record consistency; it cannot close U12.
56
+
57
+ ## Before an observation
58
+
59
+ This is a protocol for an authorized pilot; it does not recruit participants,
60
+ contact consumers, grant repository access or authorize sharing their data.
61
+
62
+ 1. Agree the real decision: which refactor, query or pipeline change must preserve
63
+ which meaning, and who reviews the expected result. Select the smallest useful
64
+ supported contract before seeing the candidate result
65
+ 2. Obtain explicit consent for the observation and agreed use of its record.
66
+ State the purpose, fields collected, permitted readers, retention/review date,
67
+ contact for withdrawal and whether a sanitized issue may be shared. Permission
68
+ to observe is not permission to publish data, identify a company or send a report
69
+ 3. Use a random project/participant alias. Keep the consent and identity mapping
70
+ locally, outside Git and apart from technical evidence. A hash of a consent
71
+ reference binds bytes; it neither anonymizes a person nor proves consent
72
+ 4. Obtain an identified artifact and trusted hash through the reviewed registry
73
+ or offline channel. If a kit is provided, verify it and install outside the
74
+ checkout as [recipes](recipes.md) describes. Verify registry ownership rather
75
+ than installing an unrelated package solely by name
76
+ 5. Agree what success and safe refusal look like, including complete differences,
77
+ invalid expected data and incomplete evaluation. Keep raw data local. Identify
78
+ a permitted minimal reproduction and an appropriate evidence retention location
79
+ 6. Record unavailable prerequisites honestly. If consent, data rights, safe handling
80
+ or the required capability is missing, stop that observation and leave it pending
81
+
82
+ Use the kit's separate `OBSERVATION.md` for first-use timing and interpretation.
83
+ Keep the immutable kit unchanged. Record preparing Python and obtaining the kit
84
+ separately, then time installation through the first correct diagnosis without
85
+ discarding download time, unsuccessful attempts or help. Automated command duration
86
+ must not be reported as human diagnosis time.
87
+
88
+ ## The three real-project paths
89
+
90
+ | Context | Initial real use | Later change required for repeat-use evidence |
91
+ |---|---|---|
92
+ | Python refactor | Compare the project's original and revised captured outputs under a reviewed contract; validate expected behavior independently | A subsequent real code or data revision still uses the integration and preserves the required gate and evidence |
93
+ | SQL/DuckDB | Use trusted explicit capture or supported native migration; preserve Decimal, NULL, keys, duplicates and the expected-output distinction | A later real query, plan or input revision is checked without silently broadening the supported subset or weakening its contract |
94
+ | CI regression | Integrate the explicit assertion into the project's real test workflow, retain a minimized verified report before failure and keep nonzero status | A later real change still runs the check; the consumer can locate evidence, explain the decision and update safely |
95
+
96
+ The installed recipes teach these paths with synthetic data. Replace their
97
+ fixture selectors with the real project's authorized candidate/reference pair;
98
+ do not present the tutorial's deliberate regression as a discovered production
99
+ defect. Local CI-style execution is not proof that a remote CI job ran. Keep the
100
+ exact authorized run reference if a real CI run is part of the observation.
101
+
102
+ For every path, ask the consumer to explain:
103
+
104
+ - Why `equivalent` is limited to captured data and the evaluated contract
105
+ - Why two native engines can share a bug, and where the independent expectation
106
+ came from; pandas is not an oracle
107
+ - Why `different` fails the gate, and why `not_evaluable` is a safe abstention
108
+ rather than success, even when `complete=True`
109
+ - Where keys/positions, types, policies and retained evidence explain the result
110
+ - How to report a problem and test an [upgrade or safe rollback](upgrading.md)
111
+
112
+ Preserve answers and assistance as observations, including misunderstandings.
113
+ Do not supply an answer and record it as an unaided explanation. A correct safe
114
+ refusal can be a useful pilot outcome; it is not accepted equivalence and cannot
115
+ by itself demonstrate a completed integration.
116
+
117
+ ## Minimal local observation record
118
+
119
+ Collect only information needed to reproduce or interpret the observation:
120
+
121
+ - Pseudonymous project ID, context, participant role and independence explanation
122
+ - Consent status and a local reference to the separately retained permission;
123
+ record withdrawal and exclude withdrawn observations from adoption claims
124
+ - Date/time with timezone, exact commit and wheel/kit/dependency-lock hashes,
125
+ Python/OS/architecture, installed engine versions and selected extras
126
+ - The project's real revision/change, contract revision/hash, expected-output
127
+ provenance and any separately reviewed requirement change
128
+ - Installation, integration and diagnosis effort; actual help, failed attempts,
129
+ commands and sanitized errors. Unknown measurements remain unknown, not zero
130
+ - Expected versus observed state, completeness and gate decision; evidence hash,
131
+ missing evidence and what the consumer found useful or could not interpret
132
+ - A later observation's changed project revision, retained integration, outcome,
133
+ report/update knowledge, unresolved issues and consumer reconfirmation
134
+ - Maintainer effort for triage, reproduction, correction, documentation and
135
+ consumer follow-through, with the relevant issue/correction reference
136
+
137
+ The structured local record supplements the human observation; it is not a
138
+ telemetry service, a public API, a signed attestation or a scientific dataset.
139
+ Keep free text short and sanitized. Never collect credentials, environment dumps,
140
+ full SQL containing secrets, real rows, raw evidence paths, personal identifiers
141
+ or contact details simply because they might help later. Keep any indispensable
142
+ private reproduction under separately approved access rather than in this record.
143
+ Use opaque local references instead of private URLs with embedded tokens.
144
+
145
+ Before sharing, review metadata as well as values. Redacted reports do not remove
146
+ the original snapshots, spill files, exception causes or private evidence.
147
+ Hashing low-entropy values is not anonymization. Agree retention for the local
148
+ record, identity mapping and raw evidence separately; do not promise secure erasure.
149
+ Withdrawal stops further use outside the remaining permission and requires review
150
+ of retained/shared copies, not silent deletion of the historical outcome.
151
+
152
+ ## Check the structured record locally
153
+
154
+ The verified source distribution carries the developer-only
155
+ `tools/check_adoption.py` and the intentionally empty
156
+ `examples/adoption/empty-registry.json`. The wheel carries this handbook, not a
157
+ new `equiframe` adoption command or runtime API. The existing first-use kit keeps
158
+ its closed inventory unchanged. To use the checker without a checkout, obtain the
159
+ matching verified sdist through the authorized channel and copy the checker to
160
+ a separate working directory if needed. Use an environment with the candidate's
161
+ reviewed Pydantic dependency; the checker does not install anything.
162
+
163
+ From the unpacked sdist's package directory:
164
+
165
+ ```bash
166
+ python tools/check_adoption.py --schema
167
+ python tools/check_adoption.py examples/adoption/empty-registry.json
168
+ python tools/check_adoption.py /absolute/path/private-pilot-records.json
169
+ ```
170
+
171
+ `--schema` prints the complete tool-only schema; use it for exact required fields
172
+ and limits. The empty registry contains only `schema="equiframe-adoption-1"`
173
+ and `pilots=[]`. It intentionally reports zero human observations and unknown
174
+ aggregate effort (`null`). Create completed records outside the kit, sdist and
175
+ Git; do not replace the empty example with invented people or results.
176
+
177
+ The principal field groups are:
178
+
179
+ | Group | Supplied observations |
180
+ |---|---|
181
+ | Pilot | `id`, pseudonymous `project_id`, `context` (`refactor_python`, `sql_duckdb`, `ci_regression`), `kind` (`human_pilot`, `synthetic_replay`), `independent`, `consent`, `consent_sha256`, `attempts` |
182
+ | Attempt identity | `id`, `phase`, timezone-aware `occurred_at`, real revision/change identity `change_sha256`, `package_version`, `wheel_sha256`, `dependency_lock_sha256`, `contract_sha256`, `contract_review_sha256` |
183
+ | Environment and effort | `python`, `os`, `architecture`, `engines`, `installation_seconds`, `integration_seconds`, `diagnosis_seconds`, `help_received` |
184
+ | Outcome and retained use | `expected` and `observed`, each with `state`, `complete`, `accepted`; `usefulness`, `integration_retained`, `knows_reporting`, `knows_upgrading`, `evidence_sha256`, `issues` |
185
+ | Issue observation | `id`, `category`, proposed `priority`, `false_equivalent`, reproduction/expected/observed hashes, `data_permission`, `status`, separate regression/consumer-confirmation hashes, `support_seconds` |
186
+
187
+ Use `null` where an optional observation is unknown. For an installation attempt
188
+ that reached no comparison, both `expected` and `observed` are `null`; do not
189
+ invent a semantic result. `accepted=True` requires complete equivalence, but a
190
+ complete equivalent result may still fail additional evidence requirements.
191
+ The actual assertion/report remains the source for those observations.
192
+
193
+ Human attempts require recorded consent with a separately retained receipt hash.
194
+ Synthetic records must use `synthetic_replay`, `independent=False` and
195
+ `consent="synthetic_only"`, without a human consent hash or consumer-confirmed
196
+ fix. They never enter the human counters. The schema has no withdrawal state:
197
+ record withdrawals in the separate permission ledger and exclude withdrawn
198
+ observations from active summaries under the agreed retention terms. Do not
199
+ rename a withdrawn human attempt synthetic or silently claim renewed consent.
200
+
201
+ Keep one chronological pilot history per project/context; append attempts rather
202
+ than creating another pilot ID that could hide an earlier failure.
203
+ The first attempt is `initial`; later attempts are `follow_up` in strictly
204
+ increasing time order. Changed established contracts require a distinct
205
+ `contract_review_sha256`. Retained-use counters inspect the **latest** follow-up,
206
+ require a changed `change_sha256` relative to the earliest useful completed
207
+ integration observation and check
208
+ the supplied usefulness, retained-integration and reporting/upgrading answers.
209
+ That integration baseline must contain a useful completed equivalent or different
210
+ comparison matching the independent expectation; preceding installation failures
211
+ stay in the history and effort counters. First successful installation/integration
212
+ is not itself retained use: a later changed observation is required. Safe
213
+ abstention alone cannot establish a completed integration. A
214
+ later useful safe abstention can show that an already established check remains
215
+ in use. Any P0/false-equivalence issue reported anywhere in the history blocks
216
+ the retained-use count until a later observation explicitly records that same
217
+ issue as consumer-confirmed. Omitting an issue or downgrading its priority does
218
+ not clear it.
219
+ They compare expected with observed fields instead of treating every recorded
220
+ outcome as success. The hashes do not establish that a real project changed or
221
+ that review occurred; retain the permitted supporting evidence separately.
222
+
223
+ Exit **0** means record consistency passed, including an honest empty registry;
224
+ exit **2** means invalid/unreadable input or invalid command use. Neither is a
225
+ human adoption decision. The tool reads one bounded regular JSON record, does
226
+ not follow the evidence references, execute a reproducer, contact anyone or
227
+ upload observations. It cannot authenticate consent, identity, independence,
228
+ semantic truth or the referenced bytes. Summary counters are **attestations**;
229
+ `human_adoption_verified` always remains `false`, and independent manual review
230
+ stays pending even if the proposed diversity target is recorded. No supplied
231
+ record can open the public release gate or establish a five-minute human claim.
232
+
233
+ ## Synthetic repeat-use rehearsal
234
+
235
+ The sdist's `examples/adoption_replay.py` is a standalone technical check of the
236
+ three consumer contexts. Copy it outside the checkout and run with the exact
237
+ installed wheel and reviewed pandas, DuckDB and Arrow dependencies:
238
+
239
+ ```bash
240
+ python -I adoption_replay.py --output /absolute/path/new-replay --wheel-sha256 VERIFIED_WHEEL_SHA256
241
+ ```
242
+
243
+ Replace the hash placeholder with the separately verified lowercase SHA-256.
244
+ The script records that supplied hash but does not authenticate it or establish
245
+ which wheel was installed; independently check installed payload bytes and
246
+ import origins. The 24 observations are three contexts, two genuinely changed
247
+ synthetic input fixtures and four cases: equivalent, different, invalid expected
248
+ and resource-limited. Exact contracts remain unchanged, expectations are literal
249
+ fixtures, and failed assertions are preserved. SQL capture is compared after its
250
+ in-memory source has changed and the connection is closed.
251
+
252
+ Exit 0 means the expected technical outcomes were observed, including rejection
253
+ of deliberately wrong or unavailable comparisons; it does not accept those
254
+ outputs as equivalent. Exit 2 means setup, receipt or replay checks failed.
255
+ Keep the receipt and reviewed redacted report directories. Temporary raw
256
+ captures are removed; report integrity is not full raw-data reproduction.
257
+ Provenance includes local import paths, so review it before sharing. The replay
258
+ never fills a human registry, measures human effort, verifies reporting/upgrading
259
+ knowledge or claims a production CI job. It cannot close genuine repeat-use
260
+ acceptance or the five-minute first-use criterion.
261
+
262
+ ## Classify friction without hiding safe outcomes
263
+
264
+ | Category | Useful minimal observation |
265
+ |---|---|
266
+ | Installation | Exact artifact/pins, interpreter/platform, import location and sanitized failing command |
267
+ | Comprehension | Task attempted, guide/version, the consumer's interpretation and assistance needed |
268
+ | Semantics | Small typed fixture, contract/policy, independent expected versus observed state/completeness and gate |
269
+ | Integration | Call site or CI step, selected API/adapter, environment boundary, evidence-before-failure and actual exit |
270
+ | Performance | Workload shape, exact environment/configuration, measured elapsed/resource scope, budget and final/partial status |
271
+ | Evidence | Missing or unreadable artifact, expected inventory/format, hashes, reader and observed verification outcome |
272
+
273
+ A problem can involve more than one category; select one primary category for
274
+ each structured issue observation and keep secondary context in its separate
275
+ triage evidence. Do not duplicate one observation to inflate category totals.
276
+ Separate a documented unsupported capability, a correct abstention and a defect.
277
+ Do not cast, round, deduplicate,
278
+ drop metadata, accept partial counts or relax tolerance to improve a success rate.
279
+ Installation failure is not a semantic pass. Zero displayed differences or a
280
+ successful integrity check is not an equivalence decision.
281
+
282
+ Convert a reproducible problem into an authorized, sanitized issue using the
283
+ [maintenance procedure](maintenance.md#report-a-problem). Preserve the original
284
+ attempt and connect the correction to a new exact artifact. Maintainer tests
285
+ are technical verification; only the affected consumer can reconfirm their own
286
+ integration. Keep that confirmation pending until it actually happens.
287
+
288
+ ## Repeat use and useful indicators
289
+
290
+ A later timestamp alone is insufficient. Observe a subsequent real project
291
+ revision or workload change after initial integration, and establish that the
292
+ consumer retained the check and its evidence. Replaying the same fixture, a
293
+ second installation or a changed run ID is only technical repeatability.
294
+
295
+ If a genuine requirement changed, retain the old contract, failed result and
296
+ reference. Record the rationale and responsible review; create a new contract
297
+ revision and independently reviewed expected output. Keep that event distinct
298
+ from unchanged-contract regression checking. A copied candidate baseline or
299
+ silent policy relaxation invalidates an adoption success claim.
300
+
301
+ Report small-sample observations directly, with denominators and exclusions:
302
+
303
+ - Consented, independently reviewed real projects started and completed by context
304
+ - Projects observed after a later real change, and those retaining a working
305
+ integration; show projects awaiting follow-through or withdrawing separately
306
+ - Consumer-confirmed useful differences, with the decision they helped make;
307
+ tutorial mutations and merely emitted diagnostics are not confirmed benefits
308
+ - Safe abstentions, failed/abandoned attempts and unresolved blockers by category
309
+ - Observed installation/integration/diagnosis effort and help; show the individual
310
+ observations rather than a universal five-minute claim
311
+ - Reproductions, verified corrections, consumer-reconfirmed fixes and unresolved
312
+ incidents; a maintainer-only fix is not a consumer-confirmed resolution
313
+ - Actual maintenance effort and recurring burdens, with unknown effort explicit
314
+
315
+ At present the real-project count is **0** and the required minimum remains
316
+ **3**; repeat-use and consumer-confirmed-correction evidence are absent.
317
+ Rates with no eligible observations are **not available**, not 0% success or
318
+ failure. Downloads, stars, synthetic fixtures and repeated automated test runs
319
+ may describe activity but do not prove professional adoption.
320
+
321
+ ## Review before declaring adoption
322
+
323
+ A responsible human reviews consent scope, project independence, original
324
+ evidence, interpretation, the real later change, retained integration, reporting
325
+ and upgrade knowledge, unresolved risks and sustainable maintenance ownership.
326
+ All three contexts need independent real projects. False-equivalence incidents
327
+ need the containment and correction process in [maintenance](maintenance.md),
328
+ not an optimistic aggregate metric. Technical validation never signs off these
329
+ human facts or opens the [public release gate](releasing.md).