@junghanacs/entwurf 0.41.2 → 0.50.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.
- package/AGENTS.md +4 -2
- package/BASELINE.md +110 -1
- package/CHANGELOG.md +328 -0
- package/CONTRIBUTING.md +1 -1
- package/ENTWURF-CLI.json +1229 -0
- package/ENTWURF.json +284 -0
- package/FAQ.md +4 -4
- package/README.md +125 -184
- package/VERIFY.md +2 -2
- package/docs/external-mcp-host.md +3 -3
- package/docs/setup-clean-host.md +37 -12
- package/mcp/entwurf-bridge/dist/ENTWURF.json +284 -0
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +46 -196
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/agent-guidance.js +299 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +21 -25
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +498 -29
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/fresh-call-dispatch.js +47 -10
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-fresh-call.js +613 -33
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-resume-call.js +497 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-session.js +3 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-fresh-call.js +23 -20
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-resume-call.js +68 -21
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-fresh-preflight.js +7 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-location.js +347 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-owner-fence.js +1132 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-runtime.js +1 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/remote-pair-send.js +7 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/resume-launch-identity.js +18 -11
- package/mcp/entwurf-bridge/dist/pi-extensions/meta-bridge-pi-durable.js +53 -60
- package/mcp/entwurf-bridge/dist/scripts/herdr-rails.mjs +40 -7
- package/mcp/entwurf-bridge/dist/scripts/meta-bridge-fresh-cut.js +1 -27
- package/mcp/entwurf-bridge/dist/scripts/meta-bridge-prune.js +1 -1
- package/mcp/entwurf-bridge/dist/scripts/meta-facts.js +1 -1
- package/mcp/entwurf-bridge/dist/scripts/peer-facts.js +1 -1
- package/mcp/entwurf-bridge/src/index.ts +149 -327
- package/mcp/entwurf-bridge/tsconfig.build.json +7 -1
- package/native/win32-x64/manifest.json +1 -1
- package/package.json +8 -4
- package/pi/pi-durable/bootstrap.mjs +179 -6
- package/pi/pi-durable/carrier/runtime.js +108 -9
- package/pi/pi-durable/carrier/session-name.js +11 -0
- package/pi/pi-durable/carrier/sessions.js +96 -20
- package/pi/pi-durable/overlay/upstream-pin.json +11 -5
- package/pi-extensions/lib/agent-guidance.ts +341 -0
- package/pi-extensions/lib/entwurf-v2-surface.ts +25 -31
- package/pi-extensions/lib/entwurf-v2-visible-resume.ts +725 -54
- package/pi-extensions/lib/fresh-call-dispatch.ts +64 -12
- package/pi-extensions/lib/herdr-fresh-call.ts +919 -40
- package/pi-extensions/lib/herdr-resume-call.ts +810 -0
- package/pi-extensions/lib/meta-session.ts +13 -8
- package/pi-extensions/lib/mux-fresh-call.ts +23 -26
- package/pi-extensions/lib/mux-resume-call.ts +95 -23
- package/pi-extensions/lib/pi-durable-fresh-preflight.ts +9 -2
- package/pi-extensions/lib/pi-durable-location.ts +446 -0
- package/pi-extensions/lib/pi-durable-owner-fence.ts +1461 -0
- package/pi-extensions/lib/pi-durable-runtime.ts +4 -0
- package/pi-extensions/lib/remote-pair-send.ts +7 -4
- package/pi-extensions/lib/resume-launch-identity.ts +31 -12
- package/pi-extensions/meta-bridge-pi-durable.ts +52 -79
- package/run.sh +417 -654
- package/scripts/build-bridge.sh +10 -0
- package/scripts/check-capability-bundle-reach.ts +86 -0
- package/scripts/check-claude-launch.ts +341 -0
- package/scripts/check-entwurf-self-address.ts +3 -3
- package/scripts/check-entwurf-v2-surface.ts +94 -98
- package/scripts/check-fresh-call-dispatch.ts +70 -9
- package/scripts/check-fresh-cut-gate.sh +23 -9
- package/scripts/check-gate-qualification.ts +24 -17
- package/scripts/check-herdr-activation.ts +301 -23
- package/scripts/check-herdr-fresh-call.ts +161 -25
- package/scripts/check-herdr-plugin-build.ts +173 -1
- package/scripts/check-herdr-plugin.ts +28 -2
- package/scripts/check-herdr-runtime-bootstrap.ts +136 -0
- package/scripts/check-install-surface.ts +1236 -6
- package/scripts/check-meta-doctor-oracle.sh +1 -1
- package/scripts/check-meta-facts.ts +20 -1
- package/scripts/check-mux-resume-call.ts +48 -3
- package/scripts/check-peer-facts.ts +39 -2
- package/scripts/cli-help.mjs +222 -0
- package/scripts/dev-bin.sh +39 -2
- package/scripts/herdr-activation.mjs +28 -6
- package/scripts/herdr-operator-link.mjs +389 -0
- package/scripts/herdr-plugin-activate.mjs +5 -0
- package/scripts/herdr-plugin-deactivate.mjs +18 -5
- package/scripts/herdr-rails.mjs +43 -7
- package/scripts/herdr-runtime.mjs +27 -0
- package/scripts/meta-bridge-fresh-cut.ts +1 -27
- package/scripts/meta-bridge-prune.ts +1 -1
- package/scripts/meta-facts.ts +1 -1
- package/scripts/mutants/agent-guidance.json +160 -0
- package/scripts/mutants/bridge-boot-resume.json +6 -8
- package/scripts/mutants/capability-bundle-reach.json +124 -0
- package/scripts/mutants/claude-launch.json +142 -0
- package/scripts/mutants/cli-help-source.json +420 -0
- package/scripts/mutants/control-send-receipt.json +21 -4
- package/scripts/mutants/dev-gate-dispatch.json +109 -0
- package/scripts/mutants/fresh-call-dispatch.json +38 -2
- package/scripts/mutants/fresh-cut.json +15 -0
- package/scripts/mutants/herdr-activation.json +128 -0
- package/scripts/mutants/herdr-fresh-call.json +278 -5
- package/scripts/mutants/herdr-operator-link.json +318 -0
- package/scripts/mutants/herdr-plugin-build.json +55 -0
- package/scripts/mutants/herdr-plugin.json +17 -0
- package/scripts/mutants/herdr-resume-call.json +288 -0
- package/scripts/mutants/herdr-runtime-bootstrap.json +48 -0
- package/scripts/mutants/meta-facts.json +15 -0
- package/scripts/mutants/mux-fresh-call.json +14 -3
- package/scripts/mutants/mux-resume-call.json +89 -3
- package/scripts/mutants/peer-facts.json +15 -0
- package/scripts/mutants/pi-durable.json +996 -6
- package/scripts/mutants/remote-pair-send.json +21 -2
- package/scripts/mutants/self-address.json +10 -10
- package/scripts/mutants/source-install.json +35 -0
- package/scripts/mutants/v2-surface.json +50 -64
- package/scripts/mutants/v2-visible-resume.json +266 -6
- package/scripts/peer-facts.ts +1 -1
- package/scripts/smoke-agy-install-state.sh +66 -0
- package/scripts/smoke-meta-prune.sh +23 -0
- package/scripts/smoke-omp-fresh-live.ts +12 -3
- package/scripts/smoke-omp-receive-live.ts +7 -1
- package/scripts/smoke-pi-durable-fresh-live.ts +12 -2
- package/team.json.example +39 -0
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
{
|
|
130
130
|
"claim": "REMOTE-ROUTE-RECEIPT-PATHS-OTHER-HOST",
|
|
131
131
|
"title": "the accepted receipt drops the note that its paths are on the other host, so the other host's messagePath reads as a file the sender could open",
|
|
132
|
-
"subject": "
|
|
132
|
+
"subject": "ENTWURF.json",
|
|
133
133
|
"find": ["read/answer unknown until a reply arrives; paths below are on the other host)"],
|
|
134
134
|
"replace": ["read/answer unknown until a reply arrives)"],
|
|
135
135
|
"gate": ["bash", "run.sh", "check-remote-pair-beside"],
|
|
@@ -141,6 +141,25 @@
|
|
|
141
141
|
"output": "mcp/entwurf-bridge/dist"
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
|
+
{
|
|
145
|
+
"claim": "REMOTE-DELIVERY-RESULT-CLAUSES-FROM-ROOT",
|
|
146
|
+
"title": "the accepted receipt reads a hand-kept copy of its clause, one byte off the Root text, instead of the Root lookup: it still names acceptance and still says its paths are on the other host, so only the byte comparison against Root can see the drift",
|
|
147
|
+
"subject": "pi-extensions/lib/remote-pair-send.ts",
|
|
148
|
+
"find": [
|
|
149
|
+
"\t\t\t\ttext: `entwurf_v2 remote ${via} → ${ENTWURF_DELIVERY_RESULT_CLAUSES[\"remote-accepted\"]}\\n${o.text}`,"
|
|
150
|
+
],
|
|
151
|
+
"replace": [
|
|
152
|
+
"\t\t\t\ttext: `entwurf_v2 remote ${via} → accepted by the other host (its fact; read/answer unknown until a reply arrives; paths below are on the other host)\\n${o.text}`,"
|
|
153
|
+
],
|
|
154
|
+
"gate": ["bash", "run.sh", "check-remote-pair-beside"],
|
|
155
|
+
"timeoutSeconds": 600,
|
|
156
|
+
"signature": "[QK:REMOTE-DELIVERY-RESULT-CLAUSES-FROM-ROOT]",
|
|
157
|
+
"signatureSource": "pi-extensions/lib/remote-pair-send.test.ts",
|
|
158
|
+
"build": {
|
|
159
|
+
"argv": ["bash", "scripts/build-bridge.sh"],
|
|
160
|
+
"output": "mcp/entwurf-bridge/dist"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
144
163
|
{
|
|
145
164
|
"claim": "REMOTE-PAIR-OPT-IN-ABSENT-IS-OFF",
|
|
146
165
|
"title": "an absent opt-in file throws instead of meaning off, so every local send on a host that never opted in fails",
|
|
@@ -176,7 +195,7 @@
|
|
|
176
195
|
"title": "an error the other host reports after a possible write is headed as a non-delivery, inviting a resend that would deliver twice",
|
|
177
196
|
"subject": "pi-extensions/lib/remote-pair-send.ts",
|
|
178
197
|
"find": [
|
|
179
|
-
"\t\t\t\ttext: `entwurf_v2 remote ${via} →
|
|
198
|
+
"\t\t\t\ttext: `entwurf_v2 remote ${via} → ${ENTWURF_DELIVERY_RESULT_CLAUSES[\"remote-reported-error\"]}\\n${o.text}`,"
|
|
180
199
|
],
|
|
181
200
|
"replace": [
|
|
182
201
|
"\t\t\t\ttext: `entwurf_v2 remote ${via} → the other host did not deliver (paths below are on the other host)\\n${o.text}`,"
|
|
@@ -7,19 +7,19 @@
|
|
|
7
7
|
"title": "entwurf_self reverts to an empty self-fetch guard + unconditional mailbox render (ordering-not-containment)",
|
|
8
8
|
"subject": "mcp/entwurf-bridge/src/index.ts",
|
|
9
9
|
"find": [
|
|
10
|
-
"\t\t\
|
|
11
|
-
"\t\t\t\t\tconst mailboxPath = path.join(defaultMetaMailboxDir(), sender.sessionId);",
|
|
12
|
-
"\t\t\t\t\textra.mailboxPath = mailboxPath;",
|
|
13
|
-
"\t\t\t\t\tlines.push(`mailboxPath: ${mailboxPath}`);",
|
|
14
|
-
"\t\t\t\t} else if (rail === \"native-push\") {"
|
|
15
|
-
],
|
|
16
|
-
"replace": [
|
|
17
|
-
"\t\t\t\tif (rail === \"self-fetch\") {",
|
|
18
|
-
"\t\t\t\t}",
|
|
10
|
+
"\t\t\tif (rail === \"self-fetch\") {",
|
|
19
11
|
"\t\t\t\tconst mailboxPath = path.join(defaultMetaMailboxDir(), sender.sessionId);",
|
|
20
12
|
"\t\t\t\textra.mailboxPath = mailboxPath;",
|
|
21
13
|
"\t\t\t\tlines.push(`mailboxPath: ${mailboxPath}`);",
|
|
22
|
-
"\t\t\t
|
|
14
|
+
"\t\t\t} else if (rail === \"native-push\") {"
|
|
15
|
+
],
|
|
16
|
+
"replace": [
|
|
17
|
+
"\t\t\tif (rail === \"self-fetch\") {",
|
|
18
|
+
"\t\t\t}",
|
|
19
|
+
"\t\t\tconst mailboxPath = path.join(defaultMetaMailboxDir(), sender.sessionId);",
|
|
20
|
+
"\t\t\textra.mailboxPath = mailboxPath;",
|
|
21
|
+
"\t\t\tlines.push(`mailboxPath: ${mailboxPath}`);",
|
|
22
|
+
"\t\t\tif (rail === \"native-push\") {"
|
|
23
23
|
],
|
|
24
24
|
"gate": ["bash", "run.sh", "check-entwurf-self-address"],
|
|
25
25
|
"timeoutSeconds": 60,
|
|
@@ -93,6 +93,41 @@
|
|
|
93
93
|
"timeoutSeconds": 300,
|
|
94
94
|
"signature": "[QK:SOURCE-MANIFEST-UNREADABLE-REFUSED]",
|
|
95
95
|
"signatureSource": "scripts/smoke-agy-install-state.sh"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"claim": "INSTALLED-DEVBIN-MUTATION-REFUSED",
|
|
99
|
+
"title": "the installed-package test never matches, so an installed root's dev-bin expose/remove again takes over a developer's links and state (#153, measured before the guard)",
|
|
100
|
+
"subject": "scripts/dev-bin.sh",
|
|
101
|
+
"find": [" */node_modules/*)"],
|
|
102
|
+
"replace": [" */node_modules/*/never-an-install/*)"],
|
|
103
|
+
"gate": ["bash", "run.sh", "smoke-agy-install-state"],
|
|
104
|
+
"timeoutSeconds": 300,
|
|
105
|
+
"signatureSource": "scripts/smoke-agy-install-state.sh",
|
|
106
|
+
"signature": "[QK:INSTALLED-DEVBIN-MUTATION-REFUSED]"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"claim": "INSTALLED-DEVBIN-PUBLIC-STOPS",
|
|
110
|
+
"title": "the public expose-dev-bin ignores the helper's installed-package refusal and goes on to verify, exclusive and the package-manager queries",
|
|
111
|
+
"subject": "run.sh",
|
|
112
|
+
"find": [" [ \"$rc\" -eq 4 ] && return 4"],
|
|
113
|
+
"replace": [" : # the installed-package refusal no longer stops the wrapper"],
|
|
114
|
+
"gate": ["bash", "run.sh", "smoke-agy-install-state"],
|
|
115
|
+
"timeoutSeconds": 300,
|
|
116
|
+
"signatureSource": "scripts/smoke-agy-install-state.sh",
|
|
117
|
+
"signature": "[QK:INSTALLED-DEVBIN-PUBLIC-STOPS]"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"claim": "SOURCE-DEVBIN-MOVED-CHECKOUT",
|
|
121
|
+
"title": "the moved-checkout rule is dropped while closing the installed path, so a developer's link no longer follows its own checkout to another one",
|
|
122
|
+
"subject": "scripts/dev-bin.sh",
|
|
123
|
+
"find": [
|
|
124
|
+
" [ \"$(state_link \"$sf\")\" = \"$link\" ] && [ \"$cur\" = \"$(state_target \"$sf\")\" ] && return 0"
|
|
125
|
+
],
|
|
126
|
+
"replace": [" :"],
|
|
127
|
+
"gate": ["bash", "run.sh", "smoke-agy-install-state"],
|
|
128
|
+
"timeoutSeconds": 300,
|
|
129
|
+
"signatureSource": "scripts/smoke-agy-install-state.sh",
|
|
130
|
+
"signature": "[QK:SOURCE-DEVBIN-MOVED-CHECKOUT]"
|
|
96
131
|
}
|
|
97
132
|
]
|
|
98
133
|
}
|
|
@@ -5,13 +5,12 @@
|
|
|
5
5
|
{
|
|
6
6
|
"claim": "V2SURF-RESUME-HINT-SCOPE",
|
|
7
7
|
"title": "the dormant capability hint returns to a Pi-only automatic-resume invitation",
|
|
8
|
-
"subject": "
|
|
8
|
+
"subject": "ENTWURF.json",
|
|
9
9
|
"find": [
|
|
10
|
-
"
|
|
11
|
-
"\t\t\t\t\"it submits no prompt. This capability hint is not permission to resume automatically.\""
|
|
10
|
+
"Only on an explicit operator request, use entwurf_resume_call {target} for Pi or Claude Code; it submits no prompt. This capability hint is not permission to resume automatically."
|
|
12
11
|
],
|
|
13
12
|
"replace": [
|
|
14
|
-
"
|
|
13
|
+
"Reopen the citizen with entwurf_resume_call {target} (pi targets only; it runs no turn), then dispatch again."
|
|
15
14
|
],
|
|
16
15
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
17
16
|
"timeoutSeconds": 60,
|
|
@@ -21,12 +20,11 @@
|
|
|
21
20
|
{
|
|
22
21
|
"claim": "V2SURF-MCP-LOCK-DOMAIN",
|
|
23
22
|
"title": "MCP long description reverts to the false \"socket paths take a per-target lock\" claim",
|
|
24
|
-
"subject": "
|
|
23
|
+
"subject": "ENTWURF.json",
|
|
25
24
|
"find": [
|
|
26
|
-
"
|
|
27
|
-
"\t\t\"mailbox and native-push rails are lock-free — deliverability and the adapter probe guard them. mode \" +"
|
|
25
|
+
"LOCK: taken for a control-socket-DOMAIN dispatch. The mailbox and native-push rails are lock-free — deliverability and the adapter probe guard them. mode "
|
|
28
26
|
],
|
|
29
|
-
"replace": ["
|
|
27
|
+
"replace": ["LOCK POLICY: socket paths take a per-target lock; the mailbox path does not. mode "],
|
|
30
28
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
31
29
|
"timeoutSeconds": 60,
|
|
32
30
|
"signature": "[QK:V2SURF-MCP-LOCK-DOMAIN]",
|
|
@@ -57,15 +55,9 @@
|
|
|
57
55
|
{
|
|
58
56
|
"claim": "V2SURF-MODE-SCOPE",
|
|
59
57
|
"title": "the bridge mode param (the one every caller reads, pi included since #125) reverts to \"Delivery mode for a live send\" (false for native-push) (#120 P2: the description was rewritten to stop claiming an interrupt, so the mutation now strips the rail scope from the corrected sentence)",
|
|
60
|
-
"subject": "
|
|
61
|
-
"find": [
|
|
62
|
-
|
|
63
|
-
"\t\t\t\t\t\"The mailbox and native-push plans carry no mode, so it has no effect on those rails.\","
|
|
64
|
-
],
|
|
65
|
-
"replace": [
|
|
66
|
-
"\t\t\t\t\"Delivery mode for a live send: steer (ask the steering queue) or follow_up (ask the follow-up queue). \" +",
|
|
67
|
-
"\t\t\t\t\t\"Both queues are volatile process memory.\","
|
|
68
|
-
],
|
|
58
|
+
"subject": "ENTWURF.json",
|
|
59
|
+
"find": ["Injection style for a CONTROL-SOCKET send only:"],
|
|
60
|
+
"replace": ["Delivery mode for a live send:"],
|
|
69
61
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
70
62
|
"timeoutSeconds": 60,
|
|
71
63
|
"signature": "[QK:V2SURF-MODE-SCOPE]",
|
|
@@ -74,19 +66,11 @@
|
|
|
74
66
|
{
|
|
75
67
|
"claim": "V2SURF-INBOX-SCOPE-HONESTY",
|
|
76
68
|
"title": "entwurf_inbox_read reverts to the false \"drains your own inbox\" access claim (SCOPE paragraph gone)",
|
|
77
|
-
"subject": "
|
|
69
|
+
"subject": "ENTWURF.json",
|
|
78
70
|
"find": [
|
|
79
|
-
"
|
|
80
|
-
"\t\t\"SCOPE — read this literally: the garden id is CALLER-SUPPLIED and is NOT verified against \" +",
|
|
81
|
-
"\t\t\"your own identity (a host with no garden record of its own can call this too). So passing \" +",
|
|
82
|
-
"\t\t\"another citizen's garden id drains THEIR mail and stamps THEIR receipt, and they will never \" +",
|
|
83
|
-
"\t\t\"see those messages. Pass only the id from your own doorbell notice or your own meta-record; \" +",
|
|
84
|
-
"\t\t\"use entwurf_self if you need to confirm which id that is. \" +"
|
|
85
|
-
],
|
|
86
|
-
"replace": [
|
|
87
|
-
"\t\t\"doorbell is only a wake attempt, not a read. An empty inbox mutates nothing. \" +",
|
|
88
|
-
"\t\t\"This tool drains your own meta-bridge inbox and stamps the read receipt on your meta-record. \" +"
|
|
71
|
+
"SCOPE — read this literally: the garden id is CALLER-SUPPLIED and is NOT verified against your own identity"
|
|
89
72
|
],
|
|
73
|
+
"replace": ["This tool drains your own meta-bridge inbox and stamps the read receipt on your meta-record"],
|
|
90
74
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
91
75
|
"timeoutSeconds": 60,
|
|
92
76
|
"signature": "[QK:V2SURF-INBOX-SCOPE-HONESTY]",
|
|
@@ -95,15 +79,12 @@
|
|
|
95
79
|
{
|
|
96
80
|
"claim": "V2SURF-DORMANT-HONESTY",
|
|
97
81
|
"title": "MCP long description advertises owned-outcome as a selectable dormant verb again and drops the reason a dormant target actually returns",
|
|
98
|
-
"subject": "
|
|
82
|
+
"subject": "ENTWURF.json",
|
|
99
83
|
"find": [
|
|
100
|
-
"
|
|
101
|
-
"\t\t\"— same receiver rule as the mailbox, no active drainer means no delivery. \" +",
|
|
102
|
-
"\t\t\"The intent that used to answer there, owned-outcome, resumed it by launching a hidden background child \" +",
|
|
103
|
-
"\t\t\"and was withdrawn under the visible-first rule — re-open the session yourself, then dispatch again. \" +"
|
|
84
|
+
"A dormant socket rejects this delivery verb as dormant-fire-forget-unsupported. owned-outcome was withdrawn. Only on an explicit operator request, entwurf_resume_call may visibly reopen a proven-dormant Pi, pi-durable or Claude Code citizen under the same id, submitting no prompt; that lifecycle is separate from delivery. "
|
|
104
85
|
],
|
|
105
86
|
"replace": [
|
|
106
|
-
"
|
|
87
|
+
"owned-outcome wakes a DORMANT socket-domain citizen by spawn-bg resume ONLY and is never auto-converted. "
|
|
107
88
|
],
|
|
108
89
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
109
90
|
"timeoutSeconds": 60,
|
|
@@ -113,45 +94,35 @@
|
|
|
113
94
|
{
|
|
114
95
|
"claim": "V2SURF-INDETERMINATE-NO-START",
|
|
115
96
|
"title": "the indeterminate hint reverts to a socket that \"answered\" and drops the no-start facts — overclaiming a reply that a permission-refused or timed-out probe never got",
|
|
116
|
-
"subject": "
|
|
97
|
+
"subject": "ENTWURF.json",
|
|
117
98
|
"find": [
|
|
118
|
-
"
|
|
119
|
-
"\t\t\t// The socket probe did not settle, so liveness is UNKNOWN — an unestablished probe",
|
|
120
|
-
"\t\t\t// is not a measured death, and dispatching into it could double-deliver. Say",
|
|
121
|
-
"\t\t\t// \"the PROBE was inconclusive\", never \"the socket answered inconclusively\":",
|
|
122
|
-
"\t\t\t// `indeterminate` also covers a probe that got no answer at all, was refused by",
|
|
123
|
-
"\t\t\t// permissions, or timed out, and \"answered\" claims a reply that may never have",
|
|
124
|
-
"\t\t\t// existed. The wire id is FROZEN and still spells \"-no-spawn\"; it names the rule",
|
|
125
|
-
"\t\t\t// (never dispatch into an indeterminate target), not a capability that still",
|
|
126
|
-
"\t\t\t// exists. So the hint's job is to say plainly what did NOT happen: nothing",
|
|
127
|
-
"\t\t\t// delivered, nothing started.",
|
|
128
|
-
"\t\t\treturn (",
|
|
129
|
-
"\t\t\t\t\"the control-socket probe was inconclusive, so the target's liveness is UNKNOWN — this is not a \" +",
|
|
130
|
-
"\t\t\t\t\"measured death. NOTHING was delivered and NO process was started (the reason id keeps its frozen \" +",
|
|
131
|
-
"\t\t\t\t\"'-no-spawn' wire spelling from an era when one could be; entwurf_v2 starts nothing on any rail). \" +",
|
|
132
|
-
"\t\t\t\t\"Re-run entwurf_peers to re-probe; if it stays indeterminate, check for a stale socket file left at \" +",
|
|
133
|
-
"\t\t\t\t\"that garden id by a session that died without cleaning up.\"",
|
|
134
|
-
"\t\t\t);"
|
|
135
|
-
],
|
|
136
|
-
"replace": [
|
|
137
|
-
"\t\tcase \"indeterminate-no-spawn\":",
|
|
138
|
-
"\t\t\treturn \"the target's control socket answered inconclusively; retry.\";"
|
|
99
|
+
"the control-socket probe was inconclusive, so the target's liveness is UNKNOWN — this is not a measured death. NOTHING was delivered and NO process was started (the reason id keeps its frozen '-no-spawn' wire spelling from an era when one could be; entwurf_v2 starts nothing on any rail). Re-run entwurf_peers to re-probe; if it stays indeterminate, check for a stale socket file left at that garden id by a session that died without cleaning up."
|
|
139
100
|
],
|
|
101
|
+
"replace": ["the target's control socket answered inconclusively; retry."],
|
|
140
102
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
141
103
|
"timeoutSeconds": 60,
|
|
142
104
|
"signature": "[QK:V2SURF-INDETERMINATE-NO-START]",
|
|
143
105
|
"signatureSource": "scripts/check-entwurf-v2-surface.ts"
|
|
144
106
|
},
|
|
107
|
+
{
|
|
108
|
+
"claim": "V2SURF-REJECT-HINTS-FROM-ROOT",
|
|
109
|
+
"title": "the surface stops returning the Root hint for one declared reason, so a native-push caller loses its next step while the Root text itself still looks perfect",
|
|
110
|
+
"subject": "pi-extensions/lib/entwurf-v2-surface.ts",
|
|
111
|
+
"find": ["\t\t\treturn ENTWURF_REJECT_HINTS[\"native-push-probe-indeterminate\"];"],
|
|
112
|
+
"replace": ["\t\t\treturn undefined;"],
|
|
113
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
114
|
+
"timeoutSeconds": 60,
|
|
115
|
+
"signature": "[QK:V2SURF-REJECT-HINTS-FROM-ROOT]",
|
|
116
|
+
"signatureSource": "scripts/check-entwurf-v2-surface.ts"
|
|
117
|
+
},
|
|
145
118
|
{
|
|
146
119
|
"claim": "V2SURF-PEERS-DEAD-ROW",
|
|
147
120
|
"title": "entwurf_peers drops the dead-row sentence, so a dormant citizen is listed with nothing saying it is unreachable",
|
|
148
|
-
"subject": "
|
|
121
|
+
"subject": "ENTWURF.json",
|
|
149
122
|
"find": [
|
|
150
|
-
"
|
|
151
|
-
"\t\t\"currently unreachable by any verb, so listing it grants no action — appearing here is not \" +",
|
|
152
|
-
"\t\t\"an invitation to dispatch. In particular `unsupported` does NOT mean mailbox: it means this backend has no \" +"
|
|
123
|
+
"row. A `dead` socket row is a REPORTED FACT: no entwurf_v2 delivery is available while it is dormant. Listing it grants no action and is not an invitation to dispatch. Only on an explicit operator request, the separate entwurf_resume_call may visibly reopen a proven-dormant Pi, pi-durable or Claude Code citizen under the same id, submitting no prompt. In particular"
|
|
153
124
|
],
|
|
154
|
-
"replace": ["
|
|
125
|
+
"replace": ["row. In particular"],
|
|
155
126
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
156
127
|
"timeoutSeconds": 60,
|
|
157
128
|
"signature": "[QK:V2SURF-PEERS-DEAD-ROW]",
|
|
@@ -160,12 +131,12 @@
|
|
|
160
131
|
{
|
|
161
132
|
"claim": "V2SURF-DESC-FITS-HOST-CAP",
|
|
162
133
|
"title": "the v2 tool description grows back past the host's 2048-char cap — the INTENT contract is silently cut off before the model that must choose an intent ever reads it",
|
|
163
|
-
"subject": "
|
|
134
|
+
"subject": "ENTWURF.json",
|
|
164
135
|
"find": [
|
|
165
|
-
"
|
|
136
|
+
"CANONICAL DELIVERY SURFACE for garden ids: message, reply, or hand off to whoever an id names. The id "
|
|
166
137
|
],
|
|
167
138
|
"replace": [
|
|
168
|
-
"
|
|
139
|
+
"CANONICAL DELIVERY SURFACE for garden ids: message, reply, or hand off to whoever an id names. The id PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING PADDING "
|
|
169
140
|
],
|
|
170
141
|
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
171
142
|
"timeoutSeconds": 60,
|
|
@@ -223,6 +194,21 @@
|
|
|
223
194
|
"timeoutSeconds": 120,
|
|
224
195
|
"signature": "[QK:NATIVE-PUSH-RETRY-BYTE-IDENTITY]",
|
|
225
196
|
"signatureSource": "pi-extensions/lib/entwurf-v2-native-push.test.ts"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"claim": "V2SURF-RECORD-LESS-SOCKET-HINT-FROM-ROOT",
|
|
200
|
+
"title": "the record-less-socket hint returns a hand-kept copy of its text, one byte off the Root segments, instead of composing them with the owner's command: every phrase the 2C cell checks still reads, so only the whole-string comparison against Root can see the drift",
|
|
201
|
+
"subject": "pi-extensions/lib/entwurf-v2-surface.ts",
|
|
202
|
+
"find": [
|
|
203
|
+
"\t\t\treturn `${hint.beforeFreshCutPrescription}${FRESH_CUT_PRESCRIPTION}${hint.afterFreshCutPrescription}`;"
|
|
204
|
+
],
|
|
205
|
+
"replace": [
|
|
206
|
+
"\t\t\treturn `a control socket exists at this garden id but NO meta-record claims it — the record is the sole address authority, so a bare socket is not an addressable citizen. If a pre-record-era resident owns that socket, restart it under the current runtime (session_start births its record); if the store predates the current generation, quiesce and archive it with ${FRESH_CUT_PRESCRIPTION}. A stale/forged socket should be removed.`;"
|
|
207
|
+
],
|
|
208
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
|
|
209
|
+
"timeoutSeconds": 60,
|
|
210
|
+
"signature": "[QK:V2SURF-RECORD-LESS-SOCKET-HINT-FROM-ROOT]",
|
|
211
|
+
"signatureSource": "scripts/check-entwurf-v2-surface.ts"
|
|
226
212
|
}
|
|
227
213
|
]
|
|
228
214
|
}
|
|
@@ -114,8 +114,8 @@
|
|
|
114
114
|
"claim": "V2RESUME-ARGV-FROM-RECORD",
|
|
115
115
|
"title": "the launcher is handed the caller's own directory instead of the record's, so the citizen returns in the wrong project",
|
|
116
116
|
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
117
|
-
"find": ["\t\tconst launched = deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs });"],
|
|
118
|
-
"replace": ["\t\tconst launched = deps.launch({ backend: \"pi\", cwd: process.cwd(), runtimeArgs });"],
|
|
117
|
+
"find": ["\t\tconst launched = await deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs });"],
|
|
118
|
+
"replace": ["\t\tconst launched = await deps.launch({ backend: \"pi\", cwd: process.cwd(), runtimeArgs });"],
|
|
119
119
|
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
120
120
|
"timeoutSeconds": 60,
|
|
121
121
|
"signature": "[QK:V2RESUME-ARGV-FROM-RECORD]",
|
|
@@ -201,10 +201,10 @@
|
|
|
201
201
|
"title": "the backend is re-derived instead of taken from the typed error, which is the second read this rail refuses",
|
|
202
202
|
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
203
203
|
"find": [
|
|
204
|
-
"\t\t\t\t\t\t`${targetGardenId} is a ${err.backend} citizen; only pi and Claude Code citizens can be reopened ` +"
|
|
204
|
+
"\t\t\t\t\t\t`${targetGardenId} is a ${err.backend} citizen; only pi, pi-durable and Claude Code citizens can be reopened ` +"
|
|
205
205
|
],
|
|
206
206
|
"replace": [
|
|
207
|
-
"\t\t\t\t\t\t`${targetGardenId} is a citizen of another backend; only pi and Claude Code citizens can be reopened ` +"
|
|
207
|
+
"\t\t\t\t\t\t`${targetGardenId} is a citizen of another backend; only pi, pi-durable and Claude Code citizens can be reopened ` +"
|
|
208
208
|
],
|
|
209
209
|
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
210
210
|
"timeoutSeconds": 60,
|
|
@@ -338,10 +338,10 @@
|
|
|
338
338
|
"claim": "V2RESUME-PI-NEVER-READS-RECEIVER",
|
|
339
339
|
"title": "the pi path consults a Claude Code receiver marker, mixing the two backends' dormancy proofs",
|
|
340
340
|
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
341
|
-
"find": ["\t\tconst launched = deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs });"],
|
|
341
|
+
"find": ["\t\tconst launched = await deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs });"],
|
|
342
342
|
"replace": [
|
|
343
343
|
"\t\tdeps.inspectReceiver(targetGardenId);",
|
|
344
|
-
"\t\tconst launched = deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs });"
|
|
344
|
+
"\t\tconst launched = await deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs });"
|
|
345
345
|
],
|
|
346
346
|
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
347
347
|
"timeoutSeconds": 60,
|
|
@@ -491,6 +491,266 @@
|
|
|
491
491
|
"timeoutSeconds": 60,
|
|
492
492
|
"signature": "[QK:V2RESUME-CC-MARKER-BINDING-READ]",
|
|
493
493
|
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"claim": "V2RESUME-REJECT-HINTS-FROM-ROOT",
|
|
497
|
+
"title": "one static rejection hint is re-authored as a code literal instead of the root ENTWURF.json text, so the reader stays exact while the rendered rejection no longer carries it",
|
|
498
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
499
|
+
"find": ["\t\"target-locked\": ENTWURF_RESUME_REJECT_HINTS[\"target-locked\"],"],
|
|
500
|
+
"replace": ["\t\"target-locked\": \"another resume or dispatch holds this citizen's lock\","],
|
|
501
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
502
|
+
"timeoutSeconds": 60,
|
|
503
|
+
"signature": "[QK:V2RESUME-REJECT-HINTS-FROM-ROOT]",
|
|
504
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"claim": "V2RESUME-LAUNCH-AWAITED",
|
|
508
|
+
"title": "the pi launch stops being awaited, so a herdr launch that answers through a promise reads as a refusal with no reason while the tab it opened is on screen",
|
|
509
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
510
|
+
"find": ["\t\tconst launched = await deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs });"],
|
|
511
|
+
"replace": [
|
|
512
|
+
"\t\tconst launched = deps.launch({ backend: \"pi\", cwd: identity.cwd, runtimeArgs }) as VisibleResumeLaunchOutcome;"
|
|
513
|
+
],
|
|
514
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
515
|
+
"timeoutSeconds": 60,
|
|
516
|
+
"signature": "[QK:V2RESUME-LAUNCH-AWAITED]",
|
|
517
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
"claim": "V2RESUME-HERDR-RENDER",
|
|
521
|
+
"title": "the herdr branch of the renderer is dropped, so a herdr launch is printed as a tmux window with undefined runtime, window and pane pid",
|
|
522
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
523
|
+
"find": ["\tif (h.rail === \"herdr\") return renderHerdrPiResume(result, h, actor);"],
|
|
524
|
+
"replace": [""],
|
|
525
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
526
|
+
"timeoutSeconds": 60,
|
|
527
|
+
"signature": "[QK:V2RESUME-HERDR-RENDER]",
|
|
528
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"claim": "V2RESUME-POST-CREATE-FAILURE-NAMED",
|
|
532
|
+
"title": "a launch failure after the tab create is folded into launch-refused, so the operator is told no window was opened over a tab that may be holding the citizen",
|
|
533
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
534
|
+
"find": ["\treturn \"failure\" in launched"],
|
|
535
|
+
"replace": ["\treturn \"failureNever\" in launched"],
|
|
536
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
537
|
+
"timeoutSeconds": 60,
|
|
538
|
+
"signature": "[QK:V2RESUME-POST-CREATE-FAILURE-NAMED]",
|
|
539
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
"claim": "V2RESUME-LAUNCH-FAILED-HEADER-HONEST",
|
|
543
|
+
"title": "the header of a tab create herdr declined by name claims the tab was created, sending the operator to look for a tab that never existed",
|
|
544
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
545
|
+
"find": ["\t\t\t? \"entwurf_resume_call failed at the herdr tab create step\""],
|
|
546
|
+
"replace": ["\t\t\t? \"entwurf_resume_call failed after the herdr tab was created\""],
|
|
547
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
548
|
+
"timeoutSeconds": 60,
|
|
549
|
+
"signature": "[QK:V2RESUME-LAUNCH-FAILED-HEADER-HONEST]",
|
|
550
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
"claim": "V2RESUME-CC-JOIN-HANDLE-ONLY",
|
|
554
|
+
"title": "the guard that admits only a handle carrying the opened pane's direct child is disabled, so a herdr agent-start or pi-durable layout handle reaches the join with no pid and the wiring defect no longer fails by name",
|
|
555
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
556
|
+
"find": ["\tif (handle.rail !== \"tmux\" && handle.rail !== \"herdr-layout-claude\") {"],
|
|
557
|
+
"replace": ["\tif (handle.rail !== \"tmux\" && handle.rail !== \"herdr-layout-claude\" && false) {"],
|
|
558
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
559
|
+
"timeoutSeconds": 60,
|
|
560
|
+
"signature": "[QK:V2RESUME-CC-JOIN-HANDLE-ONLY]",
|
|
561
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
"claim": "V2RESUME-PD-ADOPT-LAUNCH",
|
|
565
|
+
"title": "the adopt launch normalizes the reservation's raw profile, so the child's SDK reads another profile string than the one its reservation recorded and adopt row 5 refuses every resume",
|
|
566
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
567
|
+
"find": ["\t\t\tPI_CODING_AGENT_DIR: reservation.profile,"],
|
|
568
|
+
"replace": ["\t\t\tPI_CODING_AGENT_DIR: path.resolve(reservation.profile),"],
|
|
569
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
570
|
+
"timeoutSeconds": 60,
|
|
571
|
+
"signature": "[QK:V2RESUME-PD-ADOPT-LAUNCH]",
|
|
572
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
573
|
+
},
|
|
574
|
+
{
|
|
575
|
+
"claim": "V2RESUME-PD-WITHDRAW-NONE-CREATED",
|
|
576
|
+
"title": "a launch failure whose recovery is none no longer withdraws, so a herdr decline that created nothing leaves the citizen reserved by a live bridge",
|
|
577
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
578
|
+
"find": ["\t\tconst noneCreated = !(\"failure\" in launched) || launched.failure.recovery.outcome === \"none\";"],
|
|
579
|
+
"replace": ["\t\tconst noneCreated = !(\"failure\" in launched);"],
|
|
580
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
581
|
+
"timeoutSeconds": 60,
|
|
582
|
+
"signature": "[QK:V2RESUME-PD-WITHDRAW-NONE-CREATED]",
|
|
583
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"claim": "V2RESUME-PD-KEEP-POSSIBLY-CREATED",
|
|
587
|
+
"title": "an unknown or orphaned launch outcome is read as none-created and the reservation is withdrawn while a child may still adopt it",
|
|
588
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
589
|
+
"find": ["\t\tconst noneCreated = !(\"failure\" in launched) || launched.failure.recovery.outcome === \"none\";"],
|
|
590
|
+
"replace": [
|
|
591
|
+
"\t\tconst noneCreated = !(\"failure\" in launched) || launched.failure.recovery.outcome !== \"closed\";"
|
|
592
|
+
],
|
|
593
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
594
|
+
"timeoutSeconds": 60,
|
|
595
|
+
"signature": "[QK:V2RESUME-PD-KEEP-POSSIBLY-CREATED]",
|
|
596
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
"claim": "V2RESUME-PD-THROW-KEEPS",
|
|
600
|
+
"title": "a launcher that threw withdraws the reservation, though a window may exist whose child can still adopt it",
|
|
601
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
602
|
+
"find": [
|
|
603
|
+
"\t\t\t`entwurf-v2-visible-resume: the pi-durable launch of ${targetGardenId} threw: ${messageOf(err)}${kept}`,"
|
|
604
|
+
],
|
|
605
|
+
"replace": [
|
|
606
|
+
"\t\t\t`entwurf-v2-visible-resume: the pi-durable launch of ${targetGardenId} threw: ${messageOf(err)}${await withdraw()}`,"
|
|
607
|
+
],
|
|
608
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
609
|
+
"timeoutSeconds": 60,
|
|
610
|
+
"signature": "[QK:V2RESUME-PD-THROW-KEEPS]",
|
|
611
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"claim": "V2RESUME-PD-WITHDRAW-FAILURE-REPORTED",
|
|
615
|
+
"title": "a failed withdrawal is silently retried, so the answer stops being the outcome of the one withdrawal this call made",
|
|
616
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
617
|
+
"find": ["\t\t\tawait deps.withdrawPiDurable(reservation);"],
|
|
618
|
+
"replace": ["\t\t\tawait deps.withdrawPiDurable(reservation).catch(() => deps.withdrawPiDurable(reservation));"],
|
|
619
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
620
|
+
"timeoutSeconds": 60,
|
|
621
|
+
"signature": "[QK:V2RESUME-PD-WITHDRAW-FAILURE-REPORTED]",
|
|
622
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
"claim": "V2RESUME-PD-RESERVE-LIVE-REFUSED",
|
|
626
|
+
"title": "a live holder's reserve refusal is no longer named target-live and surfaces as a raw fence error",
|
|
627
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
628
|
+
"find": ["\tif (err.reason === \"owner-live\") {"],
|
|
629
|
+
"replace": ["\tif (err.reason === \"withdraw-not-own\") {"],
|
|
630
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
631
|
+
"timeoutSeconds": 60,
|
|
632
|
+
"signature": "[QK:V2RESUME-PD-RESERVE-LIVE-REFUSED]",
|
|
633
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
"claim": "V2RESUME-PD-OBSERVE-BOUNDED-WAIT",
|
|
637
|
+
"title": "the adoption observation reads once and gives up, so a child that adopts a second later is reported not-yet-adopted",
|
|
638
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
639
|
+
"find": [
|
|
640
|
+
"\t\tif (deps.now() - started >= timeoutMs) return { kind: \"not-yet-adopted\", waitedMs: deps.now() - started };"
|
|
641
|
+
],
|
|
642
|
+
"replace": [
|
|
643
|
+
"\t\tif (deps.now() - started >= 0) return { kind: \"not-yet-adopted\", waitedMs: deps.now() - started };"
|
|
644
|
+
],
|
|
645
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
646
|
+
"timeoutSeconds": 60,
|
|
647
|
+
"signature": "[QK:V2RESUME-PD-OBSERVE-BOUNDED-WAIT]",
|
|
648
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
"claim": "V2RESUME-PD-OBSERVE-CLASSES",
|
|
652
|
+
"title": "an unreadable D claim is reported as reservation-lost instead of unobserved with its cause",
|
|
653
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
654
|
+
"find": [
|
|
655
|
+
"\t\t\treturn { kind: \"unobserved\", reason: seen.reason, detail: seen.detail, waitedMs: deps.now() - started };"
|
|
656
|
+
],
|
|
657
|
+
"replace": ["\t\t\treturn { kind: \"reservation-lost\", waitedMs: deps.now() - started };"],
|
|
658
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
659
|
+
"timeoutSeconds": 60,
|
|
660
|
+
"signature": "[QK:V2RESUME-PD-OBSERVE-CLASSES]",
|
|
661
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"claim": "V2RESUME-PD-RENDER",
|
|
665
|
+
"title": "the adopted receipt stops saying an adoption is not readiness, so it reads as the citizen being back",
|
|
666
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
667
|
+
"find": ["adoption of this reservation. That is not ` +"],
|
|
668
|
+
"replace": ["adoption of this reservation. That is ` +"],
|
|
669
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
670
|
+
"timeoutSeconds": 60,
|
|
671
|
+
"signature": "[QK:V2RESUME-PD-RENDER]",
|
|
672
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
"claim": "V2RESUME-PD-LAUNCH-FAILED-STEP",
|
|
676
|
+
"title": "a pi-durable layout.apply failure is rendered as the pi rail's tab create failure, sending the operator to a tab create step that never ran and to a control socket pi-durable does not have",
|
|
677
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
678
|
+
"find": ["\tconst layout = f.rail === \"herdr-layout\";"],
|
|
679
|
+
"replace": ["\tconst layout = false && f.rail === \"herdr-layout\";"],
|
|
680
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
681
|
+
"timeoutSeconds": 60,
|
|
682
|
+
"signature": "[QK:V2RESUME-PD-LAUNCH-FAILED-STEP]",
|
|
683
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
"claim": "V2RESUME-PD-RESERVED-HOLDER-NOT-ADDRESS",
|
|
687
|
+
"title": "a reservation's live parent is answered as a running holder, so the caller is pointed at a process entwurf_v2 cannot reach",
|
|
688
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
689
|
+
"find": ["\t\tif (err.holderState === \"reserved\") {"],
|
|
690
|
+
"replace": ["\t\tif (err.holderState === \"closed\") {"],
|
|
691
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
692
|
+
"timeoutSeconds": 60,
|
|
693
|
+
"signature": "[QK:V2RESUME-PD-RESERVED-HOLDER-NOT-ADDRESS]",
|
|
694
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"claim": "V2RESUME-PD-RESERVE-WRITTEN-THEN-FAILED",
|
|
698
|
+
"title": "a reserve that wrote its reservation and then failed a lock release surfaces as a bare release error that names no reservation",
|
|
699
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
700
|
+
"find": [
|
|
701
|
+
"\t\t\tif (err.written !== undefined) throw new Error(piDurableReservedThenFailed(targetGardenId, err, err.written));"
|
|
702
|
+
],
|
|
703
|
+
"replace": ["\t\t\tvoid piDurableReservedThenFailed;"],
|
|
704
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
705
|
+
"timeoutSeconds": 60,
|
|
706
|
+
"signature": "[QK:V2RESUME-PD-RESERVE-WRITTEN-THEN-FAILED]",
|
|
707
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"claim": "V2RESUME-PD-WITHDRAW-PARTIAL-STATE",
|
|
711
|
+
"title": "a withdrawal that wrote the donor's row and then left its transaction file is reported as if it had written nothing",
|
|
712
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
713
|
+
"find": ["\tif (err instanceof PiDurableOwnerFenceError && err.written !== undefined) {"],
|
|
714
|
+
"replace": ["\tif (err instanceof PiDurableOwnerFenceError && err.written === null) {"],
|
|
715
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
716
|
+
"timeoutSeconds": 60,
|
|
717
|
+
"signature": "[QK:V2RESUME-PD-WITHDRAW-PARTIAL-STATE]",
|
|
718
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"claim": "V2RESUME-CC-HERDR-JOIN",
|
|
722
|
+
"title": "the herdr Claude Code observation joins the marker owner to herdr's pane VIEW id instead of the pane's direct-child pid, so a real return is never seen",
|
|
723
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
724
|
+
"find": [
|
|
725
|
+
"\tconst panePid = handle.rail === \"tmux\" ? handle.panePid : (handle.paneChild as { pid: string }).pid;"
|
|
726
|
+
],
|
|
727
|
+
"replace": ["\tconst panePid = handle.rail === \"tmux\" ? handle.panePid : handle.herdrPaneId;"],
|
|
728
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
729
|
+
"timeoutSeconds": 60,
|
|
730
|
+
"signature": "[QK:V2RESUME-CC-HERDR-JOIN]",
|
|
731
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
"claim": "V2RESUME-CC-HERDR-PROCESS-UNREAD",
|
|
735
|
+
"title": "a herdr launch whose pane child herdr did not report goes on to wait for a marker joined to no pid, and ends as a quiet resume-unobserved instead of naming herdr's cause",
|
|
736
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
737
|
+
"find": ["\tif (handle.rail === \"herdr-layout-claude\" && \"unread\" in handle.paneChild) {"],
|
|
738
|
+
"replace": ["\tif (handle.rail === \"herdr-layout-claude\" && \"unread\" in handle.paneChild && false) {"],
|
|
739
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
740
|
+
"timeoutSeconds": 60,
|
|
741
|
+
"signature": "[QK:V2RESUME-CC-HERDR-PROCESS-UNREAD]",
|
|
742
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
"claim": "V2RESUME-CC-HERDR-RENDER",
|
|
746
|
+
"title": "the herdr Claude Code receipt drops the pane child pid it joined, so the operator cannot tell which process the observation was about",
|
|
747
|
+
"subject": "pi-extensions/lib/entwurf-v2-visible-resume.ts",
|
|
748
|
+
"find": ["\t\t\t` child: ${child}\\n` +"],
|
|
749
|
+
"replace": ["\t\t\t\"\" +"],
|
|
750
|
+
"gate": ["bash", "run.sh", "check-entwurf-v2-visible-resume"],
|
|
751
|
+
"timeoutSeconds": 60,
|
|
752
|
+
"signature": "[QK:V2RESUME-CC-HERDR-RENDER]",
|
|
753
|
+
"signatureSource": "pi-extensions/lib/entwurf-v2-visible-resume.test.ts"
|
|
494
754
|
}
|
|
495
755
|
]
|
|
496
756
|
}
|
package/scripts/peer-facts.ts
CHANGED
|
@@ -84,7 +84,7 @@ const arg = process.argv[2];
|
|
|
84
84
|
// A dash argv is a flag this command does not have, not a store directory — treating it as
|
|
85
85
|
// a path would answer `--help` with "empty store, exit 0", a silent wrong fact.
|
|
86
86
|
if (process.argv.length > 3 || (arg !== undefined && arg.startsWith("-"))) {
|
|
87
|
-
console.error("
|
|
87
|
+
console.error("peer-facts: see `entwurf help peer-facts` (from that checkout's root: `./run.sh help peer-facts`)");
|
|
88
88
|
process.exit(2);
|
|
89
89
|
}
|
|
90
90
|
|