@sunstack/cli 0.8.3 → 0.10.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.10.0
4
+
5
+ Release date: 2026-11-08.
6
+
7
+ - Default human lint output groups unsure results into one summary per rule,
8
+ showing the count and a saved-report readback example. Findings keep their
9
+ individual locations and messages. JSON, GitHub, SARIF, saved reports and
10
+ `lint show` retain every result; run status, counts and exit codes are unchanged.
11
+
12
+ ## 0.9.0
13
+
14
+ Release date: 2026-11-07.
15
+
16
+ - `lint --prepare FILE` and `lint cases --prepare FILE` save exact model requests
17
+ and evidence without credentials or provider dispatch, with explicit gates and
18
+ unanswered selection dependencies, including composed-field/shared-projection
19
+ uncertainty. Clean preparation exits 6; failed admission and replayed selections
20
+ keep ordinary request-allowance semantics.
21
+ - Ordinary saved reports and JSON output retain selection requests and answers.
22
+ `--prepare --selections-from REPORT` continues from identical recorded selection
23
+ inputs with an exact resolved-model pin and explicit source provenance.
24
+ - `lint show` reads prepared requests, saved selections and prepared case ordinals
25
+ using only the saved report. Existing ordinary human output and result ids stay
26
+ unchanged.
27
+
3
28
  ## 0.8.3
4
29
 
5
30
  Release date: 2026-11-07.
package/README.md CHANGED
@@ -105,8 +105,10 @@ logical report order. Each entry has the rule's `name` and marker, the piece's
105
105
  file and first and last line, its outcome (`pass`, `finding`, `not_applicable`,
106
106
  `uncertain` or `incomplete`) and its ending `step` (null before any step ran).
107
107
 
108
- Default output prints short numbered lines and a filter summary. To inspect a
109
- result later, save the full report and request one id:
108
+ Default output prints findings as short numbered lines and groups unsure results
109
+ into one count per rule, with a `lint show` example using that rule's first unsure
110
+ id. The full list, ending steps, sent state and answers remain in JSON and saved
111
+ reports. To inspect a result later, save the full report and request one id:
110
112
 
111
113
  ```sh
112
114
  sunstack lint --all --report run.json
@@ -120,6 +122,64 @@ and rule files. It retains raw piece evidence for mechanical steps. `lint show`
120
122
  needs only that saved file; an excluded rule is marked as never asked and cannot
121
123
  be re-walked. Unknown ids return an error with the valid range.
122
124
 
125
+ ### Prepare requests without sending
126
+
127
+ ```sh
128
+ sunstack lint --all --prepare prepared.json
129
+ sunstack lint show prepared.json 3
130
+ sunstack lint cases cases.json --set development --prepare prepared-cases.json
131
+ sunstack lint show prepared-cases.json 1
132
+ sunstack lint --all --prepare continued.json --selections-from run.json
133
+ ```
134
+
135
+ `--prepare FILE` uses ordinary target selection, evidence, cuts, mechanical checks,
136
+ request builders and budgets, then saves the requests without resolving a
137
+ credential or sending to the provider. It conflicts with `--report`, `--check`,
138
+ `--rules`, `--evidence` and `--init`. The report adds `mode: "prepare"`; each
139
+ unanswered request has `status: "prepared"`, its exact `request.state` and
140
+ `request.questions`, raw evidence, and the config and rule file contents/hashes.
141
+ There are no invented answers or judged outcomes. Filter-gated rule requests are
142
+ offered for every mechanically possible folder with their `gate` condition.
143
+ Decision-tree routes use one request containing all piece questions, so an
144
+ unanswered route does not block preparation.
145
+
146
+ A selected kind's unanswered selection prevents its dependent pieces from being
147
+ built. `needs_answer` lists each affected kind/file and the selection request id
148
+ it waits on; independent evidence still builds. Composed `same_file`, `inside`
149
+ and `enclosing` fields remain selection-pending, including remainder subtraction.
150
+ If any field in the model view is selection-pending, the whole model request
151
+ waits, including questions that read only another field. No size estimate is
152
+ used. Requests whose model view has no pending field continue normally.
153
+ Ordinary `--report` and JSON
154
+ output now retain selection requests, answers, requested/resolved models, input
155
+ hashes and raw selection evidence, alongside their existing rule/filter entries.
156
+
157
+ Use `--selections-from` only with `--prepare` to continue from those recorded
158
+ answers. It accepts a lint report or a case report. Replay requires the identical
159
+ state and questions, a valid recorded answer, and **decision_model.model equal to the
160
+ recorded resolved model name exactly**. Pin the resolved version in the config;
161
+ an alias such as `jev-latest`, a different version, an unanswered entry or changed
162
+ input stays `needs_answer`. No provider-prefix inference or revision restriction
163
+ is applied. Applied entries have `status: "from_report"` and
164
+ `source_request_id`; a case-report source also records `source_revision`.
165
+ Agreeing duplicate answers retain the first source's provenance; conflicting
166
+ answers stay unresolved. Replayed selectors check and consume the same logical
167
+ request allowance as ordinary selection, so downstream requests keep the same
168
+ limit. Neither preparing nor replaying sends inference or consumes model usage.
169
+
170
+ Prepared case reports keep the ordinary exact-range/hash matching and accounting,
171
+ adding the `prepared` disposition. Stale, unmatched, ambiguous, mechanically
172
+ excluded and unavailable cases retain explicit reasons. `lint show` on a prepared
173
+ case report selects the **1-based ordinal in its cases array**, and returns that
174
+ case plus its linked revision/request evidence; stale and unmatched cases are
175
+ reason-only. Readback needs only the saved file.
176
+
177
+ A clean prepare-only run exits **6**, including runs waiting for selection answers.
178
+ Mechanical findings or case gaps (including stale/unmatched cases) exit **1**;
179
+ invalid input exits **2**, incomplete processing **3**, and cancellation **4**.
180
+ Invalid, cancelled and incomplete processing take precedence over case gaps.
181
+ Unassessed case bars alone do not fail a prepare-only run.
182
+
123
183
  A case file contains `cases` and `bars`, plus an optional local `repository`
124
184
  path (relative to the case file). Each case has a unique `id`, `revision`, `set`
125
185
  and `label_from` (`owner-fix`, `owner-ruling` or `blind-agents`).
@@ -19,7 +19,7 @@
19
19
  "hasInstallScript": true,
20
20
  "license": "MIT",
21
21
  "name": "@sunstack/cli",
22
- "version": "0.8.3"
22
+ "version": "0.10.0"
23
23
  },
24
24
  "node_modules/detect-libc": {
25
25
  "engines": {
@@ -48,5 +48,5 @@
48
48
  }
49
49
  },
50
50
  "requires": true,
51
- "version": "0.8.3"
51
+ "version": "0.10.0"
52
52
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/ShravanSunder/sunstack-tools/releases/download/v0.8.3"
3
+ "https://github.com/ShravanSunder/sunstack-tools/releases/download/v0.10.0"
4
4
  ],
5
5
  "bin": {
6
6
  "sunstack": "run-sunstack.js"
@@ -88,7 +88,7 @@
88
88
  "zipExt": ".tar.gz"
89
89
  }
90
90
  },
91
- "version": "0.8.3",
91
+ "version": "0.10.0",
92
92
  "volta": {
93
93
  "node": "18.14.1",
94
94
  "npm": "9.5.0"