instar 1.2.1 → 1.2.3

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.
@@ -0,0 +1,66 @@
1
+ # Side-effects review — Bareword framework prompt
2
+
3
+ Per L6. Seven dimensions.
4
+
5
+ ## 1. Over-block / under-block
6
+
7
+ Before: UNDER — bareword `npx instar` had no path to Codex-only setup
8
+ even with the underlying machinery in place. After: no over-block.
9
+ Subcommand explicit-flag path unchanged; non-TTY default unchanged. Only
10
+ the bareword on an interactive terminal gains the prompt.
11
+
12
+ ## 2. Level-of-abstraction fit
13
+
14
+ Pure decision in `resolveFrameworkPromptBehavior` (exported, testable);
15
+ side-effectful readline interaction in `promptForFramework` (private to
16
+ setup.ts, only called when the decision says "prompt"). The wizard flow
17
+ itself is untouched; the resolved framework value flows into the same
18
+ existing `checkFrameworkPrerequisite` call.
19
+
20
+ ## 3. Signal vs Authority compliance
21
+
22
+ The `--framework` flag (when present) and the prompt answer (when
23
+ prompted) are SIGNALS of operator intent. The existing
24
+ `checkFrameworkPrerequisite` is the single AUTHORITY for "is the chosen
25
+ runtime's binary present." The prompt's auto-skip-when-only-one-installed
26
+ behavior uses detection results from `detectClaudePath` /
27
+ `detectCodexPath`, which are the existing single source of truth.
28
+
29
+ ## 4. Interactions with adjacent systems
30
+
31
+ - **Explicit `--framework` flag on subcommands** (PRs 3+4 + #276) —
32
+ unchanged. When the flag is set, the prompt is skipped entirely (the
33
+ decision is `opts.framework ?? prompt`).
34
+ - **Non-interactive `runNonInteractiveSetup`** — unchanged. That entry
35
+ point doesn't go through `runSetup` and never triggers the prompt.
36
+ - **`checkFrameworkPrerequisite`** — unchanged. Consumes the resolved
37
+ framework string regardless of whether it came from a flag or the
38
+ prompt.
39
+ - **CI runs (no TTY)** — unchanged. `process.stdin.isTTY` is false in
40
+ CI, so the prompt is bypassed and the default Claude Code behavior
41
+ preserved.
42
+
43
+ ## 5. Rollback cost
44
+
45
+ Trivial. One readline-using function added, one decision helper added,
46
+ one conditional in `runSetup`'s opening lines. `git revert` restores
47
+ the pre-prompt bareword behavior; subcommand and CI flows unaffected.
48
+
49
+ ## 6. Backwards compatibility / drift surface
50
+
51
+ Fully backward-compatible. Default behavior on non-TTY paths is
52
+ unchanged. Subcommand behavior is unchanged. Only interactive bareword
53
+ gets the new UX. Drift surface: none — the decision is centralized in
54
+ one pure exported function.
55
+
56
+ ## 7. Authorization / Trust posture
57
+
58
+ No new authority. The prompt reads stdin and returns a string;
59
+ `checkFrameworkPrerequisite` and the rest of the existing wizard chain
60
+ handle everything downstream as they did before.
61
+
62
+ ## Outcome
63
+
64
+ Ship. Closes the install/wizard portability arc's last UX gap. Pure
65
+ decision logic unit-tested; readline I/O verified by Justin's manual
66
+ end-to-end after merge.