instar 1.0.10 → 1.0.12

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,62 @@
1
+ # Side-effects review — Real enabledFrameworks field + framework gate (Gap 5)
2
+
3
+ Per L6. Seven dimensions.
4
+
5
+ ## 1. Over-block / under-block
6
+
7
+ Before: UNDER (and inert) — no working way to skip Claude-only steps for a
8
+ Codex install. After: precisely targeted. Default config → `['claude-code']`
9
+ → zero skips → byte-identical to today for every existing/dual install. Only
10
+ an explicit `enabledFrameworks: ['codex-cli']` causes `migrateSettings` to
11
+ skip — exactly the intended case. No over-block.
12
+
13
+ ## 2. Level-of-abstraction fit
14
+
15
+ Framework resolution is now one private helper (`getEnabledFrameworks`) — the
16
+ single source of truth. The previously-duplicated inline logic in
17
+ `migrateParityRenderings` was refactored to call it, removing drift risk.
18
+
19
+ ## 3. Signal vs Authority compliance
20
+
21
+ `enabledFrameworks` (persisted config) is the SIGNAL of operator intent;
22
+ `getEnabledFrameworks()` is the one AUTHORITY that resolves it with a safe
23
+ default. No brittle inline re-derivation remains.
24
+
25
+ ## 4. Interactions with adjacent systems
26
+
27
+ - **migrateParityRenderings** — behavior preserved; the 11 existing
28
+ parity-renderings tests pass unchanged after the DRY refactor.
29
+ - **FrameworkParitySentinel.enabledFrameworks** — separate config object
30
+ (sentinel's own interface); this PR adds the *persisted InstarConfig*
31
+ field the migrator reads. Names intentionally mirror; no shared mutable
32
+ state, no coupling introduced.
33
+ - **migrateSettings** — only new behavior is the early skip for non-Claude;
34
+ all downstream `.claude/settings.json` logic is untouched for the default
35
+ path.
36
+ - **Remaining 48 `.claude/` refs** — unchanged; they can adopt
37
+ `getEnabledFrameworks()` incrementally. Not touching them now is a
38
+ deliberate regression-risk decision, not an oversight.
39
+
40
+ ## 5. Rollback cost
41
+
42
+ Low. One new optional type field + one helper + one DRY refactor + one early
43
+ return + one test file. `git revert` restores prior behavior. The new config
44
+ field is optional and ignored by older code, so a mixed-version fleet is safe.
45
+
46
+ ## 6. Backwards compatibility / drift surface
47
+
48
+ Fully backward-compatible: optional field, safe default. Older instar
49
+ versions ignore an `enabledFrameworks` they don't know about. Drift surface
50
+ *reduced* — the duplicate inline framework logic is now a single helper.
51
+
52
+ ## 7. Authorization / Trust posture
53
+
54
+ No new authority. The helper only reads config and returns a string array.
55
+ The gate only *prevents* writes for non-Claude installs — it never grants a
56
+ new write. Unreadable config fails safe to `['claude-code']` (status quo).
57
+
58
+ ## Outcome
59
+
60
+ Ship. Corrects an inert audit finding into a real, reachable, tested gate;
61
+ default-safe; drift-reducing; trivial rollback. Fifth of the v1.0.9–v1.0.14
62
+ hardening series.
@@ -0,0 +1,62 @@
1
+ # Side-effects review — FrameworkSessionStore (Gap 3)
2
+
3
+ Per L6. Seven dimensions.
4
+
5
+ ## 1. Over-block / under-block
6
+
7
+ Before: UNDER — flush/resume silently no-op for Codex. After: no over-block.
8
+ Claude path is byte-identical (default framework = claude-code, same encoding
9
+ empirically confirmed against ~/.claude/projects/). Codex path returns '' when
10
+ no file (same safe no-op the callers already handle). No new over-block.
11
+
12
+ ## 2. Level-of-abstraction fit
13
+
14
+ Path resolution extracted into one pure module (`FrameworkSessionStore`).
15
+ Consumers delegate. Correct altitude — resolution logic in one tested unit,
16
+ orchestration unchanged in the consumers.
17
+
18
+ ## 3. Signal vs Authority compliance
19
+
20
+ `framework` (dep) is the SIGNAL of which runtime produced the session; the
21
+ resolver is the single AUTHORITY for the path. Missing/unknown framework
22
+ fails safe to claude-code (status quo).
23
+
24
+ ## 4. Interactions with adjacent systems
25
+
26
+ - **PreCompactionFlush** — only `resolveTranscriptPath` changed; tail-read,
27
+ flush, audit logic untouched. 35 regression tests (with ResumeValidator)
28
+ green.
29
+ - **ResumeValidator** — delegates; the `readSessionJsonl` test override path
30
+ is unchanged (still wins when provided). Latent slash-only encoding bug
31
+ fixed (see §6).
32
+ - **CompactionSentinel / other transcript readers** — not touched; they can
33
+ adopt the resolver incrementally. No behavior change for them.
34
+ - **Codex sessions dir** — read-only globbing; no writes, no mutation.
35
+
36
+ ## 5. Rollback cost
37
+
38
+ Low. One new module + two delegating edits + one new test. `git revert`
39
+ restores prior behavior. The new optional deps are ignored by callers that
40
+ don't set them.
41
+
42
+ ## 6. Backwards compatibility / drift surface
43
+
44
+ Claude-code: byte-identical path for slash-only project dirs; for dirs
45
+ containing a dot, ResumeValidator now produces the CORRECT path (the real
46
+ ~/.claude/projects/ naming replaces `.` too) — this fixes a pre-existing
47
+ latent failure rather than introducing one. PreCompactionFlush already used
48
+ the `[\/.]` encoding, so it is unchanged. This correctness delta is
49
+ documented, not silent. Drift surface: reduced — one resolver instead of two
50
+ divergent inline encodings.
51
+
52
+ ## 7. Authorization / Trust posture
53
+
54
+ No new authority. Pure read-only path resolution + fs.existsSync/readdir.
55
+ Cannot write, cannot escalate. Unreadable/missing Codex tree → '' (safe
56
+ no-op).
57
+
58
+ ## Outcome
59
+
60
+ Ship. Empirically grounded (no fabrication), both consumers wired, a latent
61
+ correctness bug fixed transparently, trivial rollback. Fourth shipped of the
62
+ v1.0.9–v1.0.14 hardening series (1.0.12).