instar 1.3.802 → 1.3.803

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-07-10T10:30:16.122Z",
5
- "instarVersion": "1.3.802",
4
+ "generatedAt": "2026-07-10T20:50:06.698Z",
5
+ "instarVersion": "1.3.803",
6
6
  "entryCount": 202,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -11,7 +11,7 @@
11
11
  "domain": "identity",
12
12
  "sourcePath": "src/core/PostUpdateMigrator.ts",
13
13
  "installedPath": ".instar/hooks/instar/session-start.sh",
14
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
14
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
15
15
  "since": "2025-01-01"
16
16
  },
17
17
  "hook:dangerous-command-guard": {
@@ -20,7 +20,7 @@
20
20
  "domain": "safety",
21
21
  "sourcePath": "src/core/PostUpdateMigrator.ts",
22
22
  "installedPath": ".instar/hooks/instar/dangerous-command-guard.sh",
23
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
23
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
24
24
  "since": "2025-01-01"
25
25
  },
26
26
  "hook:grounding-before-messaging": {
@@ -29,7 +29,7 @@
29
29
  "domain": "safety",
30
30
  "sourcePath": "src/core/PostUpdateMigrator.ts",
31
31
  "installedPath": ".instar/hooks/instar/grounding-before-messaging.sh",
32
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
32
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
33
33
  "since": "2025-01-01"
34
34
  },
35
35
  "hook:compaction-recovery": {
@@ -38,7 +38,7 @@
38
38
  "domain": "identity",
39
39
  "sourcePath": "src/core/PostUpdateMigrator.ts",
40
40
  "installedPath": ".instar/hooks/instar/compaction-recovery.sh",
41
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
41
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
42
42
  "since": "2025-01-01"
43
43
  },
44
44
  "hook:external-operation-gate": {
@@ -47,7 +47,7 @@
47
47
  "domain": "safety",
48
48
  "sourcePath": "src/core/PostUpdateMigrator.ts",
49
49
  "installedPath": ".instar/hooks/instar/external-operation-gate.js",
50
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
50
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
51
51
  "since": "2025-01-01"
52
52
  },
53
53
  "hook:deferral-detector": {
@@ -56,7 +56,7 @@
56
56
  "domain": "safety",
57
57
  "sourcePath": "src/core/PostUpdateMigrator.ts",
58
58
  "installedPath": ".instar/hooks/instar/deferral-detector.js",
59
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
59
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
60
60
  "since": "2025-01-01"
61
61
  },
62
62
  "hook:self-stop-guard": {
@@ -65,7 +65,7 @@
65
65
  "domain": "coherence",
66
66
  "sourcePath": "src/core/PostUpdateMigrator.ts",
67
67
  "installedPath": ".instar/hooks/instar/self-stop-guard.js",
68
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
68
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
69
69
  "since": "2025-01-01"
70
70
  },
71
71
  "hook:post-action-reflection": {
@@ -74,7 +74,7 @@
74
74
  "domain": "evolution",
75
75
  "sourcePath": "src/core/PostUpdateMigrator.ts",
76
76
  "installedPath": ".instar/hooks/instar/post-action-reflection.js",
77
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
77
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
78
78
  "since": "2025-01-01"
79
79
  },
80
80
  "hook:external-communication-guard": {
@@ -83,7 +83,7 @@
83
83
  "domain": "safety",
84
84
  "sourcePath": "src/core/PostUpdateMigrator.ts",
85
85
  "installedPath": ".instar/hooks/instar/external-communication-guard.js",
86
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
86
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
87
87
  "since": "2025-01-01"
88
88
  },
89
89
  "hook:scope-coherence-collector": {
@@ -92,7 +92,7 @@
92
92
  "domain": "coherence",
93
93
  "sourcePath": "src/core/PostUpdateMigrator.ts",
94
94
  "installedPath": ".instar/hooks/instar/scope-coherence-collector.js",
95
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
95
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
96
96
  "since": "2025-01-01"
97
97
  },
98
98
  "hook:scope-coherence-checkpoint": {
@@ -101,7 +101,7 @@
101
101
  "domain": "coherence",
102
102
  "sourcePath": "src/core/PostUpdateMigrator.ts",
103
103
  "installedPath": ".instar/hooks/instar/scope-coherence-checkpoint.js",
104
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
104
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
105
105
  "since": "2025-01-01"
106
106
  },
107
107
  "hook:free-text-guard": {
@@ -110,7 +110,7 @@
110
110
  "domain": "safety",
111
111
  "sourcePath": "src/core/PostUpdateMigrator.ts",
112
112
  "installedPath": ".instar/hooks/instar/free-text-guard.sh",
113
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
113
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
114
114
  "since": "2025-01-01"
115
115
  },
116
116
  "hook:claim-intercept": {
@@ -119,7 +119,7 @@
119
119
  "domain": "coherence",
120
120
  "sourcePath": "src/core/PostUpdateMigrator.ts",
121
121
  "installedPath": ".instar/hooks/instar/claim-intercept.js",
122
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
122
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
123
123
  "since": "2025-01-01"
124
124
  },
125
125
  "hook:claim-intercept-response": {
@@ -128,7 +128,7 @@
128
128
  "domain": "coherence",
129
129
  "sourcePath": "src/core/PostUpdateMigrator.ts",
130
130
  "installedPath": ".instar/hooks/instar/claim-intercept-response.js",
131
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
131
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
132
132
  "since": "2025-01-01"
133
133
  },
134
134
  "hook:stop-gate-router": {
@@ -137,7 +137,7 @@
137
137
  "domain": "safety",
138
138
  "sourcePath": "src/core/PostUpdateMigrator.ts",
139
139
  "installedPath": ".instar/hooks/instar/stop-gate-router.js",
140
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
140
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
141
141
  "since": "2025-01-01"
142
142
  },
143
143
  "hook:auto-approve-permissions": {
@@ -146,7 +146,7 @@
146
146
  "domain": "safety",
147
147
  "sourcePath": "src/core/PostUpdateMigrator.ts",
148
148
  "installedPath": ".instar/hooks/instar/auto-approve-permissions.js",
149
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
149
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
150
150
  "since": "2025-01-01"
151
151
  },
152
152
  "job:health-check": {
@@ -1562,7 +1562,7 @@
1562
1562
  "type": "subsystem",
1563
1563
  "domain": "updates",
1564
1564
  "sourcePath": "src/core/PostUpdateMigrator.ts",
1565
- "contentHash": "edf52d24d575e7dd9b2f77507d8e170f328ade6f6340409a00efa92afbb53411",
1565
+ "contentHash": "713f6e606525e07399b0bb42f4d9c9e3695289e45485c4b73e9d1a8907032a9f",
1566
1566
  "since": "2025-01-01"
1567
1567
  },
1568
1568
  "subsystem:scheduler": {
@@ -928,7 +928,7 @@ ${SESSION_LISTING_HYGIENE_CLAUDEMD_SECTION(port)}
928
928
  - See current routing: \`curl -H "Authorization: Bearer $AUTH" "http://localhost:${port}/intelligence/routing"\` → \`{ defaultFramework, components: [{ component, category, framework, available }], coverage }\`. On a Codex-active agent, sentinel/gate/reflector resolve to \`codex-cli\`; \`job\` (cost-bearing background work, e.g. CartographerSweep) stays on the agent default.
929
929
  - Override in \`.instar/config.json\` → \`sessions.componentFrameworks\`, e.g. \`{ "categories": { "sentinel": "codex-cli", "gate": "codex-cli" }, "overrides": { "CoherenceReviewer": "claude-code" }, "fallback": "default" }\` — an explicitly-set block is used verbatim (the default no longer applies). Categories: \`sentinel | gate | job | reflector | other\`. Resolution: \`overrides[name] → categories[category] → default\`. Frameworks: \`claude-code | codex-cli | gemini-cli | pi-cli\`. **Rollback lever:** set \`componentFrameworks\` to \`{}\` (explicit empty) to force everything back to the default framework with no swap — today's pre-default behavior.
930
930
  - Each framework gets its own circuit breaker (a Claude trip can't pause Codex). If a routed framework's CLI is missing it degrades to the default and reports it. A gating call's failure-swap is bounded by a per-attempt timeout (default 5s, \`intelligence.swapAttemptTimeoutMs\`) so a slow provider is abandoned at the cap, not waited on in full. Routes INTERNAL component calls only — spawned interactive sessions stay governed by \`topicFrameworks\`.
931
- - **Non-gating calls also get a bounded swap now** (\`intelligence.nonGatingFailureSwap\`, default ON): a non-gating internal call (e.g. \`TopicIntentExtractor\`) that suffers an INVOCATION-level primary failure (the CLI spawn/timeout/empty-output errored with ZERO tokens) gets ONE bounded, herd-safe swap onto the next active off-Claude framework instead of hard-erroring — tighter than the gating swap: at most one step, NEVER onto \`claude-code\`/the default framework (non-gating background traffic must never herd onto the Claude tail), and NEVER on a content/parse error that already burned tokens (the caller fail-opens that). Disable with \`intelligence.nonGatingFailureSwap.enabled: false\`. Proactive: "why did my background classifier's error rate drop / does a non-gating call fall back too?" → this bounded swap. (Spec: \`docs/specs/nongating-failure-swap.md\`.)
931
+ - **Non-gating calls also get a bounded swap now** (\`intelligence.nonGatingFailureSwap\`, default ON): a non-gating internal call (e.g. \`TopicIntentExtractor\`) that suffers an INVOCATION-level primary failure (the CLI spawn/timeout/empty-output errored with ZERO tokens) gets ONE bounded, herd-safe swap onto the next active off-Claude framework instead of hard-erroring — tighter than the gating swap in reach (at most one step, NEVER onto \`claude-code\`/the default framework), but with its own longer attempt timeout (\`intelligence.nonGatingSwapTimeoutMs\`, default 15000ms) so cold-start providers can answer. Safety-gating swaps still use \`intelligence.swapAttemptTimeoutMs\` (default 5000ms). Disable with \`intelligence.nonGatingFailureSwap.enabled: false\`. Proactive: "why did my background classifier's error rate drop / does a non-gating call fall back too?" → this bounded swap. (Spec: \`docs/specs/nongating-failure-swap.md\`.)
932
932
  - **When to use** (PROACTIVE): when the user is hitting rate limits and asks how to spread load, or says "run my sentinels on Codex" / "move the background checks off Claude" → point them at \`sessions.componentFrameworks\` and \`GET /intelligence/routing\`. Restart sessions to apply (config is read into the router at the call path, but a file edit needs the server to pick it up). (Spec: \`docs/specs/per-component-framework-routing.md\`.)
933
933
 
934
934
  **Topic Profile (per-topic model, thinking, framework pins)** — Every conversation topic can carry a durable profile pinning its BASELINE model (an explicit id OR a tier — never both), thinking depth (\`off\`/\`low\`/\`medium\`/\`high\`/\`max\`), and framework (\`claude-code\`/\`codex-cli\`/…). Pins survive restarts and follow the topic. **The conversational surface is PRIMARY** (PROACTIVE — these are the triggers): when the user says "use codex here", "pin this topic to Fable", or "set high thinking on this topic", that IS the request — propose the change back in plain words, confirm, and the pin is durable from then on. NEVER instruct the user to type \`/topic\`; the \`/topic\` command exists only as a power-user convenience.
@@ -0,0 +1,24 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Non-gating provider failure-swaps now use `intelligence.nonGatingSwapTimeoutMs`, defaulting to 15000ms, instead of inheriting the global safety-gating `intelligence.swapAttemptTimeoutMs` default of 5000ms. Safety-gating swaps keep the existing 5s fail-closed bound. This lets cold-start providers such as `pi-cli` serve advisory/background swaps without making gates wait longer.
9
+
10
+ ## What to Tell Your User
11
+
12
+ Background internal LLM calls that fail over to another provider are more patient now. If a provider needs a cold start, Instar gives that non-gating swap up to 15 seconds by default, while safety gates still keep their fast 5-second timeout. You can tune the non-gating value with the intelligence non-gating swap timeout setting.
13
+
14
+ ## Summary of New Capabilities
15
+
16
+ | Capability | How to Use |
17
+ |---|---|
18
+ | Longer non-gating swap timeout | Set `intelligence.nonGatingSwapTimeoutMs` to tune how long advisory/background provider swaps can wait. |
19
+
20
+ ## Evidence
21
+
22
+ - Unit: non-gating 6s swap succeeds with a 15s cap; gating 6s swap still times out at 5s; ConfigDefaults seeds the new value without overwriting operator overrides.
23
+ - Integration: production-shaped router wiring passes the 15s non-gating cap and serves a 6s target.
24
+ - E2E: AgentServer lifecycle wiring passes `timeoutMs: 15000` through the live non-gating swap path.
@@ -0,0 +1,31 @@
1
+ # Side-Effects Review — v1.3.802 (version-named pairing)
2
+
3
+ This is the version-named pairing for the v1.3.802 release, completing the
4
+ rename step the release cut is expected to perform alongside the
5
+ `NEXT.md → 1.3.802.md` guide rename (see `scripts/pre-push-gate.js` check 5:
6
+ "the fragment/NEXT.md -> <version>.md rename pairs with an artifact rename").
7
+ The release flow did not perform the artifact half of the pairing, which makes
8
+ check 5 false-positive on every docs-only push from a clean post-release tree
9
+ — the same recurrence previously repaired for v1.3.492
10
+ (`upgrades/side-effects/1.3.492.md`).
11
+
12
+ The actual side-effects reviews for everything shipped in the
13
+ v1.3.800–v1.3.802 window are:
14
+
15
+ - `upgrades/side-effects/attention-single-topic-routing.md`
16
+ (#1417, v1.3.800 — single-alerts-topic routing; every alert lands in the
17
+ ONE Attention hub by default)
18
+ - `upgrades/side-effects/self-action-governor.md`
19
+ (#1418, v1.3.801 — SelfActionGovernor unified self-action backpressure
20
+ chokepoint, observe-only fleet-wide)
21
+ - `upgrades/side-effects/session-listing-hygiene.md`
22
+ (#1419, v1.3.802 — bounded finished-session retention, active-by-default
23
+ `GET /sessions`, genuine cross-machine duplicate flag)
24
+
25
+ Those artifacts are left in place under their slug names because each release
26
+ guide's Evidence section cites them by those paths. This file exists so the
27
+ repo state matches the gate's documented post-release expectation. The
28
+ underlying gap (release automation never renames artifacts) remains logged in
29
+ the framework-issues ledger under dedupKey
30
+ `pre-push-gate-versioned-artifact-fallback`; this is its second observed
31
+ recurrence after v1.3.492.
@@ -0,0 +1,103 @@
1
+ # Side-Effects Review — Non-gating swap timeout
2
+
3
+ **Version / slug:** `non-gating-swap-timeout`
4
+ **Date:** `2026-07-10`
5
+ **Author:** `instar-codey`
6
+ **Second-pass reviewer:** `not required`
7
+
8
+ ## Summary of the change
9
+
10
+ `src/core/IntelligenceRouter.ts` now resolves non-gating failure-swap attempt caps from `nonGatingSwapTimeoutMs` instead of the global safety-gating `swapAttemptTimeoutMs`. `src/commands/server.ts` wires the new value from `config.intelligence?.nonGatingSwapTimeoutMs ?? 15000`, and `src/config/ConfigDefaults.ts` seeds that default through normal add-missing init/migration. The associated type, generated awareness text, and unit/integration/e2e tests were updated.
11
+
12
+ ## Decision-point inventory
13
+
14
+ - `IntelligenceRouter.evaluate` gating/deferrable failure-swap loop — pass-through — still uses `swapAttemptTimeoutMs` and is intentionally unchanged.
15
+ - `IntelligenceRouter.tryNonGatingSwap` — modified — chooses the timeout cap for non-gating swap attempts.
16
+ - `ConfigDefaults.applyDefaults` migration path — pass-through — add-missing default seeding for the new config field.
17
+
18
+ ---
19
+
20
+ ## 1. Over-block
21
+
22
+ No new block/allow surface. This change does not reject calls, messages, jobs, or operator actions. It lengthens only the timeout for non-gating swap attempts, so the over-block risk is not a false rejection; the relevant risk is extra wait time on advisory/background calls.
23
+
24
+ ---
25
+
26
+ ## 2. Under-block
27
+
28
+ This does not change safety-gating fail-closed behavior. A non-gating call can now wait up to 15s for a cold-start provider before falling through, so a genuinely stuck non-gating provider may occupy its attempt for longer than before. The attempt remains bounded, still respects maxAttempts, still excludes Claude/default targets, and still reports timeout degradation.
29
+
30
+ ---
31
+
32
+ ## 3. Level-of-abstraction fit
33
+
34
+ The router is the right layer because it already owns provider failure-swap attempt timing and timeout propagation to providers. ConfigDefaults is the right layer for the default because the task requires existing agents to receive the knob through add-missing migration while preserving operator overrides.
35
+
36
+ ---
37
+
38
+ ## 4. Signal vs authority compliance
39
+
40
+ Required reference: [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
41
+
42
+ - [x] No — this change has no block/allow surface.
43
+
44
+ This is a timeout policy split inside an existing retry mechanism. It does not add a detector or an authority, and it does not make a semantic decision about user intent or message meaning.
45
+
46
+ ---
47
+
48
+ ## 5. Interactions
49
+
50
+ - **Shadowing:** The non-gating helper now has its own global fallback cap. Per-target framework caps still shadow it when configured for a target, preserving the existing specificity order.
51
+ - **Double-fire:** No new reporter path is added. Existing timeout degradation reasons continue to fire when an attempt times out.
52
+ - **Races:** No shared mutable state is added. The cap is read from router options and applied per call.
53
+ - **Feedback loops:** Longer non-gating waits can reduce heuristic fallback churn but do not change retry counts, scheduler cadence, or provider circuit-breaker rules.
54
+
55
+ ---
56
+
57
+ ## 6. External surfaces
58
+
59
+ Operators get a new config knob: `intelligence.nonGatingSwapTimeoutMs`, default 15000. Existing config migration adds the missing value and preserves explicit overrides. Existing agent awareness text now mentions the knob. No Telegram, Slack, GitHub, Cloudflare, dashboard UI, persistent database schema, or URL surface changes. No operator-facing action is added.
60
+
61
+ ---
62
+
63
+ ## 6b. Operator-surface quality
64
+
65
+ No operator surface — not applicable.
66
+
67
+ ---
68
+
69
+ ## 7. Multi-machine posture
70
+
71
+ Machine-local by design. This is per-agent runtime configuration read from that agent's local `.instar/config.json`. On multi-machine setups, each machine may tune the timeout to its own provider startup behavior. It emits no user-facing notices directly, holds no new durable state beyond config defaults, and generates no URLs.
72
+
73
+ ---
74
+
75
+ ## 8. Rollback cost
76
+
77
+ Hot-fix release: revert the router option, config default, server wiring, awareness text, and tests. No data migration or agent state repair is needed. Existing configs that received `nonGatingSwapTimeoutMs: 15000` would carry an unused field after rollback, which is harmless.
78
+
79
+ ---
80
+
81
+ ## Conclusion
82
+
83
+ Clear to ship. The change fixes the observed cold-start timeout without slowing safety gates. The main side effect is intentional: non-gating internal calls may wait longer before falling back to heuristics, but the wait remains bounded and scoped away from the gating fail-closed path.
84
+
85
+ ---
86
+
87
+ ## Second-pass review (if required)
88
+
89
+ **Reviewer:** not required
90
+ **Independent read of the artifact:** not required
91
+
92
+ ---
93
+
94
+ ## Evidence pointers
95
+
96
+ - `instar dev:claim-check src/core/IntelligenceRouter.ts src/core/types.ts src/config/ConfigDefaults.ts src/commands/server.ts src/core/PostUpdateMigrator.ts src/scaffold/templates.ts`
97
+ - `npm test -- tests/unit/nongating-failure-swap.test.ts tests/unit/ConfigDefaults.test.ts tests/unit/PostUpdateMigrator-nonGatingFailureSwap.test.ts tests/integration/nongating-failure-swap-routing.test.ts tests/e2e/nongating-failure-swap-lifecycle.test.ts`
98
+
99
+ ---
100
+
101
+ ## Class-Closure Declaration (display-only mirror)
102
+
103
+ No agent-authored-artifact defect and no self-triggered controller addition — not applicable.