@sunstack/cli 0.8.3 → 0.9.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,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.0
4
+
5
+ Release date: 2026-11-07.
6
+
7
+ - `lint --prepare FILE` and `lint cases --prepare FILE` save exact model requests
8
+ and evidence without credentials or provider dispatch, with explicit gates and
9
+ unanswered selection dependencies, including composed-field/shared-projection
10
+ uncertainty. Clean preparation exits 6; failed admission and replayed selections
11
+ keep ordinary request-allowance semantics.
12
+ - Ordinary saved reports and JSON output retain selection requests and answers.
13
+ `--prepare --selections-from REPORT` continues from identical recorded selection
14
+ inputs with an exact resolved-model pin and explicit source provenance.
15
+ - `lint show` reads prepared requests, saved selections and prepared case ordinals
16
+ using only the saved report. Existing ordinary human output and result ids stay
17
+ unchanged.
18
+
3
19
  ## 0.8.3
4
20
 
5
21
  Release date: 2026-11-07.
package/README.md CHANGED
@@ -120,6 +120,64 @@ and rule files. It retains raw piece evidence for mechanical steps. `lint show`
120
120
  needs only that saved file; an excluded rule is marked as never asked and cannot
121
121
  be re-walked. Unknown ids return an error with the valid range.
122
122
 
123
+ ### Prepare requests without sending
124
+
125
+ ```sh
126
+ sunstack lint --all --prepare prepared.json
127
+ sunstack lint show prepared.json 3
128
+ sunstack lint cases cases.json --set development --prepare prepared-cases.json
129
+ sunstack lint show prepared-cases.json 1
130
+ sunstack lint --all --prepare continued.json --selections-from run.json
131
+ ```
132
+
133
+ `--prepare FILE` uses ordinary target selection, evidence, cuts, mechanical checks,
134
+ request builders and budgets, then saves the requests without resolving a
135
+ credential or sending to the provider. It conflicts with `--report`, `--check`,
136
+ `--rules`, `--evidence` and `--init`. The report adds `mode: "prepare"`; each
137
+ unanswered request has `status: "prepared"`, its exact `request.state` and
138
+ `request.questions`, raw evidence, and the config and rule file contents/hashes.
139
+ There are no invented answers or judged outcomes. Filter-gated rule requests are
140
+ offered for every mechanically possible folder with their `gate` condition.
141
+ Decision-tree routes use one request containing all piece questions, so an
142
+ unanswered route does not block preparation.
143
+
144
+ A selected kind's unanswered selection prevents its dependent pieces from being
145
+ built. `needs_answer` lists each affected kind/file and the selection request id
146
+ it waits on; independent evidence still builds. Composed `same_file`, `inside`
147
+ and `enclosing` fields remain selection-pending, including remainder subtraction.
148
+ If any field in the model view is selection-pending, the whole model request
149
+ waits, including questions that read only another field. No size estimate is
150
+ used. Requests whose model view has no pending field continue normally.
151
+ Ordinary `--report` and JSON
152
+ output now retain selection requests, answers, requested/resolved models, input
153
+ hashes and raw selection evidence, alongside their existing rule/filter entries.
154
+
155
+ Use `--selections-from` only with `--prepare` to continue from those recorded
156
+ answers. It accepts a lint report or a case report. Replay requires the identical
157
+ state and questions, a valid recorded answer, and **decision_model.model equal to the
158
+ recorded resolved model name exactly**. Pin the resolved version in the config;
159
+ an alias such as `jev-latest`, a different version, an unanswered entry or changed
160
+ input stays `needs_answer`. No provider-prefix inference or revision restriction
161
+ is applied. Applied entries have `status: "from_report"` and
162
+ `source_request_id`; a case-report source also records `source_revision`.
163
+ Agreeing duplicate answers retain the first source's provenance; conflicting
164
+ answers stay unresolved. Replayed selectors check and consume the same logical
165
+ request allowance as ordinary selection, so downstream requests keep the same
166
+ limit. Neither preparing nor replaying sends inference or consumes model usage.
167
+
168
+ Prepared case reports keep the ordinary exact-range/hash matching and accounting,
169
+ adding the `prepared` disposition. Stale, unmatched, ambiguous, mechanically
170
+ excluded and unavailable cases retain explicit reasons. `lint show` on a prepared
171
+ case report selects the **1-based ordinal in its cases array**, and returns that
172
+ case plus its linked revision/request evidence; stale and unmatched cases are
173
+ reason-only. Readback needs only the saved file.
174
+
175
+ A clean prepare-only run exits **6**, including runs waiting for selection answers.
176
+ Mechanical findings or case gaps (including stale/unmatched cases) exit **1**;
177
+ invalid input exits **2**, incomplete processing **3**, and cancellation **4**.
178
+ Invalid, cancelled and incomplete processing take precedence over case gaps.
179
+ Unassessed case bars alone do not fail a prepare-only run.
180
+
123
181
  A case file contains `cases` and `bars`, plus an optional local `repository`
124
182
  path (relative to the case file). Each case has a unique `id`, `revision`, `set`
125
183
  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.9.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.9.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.9.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.9.0",
92
92
  "volta": {
93
93
  "node": "18.14.1",
94
94
  "npm": "9.5.0"