hypgraph 0.7.23__tar.gz → 0.7.25__tar.gz

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 (124) hide show
  1. {hypgraph-0.7.23 → hypgraph-0.7.25}/CHANGELOG.md +60 -0
  2. {hypgraph-0.7.23 → hypgraph-0.7.25}/PKG-INFO +1 -1
  3. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/PLAN.md +1 -1
  4. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/RELEASE-READINESS.md +35 -0
  5. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/__init__.py +1 -1
  6. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/checks.py +357 -121
  7. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/language.py +6 -3
  8. hypgraph-0.7.25/tests/test_counts_that_bear.py +160 -0
  9. hypgraph-0.7.25/tests/test_quantifiers_and_identity.py +207 -0
  10. {hypgraph-0.7.23 → hypgraph-0.7.25}/.gitignore +0 -0
  11. {hypgraph-0.7.23 → hypgraph-0.7.25}/AGENTS.md +0 -0
  12. {hypgraph-0.7.23 → hypgraph-0.7.25}/CITATION.cff +0 -0
  13. {hypgraph-0.7.23 → hypgraph-0.7.25}/DISCLAIMER.md +0 -0
  14. {hypgraph-0.7.23 → hypgraph-0.7.25}/LICENSE +0 -0
  15. {hypgraph-0.7.23 → hypgraph-0.7.25}/NOTICE +0 -0
  16. {hypgraph-0.7.23 → hypgraph-0.7.25}/README.md +0 -0
  17. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/decisions/ADR-001-token-bound-authors.md +0 -0
  18. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/decisions/ADR-002-governance-profiles.md +0 -0
  19. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/profile-workflows-plan.md +0 -0
  20. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/review-2026-10-24.md +0 -0
  21. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/site-plan.md +0 -0
  22. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/spec.md +0 -0
  23. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/ui-plan.md +0 -0
  24. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/verification.md +0 -0
  25. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/workflows/README.md +0 -0
  26. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/workflows/knowledge.md +0 -0
  27. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/workflows/optimization.md +0 -0
  28. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/workflows/scientific.md +0 -0
  29. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/workflows/software.md +0 -0
  30. {hypgraph-0.7.23 → hypgraph-0.7.25}/docs/workflows/trading.md +0 -0
  31. {hypgraph-0.7.23 → hypgraph-0.7.25}/examples/frameworks/README.md +0 -0
  32. {hypgraph-0.7.23 → hypgraph-0.7.25}/pyproject.toml +0 -0
  33. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/__main__.py +0 -0
  34. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/blind.py +0 -0
  35. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/bundle.py +0 -0
  36. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/cli.py +0 -0
  37. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/coord.py +0 -0
  38. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/demos/__init__.py +0 -0
  39. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/demos/broad_street.py +0 -0
  40. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/demos/linked.py +0 -0
  41. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/derive.py +0 -0
  42. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/graph.py +0 -0
  43. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/mcp.py +0 -0
  44. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/plan.py +0 -0
  45. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/policy.py +0 -0
  46. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/profiles.py +0 -0
  47. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/references.py +0 -0
  48. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/refusals.py +0 -0
  49. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/report_check.py +0 -0
  50. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/schema.py +0 -0
  51. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/server.py +0 -0
  52. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/skill/SKILL.md +0 -0
  53. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/stats.py +0 -0
  54. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/store.py +0 -0
  55. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/__init__.py +0 -0
  56. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/atlas.css +0 -0
  57. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/atlas.js +0 -0
  58. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/hypgraph.css +0 -0
  59. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/hypgraph.i18n.js +0 -0
  60. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/hypgraph.js +0 -0
  61. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/hypgraph.svg +0 -0
  62. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/index.html +0 -0
  63. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/vendor/LICENSES.md +0 -0
  64. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/vendor/cose-base.js +0 -0
  65. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/vendor/cytoscape-fcose.js +0 -0
  66. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/vendor/cytoscape.min.js +0 -0
  67. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/ui/vendor/layout-base.js +0 -0
  68. {hypgraph-0.7.23 → hypgraph-0.7.25}/src/hypgraph/workflow.py +0 -0
  69. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_accept_work_kind.py +0 -0
  70. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_anchoring.py +0 -0
  71. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_blind.py +0 -0
  72. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_blind_oracles.py +0 -0
  73. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_bound_support.py +0 -0
  74. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_bundle_telemetry.py +0 -0
  75. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_cancel_releases_lease.py +0 -0
  76. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_cited_and_failed_support.py +0 -0
  77. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_contradictions.py +0 -0
  78. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_coord.py +0 -0
  79. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_d10.py +0 -0
  80. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_direction_and_units.py +0 -0
  81. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_engine.py +0 -0
  82. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_engine_fixes.py +0 -0
  83. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_framework_examples.py +0 -0
  84. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_i18n.py +0 -0
  85. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_incremental.py +0 -0
  86. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_link_translate.py +0 -0
  87. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_linked_records.py +0 -0
  88. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_log_and_check.py +0 -0
  89. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_measure_questions.py +0 -0
  90. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_opposed_answers.py +0 -0
  91. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_option_lead.py +0 -0
  92. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_order_detail.py +0 -0
  93. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_profiles.py +0 -0
  94. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_profiles_041.py +0 -0
  95. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_questions_not_assertions.py +0 -0
  96. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_references.py +0 -0
  97. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_refusal_friction.py +0 -0
  98. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_refusal_results.py +0 -0
  99. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_refusals.py +0 -0
  100. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_relation_words.py +0 -0
  101. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_report_answers.py +0 -0
  102. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_rerunnable.py +0 -0
  103. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_restates_scale.py +0 -0
  104. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_server_auth.py +0 -0
  105. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_server_hosts.py +0 -0
  106. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_shape_refusals.py +0 -0
  107. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_stats_not_backtests.py +0 -0
  108. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_stats_values.py +0 -0
  109. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_surfaces.py +0 -0
  110. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_telemetry_stream.py +0 -0
  111. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_trust_boundary.py +0 -0
  112. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_ui_app.py +0 -0
  113. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_ui_engine.py +0 -0
  114. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_uncorrected_effect.py +0 -0
  115. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_unnamed_inputs.py +0 -0
  116. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_verify_complete.py +0 -0
  117. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_verify_lifecycle.py +0 -0
  118. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_verify_scope.py +0 -0
  119. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_verify_scoped_views.py +0 -0
  120. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_verify_trust.py +0 -0
  121. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_verify_views.py +0 -0
  122. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_versions_not_figures.py +0 -0
  123. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_vocabulary_friction.py +0 -0
  124. {hypgraph-0.7.23 → hypgraph-0.7.25}/tests/test_workflows.py +0 -0
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.25 — 2026-11-01: which counts bear on a claim, joined comparisons, boundaries in names
4
+
5
+ Fixes from an independent audit of 0.7.24 (HG-024-01 to -04); each case below failed on 0.7.24 and is now a test
6
+ (`tests/test_counts_that_bear.py`).
7
+
8
+ - **A count with no comparison doesn't back one** (HG-024-01). With no comparison of its own, a count of none or all
9
+ was read the old way, so "3 of 3 routes processed" backed "nothing is longer than 26 km" and "every route is longer
10
+ than 26 km". A count that states no comparison now doesn't bear on a claim that rules one out
11
+ (`ABSOLUTE_WITHOUT_COUNT`). A claim with no comparison ("no route ever failed") reads a plain count as before.
12
+ - **A count of one kind doesn't back a claim about another** (HG-024-02). A count and a claim were matched on any shared
13
+ word, so none of 3 cargo routes longer than 26 km backed "no passenger route is longer than 26 km" while the passenger
14
+ count was 1 of 3, and backed "no route is longer" too. A count names what it counts in the plural ("cargo routes");
15
+ where the statement uses that word, the words right before it say which kind. A count backs a claim only if every
16
+ kind it names is one the statement names; a count of one kind that finds some still refutes a claim about all, and
17
+ two kinds named apart (cargo, passenger) are left unresolved.
18
+ - **Two comparisons joined in one clause** (HG-024-03). "And" ended the clause, so "no route is shorter than 20 km and
19
+ longer than 30 km" was refused by a route shorter than 20, and "every route is longer than 10 km and shorter than 30
20
+ km" went in with "shorter than 30" unread, even with the count that refutes it bound. An "and" or "or" before a
21
+ comparison with no subject of its own now keeps it in the clause. "No … A or B" and "every … A and B" are false if
22
+ either part fails; "no … A and B" and "every … A or B" rule out only what meets both, so none of one part backs them
23
+ and a count of each part on its own leaves them unresolved.
24
+ - **A count's name must say its boundary** (HG-024-04). Only a name pointing the other way was caught: a `>=` count
25
+ named "routes longer than 26 km", or a `>` count named "26 km or longer", went in. A name that leaves the figure out
26
+ where the count took it in, or the other way round, is now `MEASUREMENT_MISMATCH`.
27
+
28
+ ## 0.7.24 — 2026-11-01: what a quantifier needs, where a comparison's boundary falls, one check per extreme
29
+
30
+ Fixes from an independent audit of 0.7.23 (HG-023-01 to -05); each case below failed on 0.7.23 and is now a test.
31
+
32
+ - **"Nothing" needs none, "every" needs all** (HG-023-01). Any count of none or all backed an absolute, so "nothing
33
+ is longer than 26 km" went in with all 3 routes longer, and "every route is longer than 26 km" with none. When a
34
+ count's comparison is known, the claim now needs the extreme its quantifier names; the other extreme shows it false
35
+ (`COUNT_CONTRADICTS`). A count of what lies outside the claim's exceptions is read as its complement: none of 3
36
+ longer than 26 is 3 of 3 at 26 or shorter. "Every" in a clause that states its own count ("a count of every route
37
+ finds 1 of 76 shorter") names the set counted and is not read as a quantifier. A count whose comparison can't be
38
+ told ("failures") is read as before.
39
+ - **"At least" is not "longer than"** (HG-023-02). Comparisons keep their boundary: `op` takes `<`, `<=`, `=`, `!=`,
40
+ `>=`, `>`, and names say "at least", "at most", "26 km or longer", "not / no shorter than", "no more than". A count
41
+ refutes a claim only if everything it found is an exception, and backs it only if it covers every exception: two
42
+ routes at least 26 km neither refute nor back "no route is longer than 26 km" (the routes of exactly 26 lie between),
43
+ and none longer than 26 doesn't back "no route is 26 km or longer". `=` and `!=` counts don't bear on a comparison.
44
+ "At least" used to be read as pointing down and "at most" up. "No route is 26 km or longer" and "no route is at
45
+ least 26 km" are absolutes too.
46
+ - **Two extremes are two claims** (HG-023-03). "The shortest route is 26 km; the longest route is 35 km" pooled both
47
+ figures and both directions, and the count of 2 longer than 26 refused the true sentence. Each extreme, and each
48
+ thing an absolute rules out, is now checked with its own figure and direction; the refusal names the extreme it
49
+ found false.
50
+ - **What "of" and "for" name says which thing** (HG-023-04). "Weights of cargo" and "weights of passengers" both read
51
+ as bare "weights", and "shipping cargo weights" met "shipping passenger weights" on one shared word. The object of
52
+ "of" / "for" now counts, and two subjects that each say something the other doesn't are left apart: unresolved, not
53
+ a contradiction. One that only adds to the other ("the recorded weights of cargo") is the same thing.
54
+ - **A contrast keeps the unit it asserts** (HG-023-05). "Not in pounds but in kilograms" lost its kilograms, and
55
+ "kilograms rather than pounds" kept both, so a claim of pounds citing either went in. A clause with no subject or
56
+ verb of its own takes the subject its sentence named last ("… but always in kilograms"); one that names its own
57
+ ("and passenger weights in pounds") doesn't. What follows "rather than" / "instead of", up to its unit, is set aside.
58
+ - Limits: subjects, units of record, quantifiers and comparisons are still read from words, not typed (only a count's
59
+ `figure` and `op` are); a missed contradiction is preferred to a false one, so subjects left apart are not
60
+ compared; conversions aren't checked; and the replay of earlier recorded entries changes nothing, which shows no
61
+ regression but none of those entries tries these cases.
62
+
3
63
  ## 0.7.23 — 2026-11-01: a count points one way, "no route is longer", what a unit is said of
4
64
 
5
65
  Fixes from an independent audit of 0.7.22 (HG-022-01 to -05); each case below failed on 0.7.22 and is now a test.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: hypgraph
3
- Version: 0.7.23
3
+ Version: 0.7.25
4
4
  Summary: The evidence layer for AI research agents: a hash-chained research record that checks every claim as it is written and derives how well each is known.
5
5
  Project-URL: Homepage, https://hypgraph.com
6
6
  Project-URL: Documentation, https://hypgraph.com/engineers/
@@ -109,7 +109,7 @@ claim's derived standing.
109
109
  Multi-writer sync between graphs (bundles cover sharing), authentication (the host's job; the HTTP server binds to
110
110
  loopback and is read-only unless started with `--writable`), and a hosted service.
111
111
 
112
- ## Status at 0.7.23 (2026-11-01)
112
+ ## Status at 0.7.25 (2026-11-01)
113
113
 
114
114
  All seven phases are done: the library, bundles, the server and UI, the MCP server, the website, Pegasus running on
115
115
  the package, and releases to PyPI from tags with trusted publishing. What came after the plan, by release, is in
@@ -131,6 +131,41 @@ was taken from a changelog without being checked against the code.*
131
131
  > which unit a record uses are still read from words, not typed; a fresh independent audit should precede any claim
132
132
  > that 0.7.23 resists these attack classes. Released as 0.7.23.
133
133
 
134
+ > **Audit of 0.7.23 (2026-11-01), fixed for 0.7.24.** A fourth independent audit, a code review without running the
135
+ > wheel, named five candidate defects; each reproduced on the PyPI 0.7.23 wheel, plus two of the same kind. A count of
136
+ > none or all backed any absolute, so "nothing is longer than 26 km" went in with all routes longer and "every route
137
+ > is longer" with none (HG-023-01). Comparisons lost their boundary, so a count at least 26 refuted the true "no route
138
+ > is longer than 26" and "at least" was read as pointing down (HG-023-02). Two extremes in one sentence were pooled
139
+ > and a true one refused (HG-023-03). "Weights of cargo" and "weights of passengers" read as one thing (HG-023-04),
140
+ > and "not in pounds but in kilograms" lost its kilograms (HG-023-05). A claim now needs the extreme its quantifier
141
+ > names; comparisons keep their boundary across six operators; each extreme is checked on its own; the object of "of"
142
+ > / "for" says which thing, and subjects that each say something the other doesn't are left apart, unresolved; a
143
+ > contrast keeps its unit. Each case is a regression test written to fail on 0.7.23. Replaying the 1,900 recorded
144
+ > adversarial entries changes nothing against 0.7.23 (a first version over-read "a count of every route" and named
145
+ > one honest party wrongly; caught by the replay, fixed and tested), but none of those entries tries these cases.
146
+ >
147
+ > **Where that stands.** #89 is merged with green CI (17 of 17 checks); from the 0.7.24 wheel in a fresh venv the
148
+ > suite is 549 passed, and hypswarm (118 passed) and hypmesh (37 passed) pass on it. The audit recommends a typed
149
+ > claim layer (subject, property, comparator, threshold, unit, quantifier) so that strong verdicts rest on typed fields
150
+ > rather than prose; that is not built. Released as 0.7.24.
151
+
152
+ > **Audit of 0.7.24 (2026-11-01), fixed for 0.7.25.** A fifth independent audit named four candidate defects; each
153
+ > reproduced on the PyPI 0.7.24 wheel, plus four of the same kind. A count with no comparison of its own ("3 of 3
154
+ > routes processed") backed "nothing is longer than 26 km" and "every route is longer" (HG-024-01). A count of cargo
155
+ > routes backed a claim about passenger routes, and about every route, because they shared the word "route"
156
+ > (HG-024-02). "And" ended a clause, so a true "no route is shorter than 20 km and longer than 30 km" was refused,
157
+ > and "every route is longer than 10 km and shorter than 30 km" went in with its second half unread, even beside the
158
+ > count that refutes it (HG-024-03). A `>=` count named "longer than 26 km" went in (HG-024-04). A count that states no
159
+ > comparison no longer bears on one; a count backs only a claim whose kinds it names, and kinds named apart are
160
+ > unresolved; a comparison joined by "and" / "or" stays in its clause and is read as both or either; a name must say
161
+ > the boundary its count used. Each case is a regression test written to fail on 0.7.24. Replaying the 1,900 recorded
162
+ > adversarial entries changes 7: one honest correction is no longer refused, and one correction that got in only
163
+ > because an unrelated zero count backed it (the HG-024-01 case) is now refused; none of the entries tries these cases.
164
+ >
165
+ > **Where that stands.** #91 is merged with green CI (17 of 17 checks); from the 0.7.25 wheel in a fresh venv the
166
+ > suite is 574 passed, and hypswarm (118 passed) and hypmesh (37 passed) pass on it. Kinds are read from a plural noun
167
+ > and the words before it, a heuristic; the typed claim layer the audits recommend is not built. Released as 0.7.25.
168
+
134
169
  ## Recommendation: CONDITIONAL GO
135
170
 
136
171
  HypGraph is ready for a public developer preview once #59, #60 and #61 are merged with green CI and released as one
@@ -16,7 +16,7 @@ Standing is derived on every read, never stored; every write is an event in a SH
16
16
  their numbers; reviews pin versions; independence is counted, not assumed. See https://hypgraph.com.
17
17
  """
18
18
 
19
- __version__ = "0.7.23"
19
+ __version__ = "0.7.25"
20
20
 
21
21
  from .bundle import anchored, verify_bundle # noqa: E402
22
22
  from .graph import Author, Graph, GraphError, file_sha256 # noqa: E402