@sjawhar/pi-legion-envoy 5.5.1 → 5.5.2
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/dist/legion.js +1 -1
- package/dist/skills/legion-controller/SKILL.md +26 -12
- package/package.json +1 -1
package/dist/legion.js
CHANGED
|
@@ -16142,7 +16142,7 @@ import { logger } from "@oh-my-pi/pi-utils";
|
|
|
16142
16142
|
// package.json
|
|
16143
16143
|
var package_default = {
|
|
16144
16144
|
name: "@sjawhar/pi-legion-envoy",
|
|
16145
|
-
version: "5.5.
|
|
16145
|
+
version: "5.5.2",
|
|
16146
16146
|
type: "module",
|
|
16147
16147
|
omp: {
|
|
16148
16148
|
extensions: [
|
|
@@ -72,8 +72,8 @@ carries, so nothing changes in how you handle wakes. Under the TypeScript daemon
|
|
|
72
72
|
claims the role and calls `/controller/ready` exactly as under tmux; under the Go daemon
|
|
73
73
|
(`LEGION_DAEMON_API=go` in your environment) it registers on `/legion/v1/claims/register` with the
|
|
74
74
|
secret, claims the role, then subscribes to `notifications.legion.<project>.controller`, where the
|
|
75
|
-
Go daemon publishes the
|
|
76
|
-
`controllerLocator: {runtime, external: true, sessionId, registeredAt}`, `runtime` being the
|
|
75
|
+
Go daemon publishes the rows marked from the Go daemon in the wake routing table. The daemon records
|
|
76
|
+
you as `controllerLocator: {runtime, external: true, sessionId, registeredAt}`, `runtime` being the
|
|
77
77
|
daemon's own (`kubernetes`, or `tmux` under the Go daemon). The TypeScript daemon reads your
|
|
78
78
|
liveness from the Envoy role registry (the holder of
|
|
79
79
|
`legion-<project>-controller` and its `last_seen`), not from a pane: keep the session running.
|
|
@@ -87,15 +87,29 @@ mints a new secret, so your grants stop working and the role moves to the new se
|
|
|
87
87
|
|
|
88
88
|
The Go daemon's controller topic is a wake for a session that is running when it is published.
|
|
89
89
|
Envoy hands an Oh My Pi session no retained copy of a notice published before it subscribed, so a
|
|
90
|
-
hold
|
|
91
|
-
every start, before anything else
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
90
|
+
hold, a tree architect's failed claim, or a new triage root from while no controller ran never
|
|
91
|
+
arrives as a wake. At every start, before anything else:
|
|
92
|
+
|
|
93
|
+
1. Read `legion state --json` and handle each issue whose `issues.<KEY>.phase` is `held` (its
|
|
94
|
+
`issues.<KEY>.holdReason` is `escalated` when its architect sent it to you, and absent while the
|
|
95
|
+
architect is still deciding or while its tree lingers or is closed, where the hold waits for the
|
|
96
|
+
tree's re-admission and needs nothing from you), and each tree root whose
|
|
97
|
+
`issues.<KEY>.architect.state` is `failed` and whose `issues.<KEY>.phase` is not `done`, exactly
|
|
98
|
+
as the matching wake below. A parked tree (root phase `done`: it lingers or is closed) needs
|
|
99
|
+
nothing from you: a failed architect ignores the park and reads `failed` until the tree closes.
|
|
100
|
+
2. List the project's triage issues with `dispatch_issues({project, status: "triage", limit: 250})`.
|
|
101
|
+
When its first line ends `(showing N of M)`, it is one page: say in your summary how many rows
|
|
102
|
+
it left unread. The rows show no parent, so open each row with `dispatch_read`: one whose
|
|
103
|
+
`Links:` name a `child_of` issue is a child, which its parent's architect owns, so leave it,
|
|
104
|
+
whether or not `legion state --json` records it (a `child_of` under `Referenced by:` is a child
|
|
105
|
+
of this issue, not its parent). Of the rest, triage each that `legion state --json` does not
|
|
106
|
+
record under `issues` as a new issue. A root recorded there and now in `triage` is work the
|
|
107
|
+
daemon holds that a human pulled back: never re-admit it yourself; name it in your summary to
|
|
108
|
+
the human ("<KEY> was pulled back to triage; what do you want?"). This listing is also the only
|
|
109
|
+
way you learn of an unrecorded root moved back into triage, or of a child detached to a root
|
|
110
|
+
while it is in triage, since the daemon wakes you only on a root's creation.
|
|
111
|
+
|
|
112
|
+
The issue record and Dispatch are the truth; the topic is the wake.
|
|
99
113
|
|
|
100
114
|
## Deployment instructions
|
|
101
115
|
|
|
@@ -123,7 +137,7 @@ quoted here.
|
|
|
123
137
|
|
|
124
138
|
| Wake | Content | Controller action |
|
|
125
139
|
|---|---|---|
|
|
126
|
-
| New issue created in the Dispatch project (`issue.created`, status `triage`; resync heals misses) | issue key + triage context (incl. pre-existing children) | Triage: `legion status <KEY> todo` to admit, or set `backlog`/`icebox` to park |
|
|
140
|
+
| New issue created in the Dispatch project (`issue.created`, status `triage`; under the TypeScript daemon resync heals misses, under the Go daemon the boot step above does). From the Go daemon: `triage on <KEY>` (payload `{kind: "triage"}`) on the controller topic, for a root only | issue key + triage context (incl. pre-existing children) | Triage: `legion status <KEY> todo` to admit, or set `backlog`/`icebox` to park |
|
|
127
141
|
| Backlog eligibility | slot freed / priority change | Reconsider parked items and move the eligible root to `todo` |
|
|
128
142
|
| Architect escalation (controller-actionable only: re-file a child as a root issue, capacity, cross-tree conflicts) | request + context | Judge and act; issue-scoped human Q&A goes through `dispatch_ask` from the owning architect, not here |
|
|
129
143
|
| Resync report | artifact-driven anomaly list (zero-owner trees, untriaged-open, launch-failed, admission-drift) | Verify against fresh state, then heal |
|