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.
- package/dist/core/FrameworkSessionStore.d.ts +43 -0
- package/dist/core/FrameworkSessionStore.d.ts.map +1 -0
- package/dist/core/FrameworkSessionStore.js +90 -0
- package/dist/core/FrameworkSessionStore.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts +16 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +44 -9
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/PreCompactionFlush.d.ts +9 -0
- package/dist/core/PreCompactionFlush.d.ts.map +1 -1
- package/dist/core/PreCompactionFlush.js +10 -4
- package/dist/core/PreCompactionFlush.js.map +1 -1
- package/dist/core/ResumeValidator.d.ts +6 -0
- package/dist/core/ResumeValidator.d.ts.map +1 -1
- package/dist/core/ResumeValidator.js +10 -5
- package/dist/core/ResumeValidator.js.map +1 -1
- package/dist/core/types.d.ts +13 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +17 -17
- package/upgrades/1.0.11.md +61 -0
- package/upgrades/1.0.12.md +64 -0
- package/upgrades/side-effects/feat-portability-framework-gate.md +62 -0
- package/upgrades/side-effects/feat-portability-session-store.md +62 -0
|
@@ -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).
|