@ossiq/cli-linux-arm64 0.1.13 → 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-aarch64-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-aarch64-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.13.dist-info/METADATA +0 -385
  48. package/bin/ossiq/_internal/ossiq-0.1.13.dist-info/RECORD +0 -13
  49. package/bin/ossiq/_internal/ossiq-0.1.13.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.13.dist-info → cryptography-50.0.1.dist-info}/INSTALLER +0 -0
  55. /package/bin/ossiq/_internal/{ossiq-0.1.13.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.13.dist-info → ossiq-0.1.14.dist-info}/WHEEL +0 -0
  59. /package/bin/ossiq/_internal/{ossiq-0.1.13.dist-info → ossiq-0.1.14.dist-info}/direct_url.json +0 -0
  60. /package/bin/ossiq/_internal/{ossiq-0.1.13.dist-info → ossiq-0.1.14.dist-info}/entry_points.txt +0 -0
  61. /package/bin/ossiq/_internal/{ossiq-0.1.13.dist-info → ossiq-0.1.14.dist-info}/licenses/AUTHORS +0 -0
  62. /package/bin/ossiq/_internal/{ossiq-0.1.13.dist-info → ossiq-0.1.14.dist-info}/licenses/LICENSE +0 -0
  63. /package/bin/ossiq/_internal/{ossiq-0.1.13.dist-info → ossiq-0.1.14.dist-info}/uv_build.json +0 -0
@@ -1,6 +1,8 @@
1
1
  # Export Format Versioning Guide
2
2
 
3
- This directory owns the versioned JSON export format. Follow this guide when introducing a new schema version (e.g. v1.6).
3
+ This directory owns the versioned JSON export format. Follow this guide when introducing a new schema version (e.g. v1.7).
4
+
5
+ The versions registered here are **1.5** and **1.6**; the next one is 1.7.
4
6
 
5
7
  ---
6
8
 
@@ -41,11 +43,30 @@ Two kinds of changes require a new version:
41
43
 
42
44
  Breaking changes (removing required fields, renaming) are **never** made to an existing version — always bump.
43
45
 
44
- ### The standing exception: v1.5 while it is unreleased
46
+ ### Older versions stay selectable, and stay what they were
47
+
48
+ `ossiq export --schema-version 1.5` keeps producing a v1.5 document that validates against
49
+ `export_schema_v1.5.json` (and the standard one, which rejects any property it doesn't list). All
50
+ versions share one set of Pydantic models, so a field a later version added is tagged with its
51
+ version where it is declared:
52
+
53
+ ```python
54
+ unresolved_peers: list[UnresolvedPeerExport] = Field(..., json_schema_extra=SINCE_V1_6)
55
+ ```
56
+
57
+ `ProfiledExportModel` leaves such a field out of a document that declares an older version, in both
58
+ profiles, and `export_json()` passes the declared version to it. A field that is both full-only and
59
+ new carries both markers (`{**FULL_ONLY, **SINCE_V1_6}`). Anything that *selects* records by
60
+ version-dependent data (the standard profile's transitive filter) takes the version too, so the old
61
+ version selects exactly what it always did. `TestSchemaVersion15StaysAsReleased` pins all of this: a
62
+ v1.5 document is the v1.6 one minus the new fields, and `TestV16IsAdditiveOverV15` fails if a newer
63
+ schema removes, retypes or newly requires anything an older one had.
45
64
 
46
- v1.5 has not shipped in a release (the package is still `0.1.10`), so it has no consumers outside
47
- this repository and additive fields have been **amended into `export_schema_v1.5.json` in place**
48
- rather than bumped. Amended this way so far: the version-ladder fields (`latest_in_range`,
65
+ ### The former exception: v1.5 while it was unreleased
66
+
67
+ v1.5 shipped in 0.1.12, so this no longer applies; it is kept as a record of what v1.5 contains.
68
+ Until then it had no consumers outside this repository and additive fields were **amended into
69
+ `export_schema_v1.5.json` in place** rather than bumped. Amended this way: the version-ladder fields (`latest_in_range`,
49
70
  `latest_in_major`, `latest_compatible_major`, `recommended_from_rung`), the module-system and
50
71
  engine fields, `next_action` / `requires_constraint_widening`, the data-completeness
51
72
  diagnostics (`data_completeness.sources[].failures` and `data_completeness.api_budgets`), and
@@ -60,16 +81,21 @@ value it was missing since the stated-runtime change.
60
81
 
61
82
  One rename was also made in place: `triage_action` became `dependency_health_action`. Agents read
62
83
  the old name as the answer to "should I update?". With no released consumer, a rename cost nothing
63
- that a v1.6 bump would have saved. A pre-rename document still validates, since the old key is
84
+ that a version bump would have saved. A pre-rename document still validates, since the old key is
64
85
  simply an unknown extra property, but it no longer populates the field.
65
86
 
66
- This exception ends the moment v1.5 ships. After that the policy above applies without
67
- qualification: additive changes bump the minor version. Amending in place still means running the
68
- rest of the checklist below — regenerate the TS types, type-check the frontend, rebuild the SPA.
87
+ That exception ended when v1.5 shipped. For a released version the policy above applies without
88
+ qualification: additive changes bump the minor version, which is how v1.6 came about
89
+ (`unresolved_peers`, `peer_repairs`).
90
+
91
+ v1.6 itself has not shipped, so the exception applies to it in turn. Until it does, additive fields
92
+ are amended into `export_schema_v1.6.json` and `export_schema_v1.6_standard.json` in place, tagged
93
+ `SINCE_V1_6` so a `--schema-version 1.5` document stays as released. The next bump (1.7) waits for
94
+ the v1.6 release.
69
95
 
70
96
  ---
71
97
 
72
- ## Step-by-step: introducing v1.6
98
+ ## Step-by-step: introducing v1.7
73
99
 
74
100
  ### 1. Enum — `src/ossiq/domain/common.py`
75
101
 
@@ -78,7 +104,8 @@ Add the new version to `ExportJsonSchemaVersion`:
78
104
  ```python
79
105
  class ExportJsonSchemaVersion(StrEnum):
80
106
  V1_5 = "1.5"
81
- V1_6 = "1.6" # add
107
+ V1_6 = "1.6"
108
+ V1_7 = "1.7" # add
82
109
  ```
83
110
 
84
111
  ---
@@ -89,8 +116,16 @@ There is a single `ExportData` root (the former v1.3 shape: `constraint_type_map
89
116
  `transitive_packages` as `TransitivePackageMetrics`, and `dependency_tree`).
90
117
 
91
118
  **Additive-only change (new optional fields on `PackageMetrics` / `TransitivePackageMetrics`):**
92
- add the field as optional with `default=None` and update the `from_domain` constructor. No new
93
- subclass, no factory branch — existing serialization picks it up automatically.
119
+ add the field as optional with a default, tag it with the version that introduces it
120
+ (`json_schema_extra=SINCE_V1_7`, defined next to `SINCE_V1_6`; add the marker, then use it), decide its
121
+ profile (`FULL_ONLY` or not), and update the `from_domain` constructor. A field both
122
+ `PackageMetrics` and `TransitivePackageMetrics` carry belongs on a shared mixin (`PeerFields`,
123
+ `LadderFields`). No new subclass, no factory branch. Then update
124
+ `test_standard_field_sets_are_a_deliberate_choice` for the profile decision.
125
+
126
+ If a **record filter** depends on the new data (the standard profile's transitive selection does),
127
+ gate it on `schema_version.at_least(...)` the way `build_transitive_data` does, so the older version
128
+ keeps selecting what it always did.
94
129
 
95
130
  **Structural change** (a package-array item shape changes): add a new `ExportData` subclass and
96
131
  branch `build_export_data()` on `schema_version` to return it, keeping the old root for the
@@ -103,19 +138,28 @@ previous version.
103
138
  Copy the previous version as a starting point:
104
139
 
105
140
  ```
106
- cp export_schema_v1.5.json export_schema_v1.6.json
141
+ cp export_schema_v1.6.json export_schema_v1.7.json
107
142
  ```
108
143
 
109
- Edit `export_schema_v1.6.json`:
110
- - Update `$id` → `https://ossiq.org/schemas/export/v1.6.json`
144
+ Edit `export_schema_v1.7.json`:
145
+ - Update `$id` → `https://ossiq.org/schemas/export/v1.7.json`
111
146
  - Update `title` and `description`
112
- - Update `metadata.properties.schema_version.const` → `"1.6"`
147
+ - Update `metadata.properties.schema_version.const` → `"1.7"`
113
148
  - Apply the structural or additive changes to `$defs`
114
149
 
115
- Do the same for the standard profile (`export_schema_v1.6_standard.json`): copy the previous
150
+ Take the new descriptions from the Pydantic `Field(description=...)` rather than retyping them, so the
151
+ two cannot drift. (`json.dumps(schema, indent=2, ensure_ascii=True) + "\n"` reproduces the existing
152
+ files byte for byte, which keeps a script-generated diff down to the real changes.)
153
+
154
+ Do the same for the standard profile (`export_schema_v1.7_standard.json`): copy the previous
116
155
  standard schema, bump its `$id` / `title`, and mirror every change that isn't `FULL_ONLY`. The
117
156
  projection test tells you exactly which properties are missing or extra.
118
157
 
158
+ **Check every enum you copied against the code that emits it.** They are hand-written and drift:
159
+ `next_action` lacked `Wait for cooldown` from 0.1.11 on, so any document with a package inside its
160
+ cooldown failed its own schema. `TestNextActionEnumMatchesTheEmitter` pins that one; export a real
161
+ project and validate it (`jsonschema.validate`) against both profiles before calling a schema done.
162
+
119
163
  ---
120
164
 
121
165
  ### 4. Schema registry — `src/ossiq/ui/renderers/export/json_schema_registry.py`
@@ -124,25 +168,28 @@ projection test tells you exactly which properties are missing or extra.
124
168
  SCHEMA_FILES = {
125
169
  (ExportJsonSchemaVersion.V1_5, ExportProfile.FULL): "export_schema_v1.5.json",
126
170
  (ExportJsonSchemaVersion.V1_5, ExportProfile.STANDARD): "export_schema_v1.5_standard.json",
127
- (ExportJsonSchemaVersion.V1_6, ExportProfile.FULL): "export_schema_v1.6.json", # add
128
- (ExportJsonSchemaVersion.V1_6, ExportProfile.STANDARD): "export_schema_v1.6_standard.json", # add
171
+ (ExportJsonSchemaVersion.V1_6, ExportProfile.FULL): "export_schema_v1.6.json",
172
+ (ExportJsonSchemaVersion.V1_6, ExportProfile.STANDARD): "export_schema_v1.6_standard.json",
173
+ (ExportJsonSchemaVersion.V1_7, ExportProfile.FULL): "export_schema_v1.7.json", # add
174
+ (ExportJsonSchemaVersion.V1_7, ExportProfile.STANDARD): "export_schema_v1.7_standard.json", # add
129
175
  }
130
176
 
131
177
  def get_latest_version(self) -> ExportJsonSchemaVersion:
132
- return ExportJsonSchemaVersion.V1_6 # bump
178
+ return ExportJsonSchemaVersion.V1_7 # bump
133
179
  ```
134
180
 
135
181
  Also widen the `--schema-version` `Literal` in `src/ossiq/cli.py` and update
136
- `HELP_SCHEMA_VERSION` in `src/ossiq/messages.py`.
182
+ `HELP_SCHEMA_VERSION` in `src/ossiq/messages.py`, and add the new full schema to the two file lists in
183
+ `.github/workflows/test.yml` (the wheel and sdist checks), which name the latest schema by hand.
137
184
 
138
185
  ---
139
186
 
140
187
  ### 5. Frontend types — `frontend/package.json`
141
188
 
142
- Update the `generate:types` script to point at the new JSON schema:
189
+ Update the `generate:types` script to point at the new full JSON schema:
143
190
 
144
191
  ```json
145
- "generate:types": "json2ts -i ../src/ossiq/ui/renderers/export/schemas/export_schema_v1.6.json -o src/types/report.ts"
192
+ "generate:types": "json2ts -i ../src/ossiq/ui/renderers/export/schemas/export_schema_v1.7.json -o src/types/report.ts"
146
193
  ```
147
194
 
148
195
  Then regenerate:
@@ -152,7 +199,10 @@ cd frontend
152
199
  npm run generate:types
153
200
  ```
154
201
 
155
- This overwrites `frontend/src/types/report.ts`. TypeScript compiler errors after regeneration are the authoritative list of breaking changes to fix in Vue components.
202
+ This overwrites `frontend/src/types/report.ts`. The root interface is named from the schema's title, so
203
+ it becomes `OSSIQExportSchemaV17`; rename the imports of the old name (`grep -rn OSSIQExportSchemaV16 src`).
204
+ TypeScript compiler errors after regeneration are the authoritative list of breaking changes to fix in
205
+ Vue components.
156
206
 
157
207
  ---
158
208
 
@@ -163,45 +213,58 @@ Run `npm run type-check` in `frontend/` to surface all type errors introduced by
163
213
  Common patterns to check in Vue components and stores:
164
214
  - New required fields need to be supplied in fixtures / mock data used in `vitest` tests
165
215
  - Removed or renamed fields need updating at every access site
216
+ - A new per-package field has to be carried down the whole chain: `explorer/registry.ts` →
217
+ `types/registry.ts` → `explorer/transform.ts` → `composables/useD3Tree.ts` and, for the direct table,
218
+ `views/ScanReportView.vue` → `types/dependency-tree.ts`. Miss a link and the detail panel silently
219
+ shows nothing for that node type.
220
+ - If the new data can make a package worth reading on its own, add it to `isActionable` in
221
+ `composables/useReportFilters.ts` (the table hides packages with nothing to do by default)
166
222
  - Structural changes (like v1.3's `dependency_path → dependency_paths`) require updating iteration logic, filter callbacks, and any `d3` graph-building code that expands the transitive package list
167
223
 
168
224
  After all type errors are resolved, rebuild the SPA and regenerate the embedded template:
169
225
 
170
226
  ```bash
171
- cd frontend && npm run build
172
- # then run whatever script bakes spa_app.html into the Python package
227
+ uv run just frontend-build # npm ci + type-check + vite build, then rewrites spa_app.html
173
228
  ```
174
229
 
230
+ The HTML report always embeds the **latest** version's full profile, so the SPA must read the newest schema.
231
+
175
232
  ---
176
233
 
177
234
  ### 7. Tests
178
235
 
179
- **New schema registry test file** — copy `tests/ui/renderers/export/test_json_schema_registry_v1_5.py` and update version strings and structural assertions.
236
+ **New schema registry test file** — copy `tests/ui/renderers/export/test_json_schema_registry_v1_6.py` and update version strings and structural assertions. Add the new version to `VERSIONS` in `test_json_schema_projection.py` (`test_every_registered_version_is_checked` fails until you do).
180
237
 
181
238
  **Update existing tests** — hardcoded version strings to update:
182
239
  - `test_metadata_contains_schema_version_and_timestamp` in `test_json.py`
183
- - `test_get_latest_version_returns_v1_X` and `included_versions` in the previous schema registry test file
240
+ - `included_versions` in the previous schema registry test files
184
241
 
185
- **New renderer tests** — add a `TestJsonExportRendererV16` class in `test_json.py` covering:
186
- - Output validates against the new JSON schema
242
+ **New renderer tests** — add a `TestSchemaVersion18` class in `test_json.py` covering:
243
+ - Output validates against the new JSON schema, in both profiles
187
244
  - Any new structural invariants (e.g. deduplication counts, new field presence)
188
- - Backward compat: v1.5 still produces v1.5-shaped output (if the previous version is kept registered)
245
+ - Backward compat: every older registered version still produces its own shape
246
+ (`TestSchemaVersion15StaysAsReleased` — extend it, or add the sibling for the version you just superseded)
247
+ - `TestV16IsAdditiveOverV15`-style check that the new schema removes, retypes and newly requires nothing
189
248
 
190
249
  ---
191
250
 
192
251
  ## Checklist
193
252
 
194
253
  ```
195
- [ ] ExportJsonSchemaVersion.V1_6 added to domain/common.py
196
- [ ] New Pydantic fields / subclass added to models.py
254
+ [ ] ExportJsonSchemaVersion.V1_7 added to domain/common.py
255
+ [ ] New Pydantic fields tagged SINCE_V1_7 and given a profile decision in models.py
256
+ [ ] Record filters that read the new data gated on the declared version
197
257
  [ ] build_export_data() factory branch added (only if structural)
198
- [ ] export_schema_v1.6.json and export_schema_v1.6_standard.json created
258
+ [ ] export_schema_v1.7.json and export_schema_v1.7_standard.json created
259
+ [ ] Every enum in them checked against its emitter; a real export validates against both profiles
199
260
  [ ] json_schema_registry.py updated + get_latest_version() bumped
200
261
  [ ] --schema-version Literal widened in cli.py + HELP_SCHEMA_VERSION updated
201
- [ ] frontend/package.json generate:types script updated to v1.6
202
- [ ] npm run generate:types run — src/types/report.ts regenerated
262
+ [ ] .github/workflows/test.yml file lists name the new schema
263
+ [ ] frontend/package.json generate:types script updated to v1.7
264
+ [ ] npm run generate:types run — src/types/report.ts regenerated, root type renamed at its imports
203
265
  [ ] npm run type-check passes — all Vue component access sites updated
204
- [ ] SPA rebuilt and spa_app.html regenerated
205
- [ ] Schema registry tests added (full and standard), projection test pointed at v1.6
206
- [ ] Renderer tests updated
266
+ [ ] New fields carried through the registry/transform/selection chain; isActionable considered
267
+ [ ] uv run just frontend-build — SPA rebuilt and spa_app.html regenerated
268
+ [ ] Schema registry tests added (full and standard), projection test covers the new version
269
+ [ ] Renderer tests updated; older versions pinned by a compat test
207
270
  ```