@llblab/pi-kit 0.17.0 → 0.17.1

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
@@ -2,6 +2,11 @@
2
2
 
3
3
  All notable changes to `@llblab/pi-kit` are documented here.
4
4
 
5
+ ## 0.17.1 - 2026-09-18
6
+
7
+ - `State Flow Activation Hotfixes`: Advances the exact State Flow pin to `0.16.2`, allowing resumed activation to reassert its selected session cohort and allowing passive global memory before a new CWD has materialized, while retaining fail-closed handling for genuinely incomplete ownership.
8
+ - `Package Cohort`: Keeps every other bundled package at its current exact version; the package set, resource inventory, and explicit load order remain unchanged.
9
+
5
10
  ## 0.17.0 - 2026-09-18
6
11
 
7
12
  - `Proportional State Flow Guidance`: Advances the exact State Flow pin to `0.16.0`, adding the focused operational Skill, compacting memory curation guidance, and returning bounded reactive diagnostics for missing paths with durable references.
package/README.md CHANGED
@@ -14,7 +14,7 @@ Package links lead to the owning repositories for usage, documentation, issues,
14
14
  | [`@llblab/pi-clean-room`](https://github.com/llblab/pi-clean-room) | `0.1.1` | Isolated nested Pi TUI with explicitly selected extensions |
15
15
  | [`@llblab/pi-codex-usage`](https://github.com/llblab/pi-codex-usage) | `0.10.0` | Compact Codex/Spark subscription-limit and Business credit-usage status |
16
16
  | [`@llblab/pi-grow-loop`](https://github.com/llblab/pi-grow-loop) | `0.8.1` | Visible continuation scheduling and bounded worker Skills |
17
- | [`@llblab/pi-state-flow`](https://github.com/llblab/pi-state-flow) | `0.16.0` | Incremental scoped state/context/memory compiler with proportional operational guidance, intentional agency, reactive dangling-reference diagnostics, compiled runtime delivery, safe compaction, and exact publication |
17
+ | [`@llblab/pi-state-flow`](https://github.com/llblab/pi-state-flow) | `0.16.2` | Incremental scoped state/context/memory compiler with proportional operational guidance, intentional agency, reactive dangling-reference diagnostics, compiled runtime delivery, safe compaction, and exact publication |
18
18
  | [`@llblab/pi-telegram`](https://github.com/llblab/pi-telegram) | `0.49.0` | Telegram companion with native fresh-session replacement, adaptive Thread continuity, exact queues, files, voice, controls, and Generative Apps guidance |
19
19
  | [`@llblab/skills`](https://github.com/llblab/skills) | `1.15.0` | Portable workflows for engineering, review, design, context maintenance, and other focused tasks |
20
20
 
@@ -4,6 +4,14 @@
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.16.2: Passive first-CWD memory hotfix
8
+
9
+ - `Passive first-CWD memory`: Treats global-only storage as a valid passive-memory state before the current CWD has ever materialized, projecting an empty CWD overlay instead of warning that shared storage is incomplete; CWD-without-global storage still fails closed.
10
+
11
+ ## 0.16.1: Resumed activation hotfix
12
+
13
+ - `Resumed activation`: Reasserts the selected session stream as a complete semantic cohort when `/state-flow-start` enables a resumed branch, so extension upgrades cannot misclassify retained session state as an omitted write while shared scopes still reconcile against their live owners.
14
+
7
15
  ## 0.16.0: Proportional State Flow guidance
8
16
 
9
17
  - `Operational Skill`: Adds the packaged `state-flow-guide` as an on-demand reference for concrete read, patch, inheritance, acquisition, finalization, and recovery problems without triggering memory audits or unsolicited cleanup.
@@ -757,8 +757,11 @@ export default function stateFlowExtension(pi, options = {}) {
757
757
  snapshot.meta.remotePublication = serializeRemotePublicationPolicyDocument(resolveRemotePublicationPolicy(existingBranch ? undefined : config.remotePublication, { legacyRuntime: existingBranch }));
758
758
  }
759
759
  branchHasSnapshot = true;
760
+ // Activation reasserts the selected session stream as a complete cohort. A resumed
761
+ // branch may have no reusable temporal revision after an extension upgrade; a
762
+ // runtime-only write would then reject its selected session as an omitted change.
760
763
  const publication = runtime.view
761
- ? runtime.promote(snapshot) ?? runtime.publish(snapshot)
764
+ ? runtime.promote(snapshot) ?? runtime.publish(snapshot, true)
762
765
  : runtime.initialize(snapshot, true, undefined, branchStartsWithoutRuntime);
763
766
  recordPolicyPublication(publication, ctx);
764
767
  installScopeStates();
@@ -110,11 +110,12 @@ export class TemporalRuntime {
110
110
  }));
111
111
  if (!shared.global && !shared.cwd)
112
112
  return false;
113
- if (!shared.global || !shared.cwd)
114
- throw new Error("Incomplete passive State Flow shared storage");
113
+ if (!shared.global)
114
+ throw new Error("Incomplete passive State Flow shared storage: CWD state exists without global state");
115
115
  const fresh = createTemporalState({ global: emptyState(), cwd: emptyState(), session: emptyState() }, randomUUID());
116
116
  const basis = backend === "git" ? base.head ?? "unborn" : "files";
117
- this.view = adoptTemporalStreams({ global: shared.global, cwd: shared.cwd, session: fresh.scopes.session }, `passive:${basis}:${randomUUID()}`);
117
+ // Global memory is valid before this CWD has ever materialized its own scope.
118
+ this.view = adoptTemporalStreams({ global: shared.global, cwd: shared.cwd ?? fresh.scopes.cwd, session: fresh.scopes.session }, `passive:${basis}:${randomUUID()}`);
118
119
  this.base = base;
119
120
  this.backend = backend;
120
121
  this.provenanceByScope = {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llblab/pi-state-flow",
3
- "version": "0.16.0",
3
+ "version": "0.16.2",
4
4
  "private": false,
5
5
  "description": "Incremental scoped state/context/memory compiler for Pi, inspired by SKILL.state",
6
6
  "keywords": [
@@ -782,8 +782,11 @@ export default function stateFlowExtension(pi: ExtensionAPI, options: StateFlowE
782
782
  );
783
783
  }
784
784
  branchHasSnapshot = true;
785
+ // Activation reasserts the selected session stream as a complete cohort. A resumed
786
+ // branch may have no reusable temporal revision after an extension upgrade; a
787
+ // runtime-only write would then reject its selected session as an omitted change.
785
788
  const publication = runtime.view
786
- ? runtime.promote(snapshot) ?? runtime.publish(snapshot)
789
+ ? runtime.promote(snapshot) ?? runtime.publish(snapshot, true)
787
790
  : runtime.initialize(snapshot, true, undefined, branchStartsWithoutRuntime);
788
791
  recordPolicyPublication(publication, ctx);
789
792
  installScopeStates();
@@ -128,10 +128,11 @@ export class TemporalRuntime {
128
128
  scope === "cwd" ? this.cwd : undefined, files.get(paths.meta))];
129
129
  })) as Record<(typeof SHARED_SCOPES)[number], ScopeStream | undefined>;
130
130
  if (!shared.global && !shared.cwd) return false;
131
- if (!shared.global || !shared.cwd) throw new Error("Incomplete passive State Flow shared storage");
131
+ if (!shared.global) throw new Error("Incomplete passive State Flow shared storage: CWD state exists without global state");
132
132
  const fresh = createTemporalState({ global: emptyState(), cwd: emptyState(), session: emptyState() }, randomUUID());
133
133
  const basis = backend === "git" ? (base as TemporalGitBase).head ?? "unborn" : "files";
134
- this.view = adoptTemporalStreams({ global: shared.global, cwd: shared.cwd, session: fresh.scopes.session }, `passive:${basis}:${randomUUID()}`);
134
+ // Global memory is valid before this CWD has ever materialized its own scope.
135
+ this.view = adoptTemporalStreams({ global: shared.global, cwd: shared.cwd ?? fresh.scopes.cwd, session: fresh.scopes.session }, `passive:${basis}:${randomUUID()}`);
135
136
  this.base = base;
136
137
  this.backend = backend;
137
138
  this.provenanceByScope = {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llblab/pi-state-flow",
3
- "version": "0.16.0",
3
+ "version": "0.16.2",
4
4
  "private": false,
5
5
  "description": "Incremental scoped state/context/memory compiler for Pi, inspired by SKILL.state",
6
6
  "keywords": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llblab/pi-kit",
3
- "version": "0.17.0",
3
+ "version": "0.17.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -44,7 +44,7 @@
44
44
  "@llblab/pi-clean-room": "0.1.1",
45
45
  "@llblab/pi-codex-usage": "0.10.0",
46
46
  "@llblab/pi-grow-loop": "0.8.1",
47
- "@llblab/pi-state-flow": "0.16.0",
47
+ "@llblab/pi-state-flow": "0.16.2",
48
48
  "@llblab/pi-telegram": "0.49.0",
49
49
  "@llblab/skills": "1.15.0"
50
50
  },