instar 1.3.996 → 1.3.997

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 +1 @@
1
- {"version":3,"file":"instarChannels.d.ts","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,sBAAsB,CAAC;AAElF,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,WAAW,EAAE,MAAM;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,8FAA8F;IAC9F,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F;AAeD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,EAAE,CAuErF;AAED,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,QAA0B,CAAC"}
1
+ {"version":3,"file":"instarChannels.d.ts","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,sBAAsB,CAAC;AAElF,kGAAkG;AAClG,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,WAAW,EAAE,MAAM;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,8FAA8F;IAC9F,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F;AAeD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,EAAE,CA0ErF;AAED,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,QAA0B,CAAC"}
@@ -25,18 +25,21 @@ export function buildChannelDefinitions(ctx) {
25
25
  audience: 'peer',
26
26
  purpose: 'Direct agent-to-agent messaging over the shared relay.',
27
27
  whenPreferred: 'The default for peer work: fastest, and invisible to the operator, so it does not spend their attention.',
28
- cost: 'Requires the relay to be connected. Invisible when it fails, which is its main hazard.',
28
+ cost: 'Requires the server process relay client to be connected, and another process can hold a different relay state. Invisible when it fails, which is its main hazard.',
29
29
  probe: async () => {
30
30
  const s = ctx.relayStatus();
31
31
  if (s === null) {
32
32
  return { state: 'not-configured', direction: 'none', detail: 'threadline layer was never constructed on this agent' };
33
33
  }
34
34
  if (s.ready && s.connected) {
35
- return { state: 'working', direction: 'bidirectional', detail: 'relay reports ready and connected' };
35
+ return {
36
+ state: 'working', direction: 'bidirectional',
37
+ detail: 'server process relay client reports ready and connected; NOTE this confirms the server client, not another process client such as the MCP tool path, and not that any given send will land',
38
+ };
36
39
  }
37
40
  return {
38
41
  state: 'broken', direction: 'none',
39
- detail: `relay reports ready=${s.ready}, connected=${s.connected}; a send would be refused`,
42
+ detail: `server process relay client reports ready=${s.ready}, connected=${s.connected}; a server-process send would be refused, while another process client such as the MCP tool path has its own state`,
40
43
  };
41
44
  },
42
45
  },
@@ -1 +1 @@
1
- {"version":3,"file":"instarChannels.js","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH;;;;;;;;GAQG;AACH,MAAM,uBAAuB,GAC3B,8FAA8F;IAC9F,qCAAqC,CAAC;AAExC,MAAM,UAAU,uBAAuB,CAAC,GAAwB;IAC9D,OAAO;QACL;YACE,EAAE,EAAE,kBAAkB;YACtB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,wDAAwD;YACjE,aAAa,EAAE,0GAA0G;YACzH,IAAI,EAAE,wFAAwF;YAC9F,KAAK,EAAE,KAAK,IAAiC,EAAE;gBAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBACf,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,sDAAsD,EAAE,CAAC;gBACxH,CAAC;gBACD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;oBAC3B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;gBACvG,CAAC;gBACD,OAAO;oBACL,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;oBAClC,MAAM,EAAE,uBAAuB,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,SAAS,2BAA2B;iBAC5F,CAAC;YACJ,CAAC;SACF;QACD;YACE,EAAE,EAAE,cAAc;YAClB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,oHAAoH;YAC7H,aAAa,EAAE,+HAA+H;YAC9I,IAAI,EAAE,mEAAmE;YACzE,4FAA4F;YAC5F,KAAK,EAAE,KAAK,IAAiC,EAAE,CAC7C,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;SACxF;QACD;YACE,EAAE,EAAE,YAAY;YAChB,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,mFAAmF;YAC5F,aAAa,EAAE,4EAA4E;YAC3F,IAAI,EAAE,iFAAiF;YACvF,KAAK,EAAE,KAAK,IAAiC,EAAE;gBAC7C,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBAC5B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC;gBAC7F,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;oBAChC,OAAO;wBACL,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;wBAClC,MAAM,EAAE,8GAA8G;qBACvH,CAAC;gBACJ,CAAC;gBACD,0FAA0F;gBAC1F,OAAO;oBACL,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe;oBAC5C,MAAM,EAAE,4GAA4G;iBACrH,CAAC;YACJ,CAAC;SACF;QACD;YACE,EAAE,EAAE,WAAW;YACf,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,2DAA2D;YACpE,aAAa,EAAE,gEAAgE;YAC/E,IAAI,EAAE,uEAAuE;YAC7E,KAAK,EAAE,KAAK,IAAiC,EAAE;gBAC7C,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,CAAC,SAAS;oBAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClF,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACtB,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;gBACnF,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YAC5E,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC"}
1
+ {"version":3,"file":"instarChannels.js","sourceRoot":"","sources":["../../src/core/instarChannels.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.996",
3
+ "version": "1.3.997",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-07-27T07:22:09.595Z",
5
- "instarVersion": "1.3.996",
4
+ "generatedAt": "2026-07-27T07:30:21.063Z",
5
+ "instarVersion": "1.3.997",
6
6
  "entryCount": 202,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -0,0 +1,61 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ The `threadline-relay` row in the channel registry reported `relay reports ready and connected`
9
+ without naming the subject of that verdict. It reads `ctx.threadlineRelayClient` — the **server
10
+ process's** relay client. The MCP tool path runs in a different process holding its own client, so
11
+ `GET /channels` could report `working` while a send from the MCP path failed, and both readings were
12
+ true at the same time.
13
+
14
+ The verdicts are unchanged. Only the claims are scoped, following the `mutual-ssh` precedent already
15
+ in the same file. The working branch now reports the server-process client explicitly and states that
16
+ this is neither another process's client nor a guarantee that a given send will land; the broken
17
+ branch is scoped the same way. `cost` is updated because it is user-visible registry prose, while
18
+ `whenPreferred` is left alone because it describes channel preference rather than the runtime client
19
+ whose state was measured.
20
+
21
+ ## What to Tell Your User
22
+
23
+ When your agent tells you a channel is working, it now tells you which part of itself it checked.
24
+
25
+ Your agent runs in more than one process, and they can hold different connection states at the same
26
+ time. Previously it could report that the agent-to-agent relay was connected while a message sent by
27
+ a different part of the agent quietly failed — and both statements were true, which is what made it
28
+ confusing. The report now names what it actually measured, so a green reading cannot be misread as a
29
+ promise about a path it never checked.
30
+
31
+ ## Summary of New Capabilities
32
+
33
+ No new endpoint, command, or configuration. The threadline relay row in the channel registry now
34
+ names the process whose relay state it reports, in both its working and its broken form.
35
+
36
+ ## Evidence
37
+
38
+ Restoring the original unscoped claim fails the new test for the right reason:
39
+
40
+ ```
41
+ × threadline-relay working detail scopes the verdict to the server-process relay client
42
+ → expected 'relay reports ready and connected' to contain 'server process relay client'
43
+ Tests 1 failed | 7 passed (8)
44
+ ```
45
+
46
+ Removing the `mutual-ssh` caveat likewise fails, confirming the precedent test still bites:
47
+
48
+ ```
49
+ × mutual-ssh reports construction WITHOUT claiming a completed round-trip
50
+ → expected 'runtime constructed and listening' to contain 'not a completed round-trip'
51
+ Tests 1 failed | 7 passed (8)
52
+ ```
53
+
54
+ Both restored byte-identical. Green: `Test Files 3 passed (3) · Tests 36 passed (36)` across
55
+ `channel-registry-claims`, `channel-registry` and `user-channel-liveness`; `tsc --noEmit` exit 0.
56
+
57
+ ## Known limits
58
+
59
+ The row still reports a single measurement — the server process's relay client — and now says so.
60
+ It does not probe the MCP tool's client, so it cannot tell you that path's state; it only stops
61
+ implying it. Nor does a connected reading promise that any particular send will land.
@@ -0,0 +1,119 @@
1
+ # Side-Effects Review - Relay Scope Detail
2
+
3
+ **Version / slug:** `relay-scope-detail`
4
+ **Date:** `2026-07-26`
5
+ **Author:** `Codex`
6
+ **Second-pass reviewer:** `not required`
7
+
8
+ ## Summary of the change
9
+
10
+ This change narrows the human-readable claim made by `src/core/instarChannels.ts` for the `threadline-relay` channel. The runtime state is unchanged: a connected server-process relay client still reports `working`, and a disconnected server-process relay client still reports `broken`. The detail text now names the measured subject as the server-process relay client and states that another process, notably the MCP tool path, owns its own relay client state. `tests/unit/channel-registry-claims.test.ts` adds real-builder coverage for that scope and pins the existing `mutual-ssh` caveat as the precedent.
11
+
12
+ ## Decision-point inventory
13
+
14
+ - `src/core/instarChannels.ts` `threadline-relay` probe detail - modify - the registry detail now names the server-process relay client as the subject of both working and broken readings.
15
+ - `src/core/instarChannels.ts` `threadline-relay` cost text - modify - the static cost text now notes that another process can hold a different relay state.
16
+ - `tests/unit/channel-registry-claims.test.ts` relay-scope assertion - add - the test verifies the real resolved channel output names the server process, MCP tool path distinction, and no send-delivery promise.
17
+ - `tests/unit/channel-registry-claims.test.ts` mutual-SSH exact assertion - modify - the test now pins the existing caveat exactly so the precedent cannot be weakened silently.
18
+
19
+ ---
20
+
21
+ ## 1. Over-block
22
+
23
+ No block/allow surface - over-block not applicable. The change does not reject inputs, deny operations, alter admission, or change any runtime state transition.
24
+
25
+ ---
26
+
27
+ ## 2. Under-block
28
+
29
+ No block/allow surface - under-block not applicable. The remaining failure mode is informational: a caller could still ignore the scoped detail and treat `working` alone as a send guarantee. That is outside this small wording fix; the row now provides the precise caveat needed for callers that read details.
30
+
31
+ ---
32
+
33
+ ## 3. Level-of-abstraction fit
34
+
35
+ This is at the registry-claim layer. The registry already owns the prose that explains what each probe measured, and the defect was in that prose rather than in the relay client, server route, or MCP implementation. The change does not add a detector or authority; it makes the existing low-level signal name its scope honestly.
36
+
37
+ ---
38
+
39
+ ## 4. Signal vs authority compliance
40
+
41
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
42
+
43
+ - [ ] No - this change produces a signal consumed by an existing smart gate.
44
+ - [x] No - this change has no block/allow surface.
45
+ - [ ] Yes - but the logic is a smart gate with full conversational context (LLM-backed with recent history or equivalent).
46
+ - [ ] Yes, with brittle logic - STOP. Reshape the design.
47
+
48
+ This change has no blocking authority. It changes explanatory text attached to an already-existing channel probe result.
49
+
50
+ ---
51
+
52
+ ## 4b. Judgment-point check (Judgment Within Floors standard)
53
+
54
+ No new static heuristic at a competing-signals decision point. The change does not decide between conflicting live signals; it labels one signal's subject more precisely.
55
+
56
+ ---
57
+
58
+ ## 5. Interactions
59
+
60
+ **Shadowing:** No new check runs before or after another check. Existing callers still receive the same channel ids, states, and directions.
61
+
62
+ **Double-fire:** No new event, retry, notification, send, or recovery path is introduced.
63
+
64
+ **Races:** No shared mutable state is added. The probe still reads the injected `relayStatus()` function exactly once per resolution.
65
+
66
+ **Feedback loops:** No feedback loop is changed. The registry output may influence human or agent choice of channel, but this patch only clarifies what the output means.
67
+
68
+ ---
69
+
70
+ ## 6. External surfaces
71
+
72
+ `GET /channels` and any internal consumer of the channel registry will show clearer prose for `threadline-relay`. Other agents and users may see the updated detail text after upgrade. No external systems are called. No persistent state, database row, ledger, or memory file is changed. No operator-facing action is added; the dashboard/API display remains a read-only informational surface for this row.
73
+
74
+ ---
75
+
76
+ ## 6b. Operator-surface quality (Operator-Surface Quality standard)
77
+
78
+ No operator surface - not applicable. This change touches no dashboard renderer, approval page, grant/revoke form, or secret-drop form.
79
+
80
+ ---
81
+
82
+ ## 7. Multi-machine posture (Cross-Machine Coherence)
83
+
84
+ Machine-local by design: relay client connection state is a per-process and per-machine runtime truth. The registry should report exactly the process it measured rather than pretending the value replicates across machines or sibling processes. The change emits no user-facing notices, holds no durable state, and generates no URLs.
85
+
86
+ ---
87
+
88
+ ## 8. Rollback cost
89
+
90
+ Hot-fix release: revert the text and test changes, then ship the next patch. There is no data migration, no agent state repair, and no persistent cleanup. During rollback propagation, users would only lose the more precise registry wording.
91
+
92
+ ---
93
+
94
+ ## Conclusion
95
+
96
+ The review found no side-effecting runtime behavior. The implementation keeps the existing `working` and `broken` verdicts while making their subject explicit. The only visible change is clearer registry prose, backed by unit tests that fail if the scoped relay claim or the existing mutual-SSH scope caveat is weakened.
97
+
98
+ ---
99
+
100
+ ## Second-pass review (if required)
101
+
102
+ **Reviewer:** not required
103
+ **Independent read of the artifact:** not required
104
+
105
+ Second-pass review is not required for this Tier 1 wording-and-test change.
106
+
107
+ ---
108
+
109
+ ## Evidence pointers
110
+
111
+ - `./node_modules/.bin/vitest run tests/unit/channel-registry-claims.test.ts tests/unit/user-channel-liveness.test.ts`
112
+ - Falsification restored the old relay detail and confirmed the relay-scope test failed on the missing server-process subject.
113
+ - Falsification shortened the mutual-SSH detail and confirmed the exact-precedent assertion failed.
114
+
115
+ ---
116
+
117
+ ## Class-Closure Declaration (display-only mirror)
118
+
119
+ No agent-authored-artifact defect - not applicable.