@ossiq/cli-linux-x64 0.1.12 → 0.1.14

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 (63) hide show
  1. package/bin/ossiq/_internal/_cffi_backend.cpython-313-x86_64-linux-gnu.so +0 -0
  2. package/bin/ossiq/_internal/base_library.zip +0 -0
  3. package/bin/ossiq/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
  4. package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/METADATA +110 -0
  5. package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/RECORD +122 -0
  6. package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/WHEEL +5 -0
  7. package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/licenses/LICENSE +3 -0
  8. package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/licenses/LICENSE.APACHE +202 -0
  9. package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info/LICENSE → cryptography-50.0.1.dist-info/licenses/LICENSE.BSD} +14 -9
  10. package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/sboms/cryptography-rust.cyclonedx.json +1365 -0
  11. package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/sboms/sbom.json +43 -0
  12. package/bin/ossiq/_internal/keyring-25.7.0.dist-info/METADATA +554 -0
  13. package/bin/ossiq/_internal/keyring-25.7.0.dist-info/RECORD +40 -0
  14. package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info → keyring-25.7.0.dist-info}/WHEEL +1 -2
  15. package/bin/ossiq/_internal/keyring-25.7.0.dist-info/entry_points.txt +13 -0
  16. package/bin/ossiq/_internal/keyring-25.7.0.dist-info/licenses/LICENSE +18 -0
  17. package/bin/ossiq/_internal/keyring-25.7.0.dist-info/top_level.txt +1 -0
  18. package/bin/ossiq/_internal/lark/grammars/common.lark +59 -0
  19. package/bin/ossiq/_internal/lark/grammars/lark.lark +62 -0
  20. package/bin/ossiq/_internal/lark/grammars/python.lark +302 -0
  21. package/bin/ossiq/_internal/lark/grammars/unicode.lark +7 -0
  22. package/bin/ossiq/_internal/lark/py.typed +0 -0
  23. package/bin/ossiq/_internal/libpython3.13.so.1.0 +0 -0
  24. package/bin/ossiq/_internal/ossiq/data/SKILL.md +42 -16
  25. package/bin/ossiq/_internal/ossiq/domain/README.md +30 -4
  26. package/bin/ossiq/_internal/ossiq/solver/README.md +10 -3
  27. package/bin/ossiq/_internal/ossiq/strategy/README.md +20 -2
  28. package/bin/ossiq/_internal/ossiq/ui/html_templates/spa_app.html +1828 -1518
  29. package/bin/ossiq/_internal/ossiq/ui/renderers/export/README.md +103 -40
  30. package/bin/ossiq/_internal/ossiq/ui/renderers/export/schemas/export_schema_v1.6.json +1805 -0
  31. package/bin/ossiq/_internal/ossiq/ui/renderers/export/schemas/export_schema_v1.6_standard.json +1328 -0
  32. package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/INSTALLER +1 -0
  33. package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/METADATA +207 -0
  34. package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/RECORD +13 -0
  35. package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/REQUESTED +0 -0
  36. package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/uv_cache.json +1 -0
  37. package/bin/ossiq/_internal/pysolvers.cpython-313-x86_64-linux-gnu.so +0 -0
  38. package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER +1 -0
  39. package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA +133 -0
  40. package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD +21 -0
  41. package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED +0 -0
  42. package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL +5 -0
  43. package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE +73 -0
  44. package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt +1 -0
  45. package/bin/ossiq/ossiq +0 -0
  46. package/package.json +1 -1
  47. package/bin/ossiq/_internal/ossiq-0.1.12.dist-info/METADATA +0 -385
  48. package/bin/ossiq/_internal/ossiq-0.1.12.dist-info/RECORD +0 -13
  49. package/bin/ossiq/_internal/ossiq-0.1.12.dist-info/uv_cache.json +0 -1
  50. package/bin/ossiq/_internal/semantic_version-2.10.0.dist-info/METADATA +0 -324
  51. package/bin/ossiq/_internal/semantic_version-2.10.0.dist-info/RECORD +0 -10
  52. package/bin/ossiq/_internal/semantic_version-2.10.0.dist-info/top_level.txt +0 -1
  53. package/bin/ossiq/_internal/wcwidth/textwrap.py,cover +0 -664
  54. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → cryptography-50.0.1.dist-info}/INSTALLER +0 -0
  55. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → cryptography-50.0.1.dist-info}/REQUESTED +0 -0
  56. /package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info → keyring-25.7.0.dist-info}/INSTALLER +0 -0
  57. /package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info → keyring-25.7.0.dist-info}/REQUESTED +0 -0
  58. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/WHEEL +0 -0
  59. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/direct_url.json +0 -0
  60. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/entry_points.txt +0 -0
  61. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/licenses/AUTHORS +0 -0
  62. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/licenses/LICENSE +0 -0
  63. /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/uv_build.json +0 -0
@@ -15,6 +15,8 @@ solver/
15
15
  ├── problem.py SolverProblem, CandidateVersion, PackageConstraint
16
16
  ├── universe.py SolvablePool — builds SolverProblem from registry
17
17
  ├── version_matchers.py npm semver + PEP 440 range matching — raw constraint → bool
18
+ ├── npm_range.py npm range grammar (Lark) + node-semver's rewrite rules → comparator sets
19
+ ├── pep508.py Which declared PyPI requirements apply to a project (extras + environment markers)
18
20
  ├── encoder.py ConstraintEncoder — produces EncodedProblem (WCNF)
19
21
  ├── weights.py Constraint weight constants + semver_rank_weight()
20
22
  └── dependencies_solver.py Public API: solve_direct(), solve_transitive()
@@ -51,7 +53,8 @@ deps / transitive_records
51
53
  SolvablePool.build() universe.py
52
54
  – deduplicates by canonical_name (highest ConstraintType priority wins)
53
55
  – fetches candidates from warm registry cache
54
- – filters yanked, unpublished, prerelease (unless allowed)
56
+ – filters yanked, unpublished, prerelease (unless allowed), and deprecated releases when
57
+ allow_deprecated=False (only `ossiq add` choosing a live package passes that)
55
58
  – sorts candidates descending (newest first)
56
59
  – stamps has_cve=True on versions any of the package's CVEs affects (cves_by_package;
57
60
  judged by version_matchers.cve_affects_version, ranges included)
@@ -85,7 +88,7 @@ greedily; the pluggable RC2 driver **minimises** total violated soft cost exactl
85
88
  | L1 | Hard | — | Version outside declared `version_constraint` (PEP 440 or npm semver) |
86
89
  | L2 | Soft-Hard | `W_ENGINE = 100_000` | Engine mismatch (`python`/`node` requirement vs `engine_context`) |
87
90
  | L3 | Soft | `max(80_000 − rank × 5_000, 1_000)` | Semver-rank preference — rank 0 = latest eligible semver |
88
- | L4 | Soft | `W_DEPRECATED = 10_000` | Deprecated flag — penalty on selection |
91
+ | L4 | Soft | `W_DEPRECATED = 10_000` | Deprecated flag — penalty on selection. A deprecated release still wins over a clean one that ranks two or more places below it (2 × 5 000 = 10 000), and the penalty is the same for every candidate when all are deprecated. A caller that must never get a deprecated release passes `allow_deprecated=False`, which removes them before this level applies |
89
92
  | L5 | Hard | — | CVE-affected version |
90
93
  | L6 | Soft-Hard | `W_VERY_FRESH = 100_000` | Published < 7 days ago — both direct and transitive passes |
91
94
  | L7 | — | *(reserved)* | Health score — not implemented |
@@ -116,7 +119,11 @@ Structural clauses per package (encoder):
116
119
 
117
120
  ### Version constraint dispatch (encoder.py)
118
121
 
119
- `version_satisfies_constraint(version, constraint, registry)` (in `version_matchers.py`) dispatches directly to PyPI (PEP 440) or npm (semver) based on the `ProjectPackagesRegistry` passed in — no exception-based fallback. Bare npm versions (e.g. `"14"`) are treated as caret ranges (`^14.0.0`). Unparseable constraints pass through (`True`) — unknown format is never a hard block.
122
+ `version_satisfies_constraint(version, constraint, registry)` (in `version_matchers.py`) dispatches directly to PyPI (PEP 440) or npm (semver) based on the `ProjectPackagesRegistry` passed in — no exception-based fallback. npm ranges go through `npm_range.py` — a Lark grammar for the syntax plus node-semver's own rewrite rules, held to node-semver's verdicts by `tests/solver/node_semver_conformance.json`, so a partial version (`"14"`) is the X-range `14.x` exactly as npm reads it. Unparseable constraints pass through (`True`) — unknown format is never a hard block — and so does a blank one: PyPI publishes an unconstrained requirement as an empty specifier.
123
+
124
+ ### Which requirements apply (pep508.py)
125
+
126
+ A PyPI release declares requirements gated on extras (`oauthlib<4; extra == "socialaccount"`) and on environment markers (`tomli; python_version < "3.11"`). Whether one applies depends on the project, so `RequirementScope` (`domain/`) carries the extras the project enables per package and its Python floor, and `applicable_requirements()` keeps a requirement when its marker holds in at least one environment the project can be installed into — the same stance uv's universal resolution takes. The registry (`package_version_requires`), the candidate `requires` built in `universe.py`, and the enrichment of lockfile edges all read requirements through it; the scan sets the scope once, from the lockfile's `extra = [...]` edges and `requires-python`.
120
127
 
121
128
  ---
122
129
 
@@ -62,7 +62,7 @@ A strategy is not one dial, it is two, kept separate on purpose:
62
62
 
63
63
  | Tier | Base reach | Escalates to `LATEST` when... |
64
64
  |---|---|---|
65
- | `security` | in-range | an admitted motive is `exploitable_cve` (no in-range version clears the CVE) |
65
+ | `security` | in-range | an admitted motive is `exploitable_cve`; the pick leaves the range only when no in-range version clears the CVE |
66
66
  | `deprecation` | in-range | an admitted motive is `exploitable_cve` or `end_of_life` |
67
67
  | `standard` | in-range | same as above |
68
68
  | `latest` | latest | already maximal |
@@ -77,7 +77,7 @@ A strategy is not one dial, it is two, kept separate on purpose:
77
77
  |---|---|---|
78
78
  | `security` | no target (no CVE) | `2.32.0` — nearest CVE-clear version |
79
79
  | `deprecation` | no target | `2.32.0` |
80
- | `standard` | `1.10.13` — pin admits no in-range move | `2.34.2` — newest, already CVE-clear |
80
+ | `standard` | `1.10.26` — newest in the installed major, reported but not written (`requires_widening=True`) | `2.34.2` — newest, already CVE-clear |
81
81
  | `latest` | `2.13.5` — widens the pin, `requires_widening=True` | `2.34.2` |
82
82
  | `cutting-edge` | `2.13.5` (or newer, if a prerelease exists) | `2.34.2` |
83
83
 
@@ -109,6 +109,10 @@ A strategy is not one dial, it is two, kept separate on purpose:
109
109
  - **`escalation`** — set when reach was pushed past the tier's base `MAX_REACH` (a CVE or
110
110
  end-of-life motive escalated it), or when every reachable candidate still carries a qualifying
111
111
  CVE and the newest was picked anyway. Never silently "stay put".
112
+ - **`widening_authorized`** — an escalating motive carried the pick past the tier's base
113
+ `MAX_REACH` and some reachable version clears the CVE. `plan` lists the pick as an update instead
114
+ of holding it under *Requires constraint widening*; `apply` still confirms the widening, unless
115
+ `--yes` is given. Rule 8's drift-only widening never sets it.
112
116
 
113
117
  ---
114
118
 
@@ -157,6 +161,20 @@ Filtering fresh candidates out of the ladder here makes one decision serve every
157
161
  the whole point of rule 5 in the root `CLAUDE.md`. The downstream hold survives as a backstop for
158
162
  transitive recommendations, which come from the solver's *soft* freshness penalty.
159
163
 
164
+ **Why is the package manager's release cutoff a second filter rather than a longer cooldown?**
165
+ uv's `exclude-newer` (and its npm-side counterparts) looks like a cooldown, but it is a different
166
+ kind of rule. OSS IQ's cooldown is advice: one number per project, and an exploitable CVE or
167
+ end-of-life outranks it. The package manager's cutoff is enforcement: it can differ per package
168
+ or exempt one outright, it may be a fixed instant rather than a span, and the installer refuses a
169
+ release past it whatever OSS IQ recommends. It also binds only on a *move*, since uv leaves an
170
+ already-locked release past the cutoff alone. Folding the two into `max(days)` loses the
171
+ per-package rules, and lets an escalating motive "bypass" a rule `apply` cannot bypass. So
172
+ `select_target` takes the cutoff as its own parameter and applies it ahead of the cooldown and
173
+ outside `escalate`. A hold it causes carries `enforced_by`, so surfaces name uv rather than OSS
174
+ IQ. Both rules always apply, so the stricter one wins. The cutoff is not dropped from the registry
175
+ either: facts like `latest_version` and drift stay true, and the installed version stays visible
176
+ when it postdates the cutoff.
177
+
160
178
  **Why may only `latest`/`cutting-edge` cross to ESM-only, and only on a `require(esm)` Node?**
161
179
  For a CommonJS project an ESM-only release is a break whatever its version number:
162
180
  `require()` of it fails outright below Node 20.19/22.12, and above that it returns the module