instar 1.3.996 → 1.3.998

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":"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"}
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.998",
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:59:39.801Z",
5
+ "instarVersion": "1.3.998",
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,63 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ `tests/unit/agent-registry.test.ts` and `tests/unit/builtin-manifest.test.ts` were removed from
9
+ `FLAKY_TESTS` in `vitest.push.config.ts`, so both run in the push/CI unit gate again. The surrounding
10
+ comment now records the measurements and the falsified hypothesis rather than a bare heading.
11
+
12
+ Neither test is flaky. Both arrived in `f193df789` ("exclude pre-existing flaky tests from push
13
+ gate") — a bulk exclusion, not an individual diagnosis — and sat under a
14
+ "Environment-dependent / non-deterministic" heading that was thereafter read as a finding about each
15
+ one.
16
+
17
+ ## What to Tell Your User
18
+
19
+ None — internal change (no user-facing surface).
20
+
21
+ ## Summary of New Capabilities
22
+
23
+ None — internal change (no user-facing surface).
24
+
25
+ ## Evidence
26
+
27
+ Measured on current `main`, three consecutive runs each:
28
+
29
+ ```
30
+ agent-registry.test.ts → 42 passed | 42 passed | 42 passed
31
+ builtin-manifest.test.ts → 9 passed | 9 passed | 9 passed
32
+ ```
33
+
34
+ The one concrete environmental hypothesis was tested and falsified. `builtin-manifest.test.ts` reads
35
+ `src/data/builtin-manifest.json`, a generated and gitignored artifact that a job which never builds
36
+ would not have. Deleting the file and re-running:
37
+
38
+ ```
39
+ Tests 9 passed (9)
40
+ ```
41
+
42
+ It still passes because the test's own `beforeAll` regenerates it via
43
+ `scripts/generate-builtin-manifest.cjs` — it was already self-sufficient by design.
44
+
45
+ After the change, verified by parsing the resolved `FLAKY_TESTS` array rather than assuming the edit
46
+ took: both paths report `NO LONGER EXCLUDED`, 92 entries remain. Both tests run green together
47
+ (`Test Files 2 passed (2) · Tests 51 passed (51)`); `tsc --noEmit` exit 0.
48
+
49
+ ## Known limits
50
+
51
+ The remaining 92 entries are untouched and unexamined. Several — the supertest/port-collision group
52
+ especially — are plausibly genuinely environment-bound, and emptying the list wholesale would repeat
53
+ the bulk move that caused this. Local determinism is also not proof of CI determinism: if either test
54
+ fails in CI, that is a real finding to diagnose, not a reason to re-park it.
55
+
56
+ ## Why the comment is verbose
57
+
58
+ The note two entries below already described this same mistake: two other tests were re-armed on
59
+ 2026-06-05 from the same heading, with the observation that the label had been wrong and that both
60
+ had rotted while parked. The diagnosis, the precedent and the warning were already in the file,
61
+ three lines above two more mislabelled tests. The replacement comment therefore carries the
62
+ measurements and the falsified theory, so the next person reaching for that label has to argue with
63
+ evidence instead of reapplying a heading.
@@ -0,0 +1,73 @@
1
+ # Side-effects review — re-arm two parked tests
2
+
3
+ **Change:** remove `tests/unit/agent-registry.test.ts` and `tests/unit/builtin-manifest.test.ts` from
4
+ `FLAKY_TESTS` in `vitest.push.config.ts`, and replace the surrounding comment with the measurements
5
+ and the falsified hypothesis.
6
+
7
+ **Decision point touched?** No new decision point. This *restores* an existing one: two guards that
8
+ were excluded from the CI gate now participate in it again. No runtime code changes; the diff is
9
+ config + comment only.
10
+
11
+ ---
12
+
13
+ ## 1. Over-block
14
+
15
+ Re-arming can only make the gate stricter, and that is the intent. The over-block risk is that a test
16
+ fails in CI for an environmental reason that does not exist locally — in which case CI turns red on
17
+ work unrelated to the failure, and the author is blocked by something they did not cause.
18
+
19
+ Mitigated by measurement rather than hope: both were run three consecutive times on current `main`
20
+ (42/42/42 and 9/9/9), and the one specific environmental hypothesis available —
21
+ `builtin-manifest.test.ts` depending on the generated, gitignored `src/data/builtin-manifest.json` —
22
+ was tested by deleting the file. The test still passed 9/9 because its `beforeAll` regenerates it.
23
+
24
+ Residual risk is real but bounded: local determinism is not proof of CI determinism. If either fails
25
+ in CI, the correct response is to diagnose it, not to re-park it. Re-parking without a diagnosis is
26
+ the exact move that created this situation.
27
+
28
+ ## 2. Under-block
29
+
30
+ This change does not attempt to audit the rest of `FLAKY_TESTS` (92 entries remain). Several — the
31
+ supertest/port-collision group in particular — are plausibly genuinely environment-bound, and
32
+ emptying the list wholesale would be the same bulk move that caused the problem, run in reverse. So
33
+ the class is knowingly only partly addressed here: two members verified and fixed, the remainder
34
+ untouched and unexamined. Stated rather than implied.
35
+
36
+ ## 3. Level-of-abstraction fit
37
+
38
+ Correct layer. The mislabel lives in the exclusion list, so the fix belongs in the exclusion list.
39
+ A deeper fix — something that would *prevent* a bulk exclusion from being read later as a per-test
40
+ finding — would need a mechanism requiring evidence at the point of exclusion (e.g. a required
41
+ measurement note per entry). That is a larger design change and is deliberately not attempted here.
42
+
43
+ ## 4. Signal vs authority compliance
44
+
45
+ Unchanged. The tests are signals that CI (the authority) consumes. Nothing here gives any check new
46
+ blocking power it did not already have by design; it restores participation that was removed.
47
+
48
+ ## 5. Interactions
49
+
50
+ The two files now execute inside the push/CI unit run, adding their runtime to that job and their
51
+ failures to its verdict. Both are fast unit tests. `builtin-manifest.test.ts` shells out to
52
+ `scripts/generate-builtin-manifest.cjs` in `beforeAll` if the generated file is missing, which writes
53
+ `src/data/builtin-manifest.json` — a gitignored artifact that `npm run build` writes anyway. It is
54
+ the only test that reads that file, so no cross-test read/write race is introduced. Worth naming
55
+ explicitly because a test that writes into the repo during a sharded run is the shape that *would*
56
+ cause genuine flakiness if another test ever read the same file.
57
+
58
+ ## 6. External surfaces
59
+
60
+ None. No endpoint, no config key, no agent-visible behaviour, no user-visible behaviour. The only
61
+ observer of this change is CI.
62
+
63
+ ## 7. Multi-machine posture
64
+
65
+ Not applicable — this is repo-level CI configuration, identical on every checkout, with no runtime
66
+ state, no per-machine data, and nothing to replicate or proxy.
67
+
68
+ ## 8. Rollback cost
69
+
70
+ Trivial and immediate: re-add the two strings to `FLAKY_TESTS`. No data migration, no release
71
+ coupling, no agent state to repair. If a rollback happens, the comment block should record *why* the
72
+ test actually failed — otherwise the rollback recreates the original defect, which was an exclusion
73
+ carrying no evidence.
@@ -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.