@sjawhar/claude-envoy 1.5.0 → 1.6.0

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.
@@ -2,5 +2,5 @@
2
2
  "name": "claude-envoy",
3
3
  "description": "Deliver Envoy events as Claude Code channel notifications and expose Envoy MCP tools.",
4
4
  "mcpServers": "./.mcp.json",
5
- "version": "1.5.0"
5
+ "version": "1.6.0"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-envoy",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Deliver Envoy events as Claude Code channel notifications and expose Envoy MCP tools.",
5
5
  "mcpServers": {}
6
6
  }
@@ -55082,7 +55082,7 @@ var import_nats2 = __toESM(require_mod4(), 1);
55082
55082
 
55083
55083
  // package.json
55084
55084
  var name = "@sjawhar/claude-envoy";
55085
- var version2 = "1.5.0";
55085
+ var version2 = "1.6.0";
55086
55086
  var legion = {
55087
55087
  daemonApiVersion: 51
55088
55088
  };
@@ -611,15 +611,16 @@ something to count.
611
611
  gVisor follows with no error. So code that walks a path one component at a time and opens each
612
612
  with `O_NOFOLLOW` is defeated there while every leaf check still passes, and its tests stay
613
613
  green on a developer's kernel. A whole block of such tests failing in a pod is that one
614
- property of the environment, not one defect per test. The fix shape holds on both kernels: the
615
- walk cannot trust the flag, so `lstat` the component, `fstat` the descriptor it opened, compare
616
- `st_dev` and `st_ino`, and refuse when they differ or when the `lstat` says `S_IFLNK`.
617
- `openat2` is not the alternative there: a lane measured it returning `ENOSYS` under gVisor for
618
- every flag combination it tried, so the `lstat` and `fstat` comparison above is the portable
619
- check rather than a fallback. The question is not which tool to use but whether anything you
620
- run calls `openat2`, which you can read off the binary (two builds of one tool reporting an
621
- identical `--version` differed here, and only the package version and the checksum told them
622
- apart):
614
+ property of the environment, not one defect per test. The fix shape holds on both kernels:
615
+ the walk cannot trust `O_DIRECTORY|O_NOFOLLOW` there, so it opens each component with
616
+ `O_PATH|O_NOFOLLOW|O_CLOEXEC`, which opens the entry itself on both kernels, and reads the
617
+ kind from fstat of that handle. The repository's own instance is `mountPointBeneath` in
618
+ `packages/daemon/internal/launcher/roleinit_linux.go`. `openat2` is not the alternative
619
+ there: a lane measured it returning `ENOSYS` under gVisor for every flag combination it
620
+ tried, so the handle rule above is the portable check rather than a fallback. The question
621
+ is not which tool to use but whether anything you run calls `openat2`, which you can read off
622
+ the binary (two builds of one tool reporting an identical `--version` differed here, and only
623
+ the package version and the checksum told them apart):
623
624
 
624
625
  ```sh
625
626
  b=$(readlink -f "$(command -v <tool>)")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/claude-envoy",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Claude Code channel plugin for Legion's Envoy bus",
6
6
  "type": "module",
@@ -12,3 +12,4 @@ Read this in a Legion pane before you touch a role claim, or when a Legion role
12
12
  - `receipt_timeout`: the listener forwarded the message to a live holder and no receipt arrived in time. The error names the holder. Its payload keeps `original_topic`, `event_id`, `payload` and the original `dedupe_key`, so the daemon can re-send it and the receiver's dedupe drops a copy that did arrive.
13
13
  - A role message forwarded to you is kept on your inbox in the stream, which your own durable consumer reads, so your session gets it once, also after the pane restarts or reconnects.
14
14
  - Never forward these failure payloads to an architect, because the daemon already acts on them.
15
+ - A role send the listener refuses `404` also raises one exception on `notifications.envoy.exceptions.notifications.role.<role>`, with the reason it refused: `unclaimed` or `holder_lapsed`. It is a bus signal and nothing more: no consumer acts on a peer's refusal, and the daemon's own refused outbox row retries by itself until the role is held or its architect cannot hold it again. Never re-send a refused message by hand on the strength of one.