instar 1.3.1661 → 1.3.1663
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/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +195 -30
- package/dist/commands/server.js.map +1 -1
- package/dist/core/ClaudeKeyHealth.d.ts +21 -0
- package/dist/core/ClaudeKeyHealth.d.ts.map +1 -1
- package/dist/core/ClaudeKeyHealth.js +81 -5
- package/dist/core/ClaudeKeyHealth.js.map +1 -1
- package/dist/core/MeshRpc.d.ts +14 -0
- package/dist/core/MeshRpc.d.ts.map +1 -1
- package/dist/core/MeshRpc.js +1 -0
- package/dist/core/MeshRpc.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +18 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +8 -6
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/SlackReplyRelayInstaller.d.ts.map +1 -1
- package/dist/core/SlackReplyRelayInstaller.js +2 -0
- package/dist/core/SlackReplyRelayInstaller.js.map +1 -1
- package/dist/core/StateManager.d.ts +8 -0
- package/dist/core/StateManager.d.ts.map +1 -1
- package/dist/core/StateManager.js +11 -0
- package/dist/core/StateManager.js.map +1 -1
- package/dist/core/WriteDomainRegistry.d.ts.map +1 -1
- package/dist/core/WriteDomainRegistry.js +9 -0
- package/dist/core/WriteDomainRegistry.js.map +1 -1
- package/dist/core/claudeKeyRecovery.d.ts +102 -0
- package/dist/core/claudeKeyRecovery.d.ts.map +1 -0
- package/dist/core/claudeKeyRecovery.js +178 -0
- package/dist/core/claudeKeyRecovery.js.map +1 -0
- package/dist/core/memorySessionPolicy.d.ts +12 -0
- package/dist/core/memorySessionPolicy.d.ts.map +1 -1
- package/dist/core/memorySessionPolicy.js +20 -0
- package/dist/core/memorySessionPolicy.js.map +1 -1
- package/dist/core/pickSessionByTmux.d.ts +11 -0
- package/dist/core/pickSessionByTmux.d.ts.map +1 -0
- package/dist/core/pickSessionByTmux.js +11 -0
- package/dist/core/pickSessionByTmux.js.map +1 -0
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/data/standards-guard-index.json +2 -2
- package/dist/data/standards-guard-index.meta.json +3 -3
- package/dist/data/standards-registry.md +12 -2
- package/dist/data/standards-registry.meta.json +3 -3
- package/dist/feedback-factory/execute/changeSet.d.ts.map +1 -1
- package/dist/feedback-factory/execute/changeSet.js +18 -1
- package/dist/feedback-factory/execute/changeSet.js.map +1 -1
- package/dist/feedback-factory/execute/executePolicy.d.ts +1 -1
- package/dist/feedback-factory/execute/executePolicy.d.ts.map +1 -1
- package/dist/feedback-factory/execute/executePolicy.js +2 -2
- package/dist/feedback-factory/execute/executePolicy.js.map +1 -1
- package/dist/messaging/SpawnRequestManager.d.ts +31 -0
- package/dist/messaging/SpawnRequestManager.d.ts.map +1 -1
- package/dist/messaging/SpawnRequestManager.js +149 -11
- package/dist/messaging/SpawnRequestManager.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +11 -11
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +59 -14
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/messaging/slack/SlackAdapter.d.ts +23 -0
- package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -1
- package/dist/messaging/slack/SlackAdapter.js +69 -0
- package/dist/messaging/slack/SlackAdapter.js.map +1 -1
- package/dist/native/InstarWedgeCanary.app/Contents/MacOS/InstarWedgeCanary +0 -0
- package/dist/native/instar-desktop-host +0 -0
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +9 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +1 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +1 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +4 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +99 -4
- package/dist/server/routes.js.map +1 -1
- package/dist/testing/selfActionRegistry.d.ts.map +1 -1
- package/dist/testing/selfActionRegistry.js +48 -0
- package/dist/testing/selfActionRegistry.js.map +1 -1
- package/dist/threadline/A2ADeliveryTracker.d.ts +49 -0
- package/dist/threadline/A2ADeliveryTracker.d.ts.map +1 -1
- package/dist/threadline/A2ADeliveryTracker.js +81 -2
- package/dist/threadline/A2ADeliveryTracker.js.map +1 -1
- package/dist/threadline/InboundMessageGate.d.ts.map +1 -1
- package/dist/threadline/InboundMessageGate.js +12 -0
- package/dist/threadline/InboundMessageGate.js.map +1 -1
- package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
- package/dist/threadline/ThreadlineBootstrap.js +13 -2
- package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
- package/dist/threadline/ThreadlineEndpoints.d.ts.map +1 -1
- package/dist/threadline/ThreadlineEndpoints.js +9 -0
- package/dist/threadline/ThreadlineEndpoints.js.map +1 -1
- package/dist/threadline/ThreadlineMCPServer.d.ts +25 -1
- package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
- package/dist/threadline/ThreadlineMCPServer.js +38 -1
- package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
- package/dist/threadline/ThreadlineMcpHttpService.d.ts.map +1 -1
- package/dist/threadline/ThreadlineMcpHttpService.js +6 -2
- package/dist/threadline/ThreadlineMcpHttpService.js.map +1 -1
- package/dist/threadline/ThreadlineRouter.d.ts +17 -1
- package/dist/threadline/ThreadlineRouter.d.ts.map +1 -1
- package/dist/threadline/ThreadlineRouter.js +22 -2
- package/dist/threadline/ThreadlineRouter.js.map +1 -1
- package/dist/threadline/TopicLinkageHandler.d.ts +9 -0
- package/dist/threadline/TopicLinkageHandler.d.ts.map +1 -1
- package/dist/threadline/TopicLinkageHandler.js +13 -2
- package/dist/threadline/TopicLinkageHandler.js.map +1 -1
- package/dist/threadline/autoAck.d.ts +37 -21
- package/dist/threadline/autoAck.d.ts.map +1 -1
- package/dist/threadline/autoAck.js +34 -19
- package/dist/threadline/autoAck.js.map +1 -1
- package/dist/threadline/client/MessageEncryptor.d.ts +5 -0
- package/dist/threadline/client/MessageEncryptor.d.ts.map +1 -1
- package/dist/threadline/client/MessageEncryptor.js.map +1 -1
- package/dist/threadline/client/ThreadlineClient.d.ts +26 -0
- package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
- package/dist/threadline/client/ThreadlineClient.js +70 -4
- package/dist/threadline/client/ThreadlineClient.js.map +1 -1
- package/dist/threadline/inboundIdLedgerWiring.d.ts.map +1 -1
- package/dist/threadline/inboundIdLedgerWiring.js +4 -1
- package/dist/threadline/inboundIdLedgerWiring.js.map +1 -1
- package/dist/threadline/mcp-http-client.d.ts +11 -0
- package/dist/threadline/mcp-http-client.d.ts.map +1 -1
- package/dist/threadline/mcp-http-client.js +34 -0
- package/dist/threadline/mcp-http-client.js.map +1 -1
- package/dist/threadline/mcp-stdio-entry.js +4 -1
- package/dist/threadline/mcp-stdio-entry.js.map +1 -1
- package/dist/threadline/requiredAck.d.ts +64 -0
- package/dist/threadline/requiredAck.d.ts.map +1 -0
- package/dist/threadline/requiredAck.js +117 -0
- package/dist/threadline/requiredAck.js.map +1 -0
- package/dist/threadline/requiredAckService.d.ts +223 -0
- package/dist/threadline/requiredAckService.d.ts.map +1 -0
- package/dist/threadline/requiredAckService.js +565 -0
- package/dist/threadline/requiredAckService.js.map +1 -0
- package/dist/threadline/requiredAckStore.d.ts +149 -0
- package/dist/threadline/requiredAckStore.d.ts.map +1 -0
- package/dist/threadline/requiredAckStore.js +283 -0
- package/dist/threadline/requiredAckStore.js.map +1 -0
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +66 -66
- package/src/data/feature-ladders.json +3 -1
- package/src/data/standards-guard-index.json +2 -2
- package/src/data/standards-guard-index.meta.json +3 -3
- package/src/data/standards-registry.md +12 -2
- package/src/data/standards-registry.meta.json +3 -3
- package/src/scaffold/templates.ts +9 -0
- package/src/templates/scripts/slack-reply.sh +7 -0
- package/upgrades/1.3.1663.md +77 -0
- package/upgrades/cloud-key-recovery-reply.eli16.md +19 -0
- package/upgrades/side-effects/a2a-required-acknowledgment.md +130 -0
- package/upgrades/side-effects/agent-health-quiet-default.md +74 -0
- package/upgrades/side-effects/cloud-key-recovery-reply.md +141 -0
- package/upgrades/side-effects/feedback-changeset-byte-cap-calibration.md +60 -0
- package/upgrades/side-effects/memory-privacy-ladder-off-by-default.md +100 -0
- package/upgrades/side-effects/memory-privacy-linux-replies.md +109 -0
- package/upgrades/side-effects/person-decides-counterpart.md +62 -0
- package/upgrades/side-effects/session-by-tmux.md +48 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Side-Effects Review — Feedback change set byte cap calibration
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `feedback-changeset-byte-cap-calibration`
|
|
4
|
+
**Date:** 2026-11-04
|
|
5
|
+
**Author:** Echo
|
|
6
|
+
**Second-pass reviewer:** independent decision reviewer
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
Raise the feedback executor's full-file byte ceiling from 4 to 5 MiB so edits to the measured `server.ts` and `routes.ts` pair can enter review. Above 4 MiB, every added or modified file must be valid UTF-8 text without NUL bytes. Keep the 200-file cap, confinement and secret gates, 192 KiB independent diff-review ceiling, and downstream test/CI gates. Parent spec, code comments and unit boundaries are updated in the same patch.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
- `buildChangeSet` byte ceiling — modify — deterministic resource/safety limit becomes 5 MiB.
|
|
15
|
+
- `buildChangeSet` over-4 MiB binary rule — add — opaque content stays under the former aggregate limit.
|
|
16
|
+
- Existing special-file, `.claude`, credential, diff and file-count gates — pass-through.
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
|
|
20
|
+
A valid change above 4 MiB containing an added binary fixture, a NUL-bearing source file, or non-UTF-8 text still fails. This preserves the former allowance for opaque files because the independent PR diff may omit their bytes. Legitimate text changes above 5 MiB also fail; the worker can split the fix or the cap can be recalibrated with measured evidence.
|
|
21
|
+
|
|
22
|
+
## 2. Under-block
|
|
23
|
+
|
|
24
|
+
A valid UTF-8 file without NUL could still encode opaque content, so this is not a semantic text proof. Secret scanning still sees the full bytes, and independent review sees the PR diff; the 192 KiB diff refusal limits changed text. The rejected a1 candidate has no recorded total byte size and is not proven to fit the new cap.
|
|
25
|
+
|
|
26
|
+
## 3. Level-of-abstraction fit
|
|
27
|
+
|
|
28
|
+
`buildChangeSet` owns trusted extraction from the confined workspace and already enforces aggregate size. The adjacent text check protects the only newly admitted size range. It does not decide whether the patch is useful or correct; the existing independent review and tests do that.
|
|
29
|
+
|
|
30
|
+
## 4. Signal vs authority compliance
|
|
31
|
+
|
|
32
|
+
Required reference: [Signal vs Authority](../../docs/signal-vs-authority.md). This is a hard resource and opaque-content invariant on an untrusted worker payload before copying it to a trusted clone. The exact byte, NUL and UTF-8 facts are deterministic and complete for this narrow rule. A model cannot safely waive the resource bound; it still judges the patch afterward.
|
|
33
|
+
|
|
34
|
+
## 4b. Judgment-point check
|
|
35
|
+
|
|
36
|
+
No new static heuristic at a competing-signals decision point. The bounded payload allowance is an invariant; usefulness and risk remain with independent review.
|
|
37
|
+
|
|
38
|
+
## 5. Interactions
|
|
39
|
+
|
|
40
|
+
The 5 MiB aggregate cap runs during trusted workspace extraction. The binary rule runs after aggregate accounting and before the change set returns. The secret gate later scans full bytes, and independent review retains the diff ceiling. No concurrent state or cleanup behavior changes; a failed attempt is already disposed and needs a fresh run.
|
|
41
|
+
|
|
42
|
+
## 6. External surfaces
|
|
43
|
+
|
|
44
|
+
The executor may now create a reviewable PR from a text-only change between 4 and 5 MiB where it previously failed `changeset-too-large`. No new operator action, API shape, user notice, persistent record format, or migration is introduced. Existing agents receive the changed compiled code on update.
|
|
45
|
+
|
|
46
|
+
## 6b. Operator-surface quality
|
|
47
|
+
|
|
48
|
+
No operator surface is touched.
|
|
49
|
+
|
|
50
|
+
## 7. Multi-machine posture
|
|
51
|
+
|
|
52
|
+
The gate is the same code invariant on each installed machine. Existing canonical-owner selection chooses where feedback execution runs; this patch adds no replicated state, phone action, URL, or notice.
|
|
53
|
+
|
|
54
|
+
## 8. Rollback cost
|
|
55
|
+
|
|
56
|
+
Revert the constant and binary condition in a normal release. No data migration or state repair is needed. Any PR already created remains under review, exact-head tests and CI; rollback does not merge it.
|
|
57
|
+
|
|
58
|
+
## Second-pass response
|
|
59
|
+
|
|
60
|
+
Concur with the review. The artifact matches the current diff; the 5 MiB text allowance, retained 4 MiB binary ceiling, 200-file cap, secret scan and independent review gates are accurately described. No migration or operator surface is introduced. (Independent decision reviewer, 2026-11-04.)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Side-Effects Review — memory privacy: spec and maturation board match off-by-default
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `memory-privacy-ladder-off-by-default`
|
|
4
|
+
**Date:** `2026-11-04`
|
|
5
|
+
**Author:** `echo`
|
|
6
|
+
**Second-pass reviewer:** `not required — Tier 1: documentation and board data only; no runtime decision changes`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
Tier 1, 4 files, about 20 lines. `docs/specs/memory-privacy.md` still said "on by default", "fleet: default on" and "dark-window: none", but since PR 2744 (1.3.1657) the feature has shipped off by default, by Justin's decision on 2026-11-04. The spec now says off by default in section 8, adds a `ladder:` line, and rewrites the maturation plan: development rung by owner opt-in (nimbus first), fleet final off by recorded preference, criterion and dark window dated. `src/data/feature-ladders.json` gains a `memoryPrivacy` entry: `final: default-off-by-preference`, the recorded decision (decider, reason, date, reference), risk sensitive, a dev rung with `advance: code`, and tracking `needed`, since the feature logs no evidence yet. The ELI16 line that read as if it turns on by itself is reworded. Effort: one commit attempt, no review rounds.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
No runtime decision point changes. The board reads the new entry; with `advance: code`, nothing will flip the setting on its own.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
|
|
20
|
+
No block/allow surface — over-block not applicable.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Under-block
|
|
25
|
+
|
|
26
|
+
No block/allow surface — under-block not applicable.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 3. Level-of-abstraction fit
|
|
31
|
+
|
|
32
|
+
The ladder registry is the single home for graduation decisions (Maturation Path clause d), so the preference final belongs there, not only in prose.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 4. Signal vs authority compliance
|
|
37
|
+
|
|
38
|
+
**Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
39
|
+
|
|
40
|
+
- [x] No — this change has no block/allow surface.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 4b. Judgment-point check (Judgment Within Floors standard)
|
|
45
|
+
|
|
46
|
+
No new static heuristic at a competing-signals decision point.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 5. Interactions
|
|
51
|
+
|
|
52
|
+
The maturation service will list the entry. Its dev rung reads `logs/feature-evidence.jsonl`, where nothing is written yet, so it reads as not started; the tracking plan says so. `advance: code` keeps any automatic move from turning on a restricting setting.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 6. External surfaces
|
|
57
|
+
|
|
58
|
+
The maturation board shows one new entry. No agent behaviour or user-facing message changes.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 6b. Operator-surface quality (Operator-Surface Quality standard)
|
|
63
|
+
|
|
64
|
+
No operator surface — not applicable.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 7. Multi-machine posture (Cross-Machine Coherence)
|
|
69
|
+
|
|
70
|
+
The ladder data ships with the package, identical on every machine. No state, notices or URLs.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 8. Rollback cost
|
|
75
|
+
|
|
76
|
+
Revert the commit. No persistent state.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Conclusion
|
|
81
|
+
|
|
82
|
+
Brings the document and the board in line with what ships. Clear to ship.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Second-pass review (if required)
|
|
87
|
+
|
|
88
|
+
Not required.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Evidence pointers
|
|
93
|
+
|
|
94
|
+
Ladder tests 45/45; `findMaturationPlanGaps(spec, { requireLadder: true })` → ok. Follow-up for the boot check is tracked as ACT-047.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Class-Closure Declaration (display-only mirror)
|
|
99
|
+
|
|
100
|
+
No agent-authored-artifact defect — not applicable.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Side-Effects Review — memory privacy: replies reach the server from Linux sandboxed sessions
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `memory-privacy-linux-replies`
|
|
4
|
+
**Date:** `2026-11-04`
|
|
5
|
+
**Author:** `echo`
|
|
6
|
+
**Second-pass reviewer:** `not required — Tier 1: no new reach, no block/allow surface, Linux-only, opt-in feature`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
Tier 1, 6 files, about 90 lines including tests and docs. Fixes fb-0fd50d5c-bad. With `memoryPrivacy.enabled: true` on Linux, a scoped session runs in bubblewrap with its own network namespace, and the sandbox's `NO_PROXY` lists `localhost`, so every reply script's curl went direct and failed with exit 7: memory was kept private but nobody got a reply. `src/core/memorySessionPolicy.ts` gains `prepareSessionCurlHome(scopeDir)`, which on Linux writes `<scope>/.curl/.curlrc` with `noproxy = ""` and returns that folder. `src/core/SessionManager.ts` passes it to scoped sessions as `CURL_HOME`, so curl sends `localhost` through the sandbox proxy, which already allows it (`localhost` is in `allowedDomains`). macOS and privacy-off sessions are unchanged. Effort: one commit attempt so far, no spec review rounds (the converged memory-privacy spec already says the session reaches localhost; this makes Linux match it).
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
- Memory-session launch (`SessionManager` scoped spawn) — modify — adds one environment variable on Linux; no allow/deny decision changes.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
|
|
20
|
+
No block/allow surface — over-block not applicable.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Under-block
|
|
25
|
+
|
|
26
|
+
No block/allow surface. On reach: the session gains nothing new. It could already run `curl --noproxy '' -x "$HTTP_PROXY" http://localhost:...` itself; this only makes the reply scripts do what the sandbox already permits. The proxy still filters by `allowedDomains`, and the server still accepts only the session's limited `mps_` token. The file boundary is untouched: in the live run the agent home's files stayed unreadable.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 3. Level-of-abstraction fit
|
|
31
|
+
|
|
32
|
+
Right layer: the spawn already owns the session's environment (`TMPDIR`, `CLAUDE_CODE_TMPDIR`, `INSTAR_PORT`). Changing each reply script would need a migration for five scripts and would miss any curl the session runs on its own; `CURL_HOME` covers all of them from one place.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 4. Signal vs authority compliance
|
|
37
|
+
|
|
38
|
+
**Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
39
|
+
|
|
40
|
+
- [x] No — this change has no block/allow surface.
|
|
41
|
+
|
|
42
|
+
It sets a transport setting for the session's curl; nothing is decided or refused.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 4b. Judgment-point check (Judgment Within Floors standard)
|
|
47
|
+
|
|
48
|
+
No new static heuristic at a competing-signals decision point. The platform check is an invariant: Linux sandboxes use a separate network namespace, macOS does not.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 5. Interactions
|
|
53
|
+
|
|
54
|
+
- **Shadowing:** none; reply scripts run unchanged and pick up the setting from curl itself.
|
|
55
|
+
- **Double-fire:** none.
|
|
56
|
+
- **Races:** the file is rewritten at every spawn of that scope; two sessions on the same scope write identical bytes.
|
|
57
|
+
- **Feedback loops:** none.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 6. External surfaces
|
|
62
|
+
|
|
63
|
+
Only agents with memory privacy turned on, on Linux. Their replies now reach Slack, Telegram, WhatsApp and the app again. No operator-facing actions.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 6b. Operator-surface quality (Operator-Surface Quality standard)
|
|
68
|
+
|
|
69
|
+
No operator surface — not applicable.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 7. Multi-machine posture (Cross-Machine Coherence)
|
|
74
|
+
|
|
75
|
+
Machine-local by design: the file lives in the machine-local scope folder that the spec already keeps on one machine, and it describes this machine's sandbox. No notices, no URLs, no new status surfaces.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 8. Rollback cost
|
|
80
|
+
|
|
81
|
+
Pure code change: revert and ship a patch. The leftover `.curl/.curlrc` in scope folders is inert without `CURL_HOME`.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Conclusion
|
|
86
|
+
|
|
87
|
+
Clear to ship. It restores replies for Linux agents that opted in, without widening what the session can reach. Follow-up worth considering, not required here: the boot probe could also check that the server answers from inside the sandbox before reporting `sandboxReady: true`.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Second-pass review (if required)
|
|
92
|
+
|
|
93
|
+
Not required (Tier 1, no block/allow surface, no new reach).
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Evidence pointers
|
|
98
|
+
|
|
99
|
+
Live on Hetzner mp-privacy-test (Ubuntu 24.04, Claude Code 2.1.318, a local stand-in for the model API so no account was used), real settings from `buildMemorySessionSettings`, real `slack-reply.sh` and `telegram-reply.sh`, stand-in server on 127.0.0.1:4040:
|
|
100
|
+
- Without the change: `curl: (7) Failed to connect to localhost port 4040`, slack rc=1, server saw nothing.
|
|
101
|
+
- With `CURL_HOME`: "Sent 22 chars to channel C123ABC", "Sent 9 chars to topic 42"; server saw `/slack/reply/C123ABC`, `/messaging/preflight`, `/telegram/reply/42`, each with `Bearer mps_scoped`; reading the agent home's notes file still failed with Permission denied.
|
|
102
|
+
- Proxy without its credentials answers 407, which an earlier probe read as an empty reply.
|
|
103
|
+
Tests: `tests/unit/memory-session-policy.test.ts`, `tests/integration/memory-privacy-spawn.test.ts`.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Class-Closure Declaration (display-only mirror)
|
|
108
|
+
|
|
109
|
+
No agent-authored-artifact defect — not applicable.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Side-Effects Review — The Person Decides; the Agent Does the Rest (1.x counterpart of Rule 120)
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `person-decides-counterpart`
|
|
4
|
+
**Date:** `2026-11-04`
|
|
5
|
+
**Author:** `echo`
|
|
6
|
+
**Second-pass reviewer:** `GPT-6 Astra, on the final diff`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
A constitution text change. A new article, *The Person Decides; the Agent Does the Rest*, joins the Interaction family as a tree node under *Agent Proposes, Operator Approves*, which gains the back-link. It carries the same obligation as 2.0 Rule 120 (instar-2 PR 190): the agent does the research, account management and operation, and the person only approves or declines, asks for changes, or supplies a credential. It says plainly that nothing enforces it yet and names the two checks owed. The alignment map gains the pair's rows, the generated hierarchy block is regenerated, the Interaction family audit is re-recorded, and the article-count assertion moves from 94 to 95.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
None added. No code path changes.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
|
|
20
|
+
No block surface. The article names an outbound check for later building; it builds none.
|
|
21
|
+
|
|
22
|
+
## 2. Under-block
|
|
23
|
+
|
|
24
|
+
Until the outbound check and the per-service live proofs exist, an agent can still hand the person a setup task and nothing stops it. The article says so in **Applied through**.
|
|
25
|
+
|
|
26
|
+
## 3. Level-of-abstraction fit
|
|
27
|
+
|
|
28
|
+
A child of *Agent Proposes, Operator Approves*: that parent governs the shape of one ask, and this states the whole boundary of what may be asked. *No Manual Work* is the other natural parent, but its title cannot be named in the tree-node syntax (it contains emphasis markers), and the placement prose names it.
|
|
29
|
+
|
|
30
|
+
## 4. Signal vs authority compliance
|
|
31
|
+
|
|
32
|
+
Compliant: the article creates no authority. The owed outbound check would be a hold on a message, to be designed under `docs/signal-vs-authority.md` when it is built.
|
|
33
|
+
|
|
34
|
+
## 5. Interactions
|
|
35
|
+
|
|
36
|
+
*Self-Unblock Before Escalating* still decides whether the person is asked at all. *Sovereignty* keeps "if it's the human's, ask", which the alignment map already lists as conflict 5; acting in the person's accounts happens inside the authority they granted, and this change does not resolve that conflict. *The Agent Carries the Loop* (follow-through) is unaffected.
|
|
37
|
+
|
|
38
|
+
## 6. External surfaces
|
|
39
|
+
|
|
40
|
+
None at runtime. The published constitution text changes.
|
|
41
|
+
|
|
42
|
+
## 7. Multi-machine posture
|
|
43
|
+
|
|
44
|
+
Repo-tracked text; unified.
|
|
45
|
+
|
|
46
|
+
## 8. Rollback cost
|
|
47
|
+
|
|
48
|
+
A revert of the text, the map rows, the count assertion and the re-recorded Interaction audit.
|
|
49
|
+
|
|
50
|
+
## Second-pass review
|
|
51
|
+
|
|
52
|
+
**Reviewer:** independent cross-family reader, codex-cli on gpt-6-astra
|
|
53
|
+
|
|
54
|
+
Read the final diff and the 2.0 rule book with Rule 120. Six findings, all low. No drift from Rule 120: "within the authority granted" makes explicit what 2.0 Sovereignty already imposes, and dropping the executive-assistant analogy changes no obligation. Placement sound and the overlaps complementary; *Never a False Blocker*'s physical-action and CAPTCHA allowance is a tension that *Self-Unblock Before Escalating* already has with the same ladder, and this change imports Rule 120 rather than resolving it. No enforcement overclaim. Map counts and rows independently re-counted and correct. Two wording nits applied: the overview now says "no runtime enforcement changes" rather than "agents behave the same", and this artifact says "same obligation" rather than "same wording". Tree-parentage, insertion-placement, hierarchy and countdown checks all pass. Concur with the review: VERDICT YES.
|
|
55
|
+
|
|
56
|
+
## Counterpart
|
|
57
|
+
|
|
58
|
+
instar-2 PR 190 adds Rule 120 with the same obligation, and is the master, so it merges first.
|
|
59
|
+
|
|
60
|
+
## Test expectations changed
|
|
61
|
+
|
|
62
|
+
`tests/unit/standards-coverage-ratchet.test.ts`: article count 94 to 95.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Side-Effects Review — lookups by tmux name find the live session
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `session-by-tmux`
|
|
4
|
+
**Date:** `2026-11-04`
|
|
5
|
+
**Author:** `echo`
|
|
6
|
+
**Second-pass reviewer:** gpt-6-astra via codex, outside review, two rounds. Round one objected: `ThreadlineMcpHttpService.noteCallFailure` still took the first record by name. Fixed through the shared `pickSessionByTmux`. Round two concurred.
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
`state.listSessions().find(s => s.tmuxSession === name)` returns whichever record the directory lists first, and a name is reused when a conversation comes back to a machine. A drain closed a finished record, was told `already-completed`, and left the running session on the machine the conversation had left (signed red, Studio to Mini, 2026-11-04). `StateManager.findSessionByTmux` prefers a running record, then the newest, at all nine lookups, and a test keeps the pattern out of `src`.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
- Session lookup by name — modify — nine call sites read `StateManager.findSessionByTmux`, and the Threadline failure report reads the same `pickSessionByTmux` rule. No decision rule changes; each now reads the right record.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
|
|
20
|
+
The drain now closes a session it used to miss. That is the intent: the record says the conversation lives elsewhere. Closing still goes through `terminateWithAuthority`.
|
|
21
|
+
|
|
22
|
+
## 2. Under-block
|
|
23
|
+
|
|
24
|
+
Only records with a shared name change outcome. If a name has no running record the newest wins, which is the closest fact available.
|
|
25
|
+
|
|
26
|
+
## 3. Level-of-abstraction fit
|
|
27
|
+
|
|
28
|
+
One pure rule, `pickSessionByTmux`, exposed on `StateManager`, the owner of session records, rather than a fix at the drain alone, because ten sites had the same fault. The Threadline service gets its records from an injected list, so it calls the rule directly.
|
|
29
|
+
|
|
30
|
+
## 4. Signal vs authority compliance
|
|
31
|
+
|
|
32
|
+
No new authority. Readers get a truer record.
|
|
33
|
+
|
|
34
|
+
## 5. Interactions
|
|
35
|
+
|
|
36
|
+
Each site meant "the session this name means now": framework resolution, the output route, bound-session reads, delivery incarnation checks and the drain. The Threadline failure report no longer stays silent for a live HTTP session that shares a name with a finished stdio record. `DeviceLimitSessionMover` keeps its injected list and is exempt in the guard. The result is a copy, as before.
|
|
37
|
+
|
|
38
|
+
## 6. External surfaces
|
|
39
|
+
|
|
40
|
+
None. No route shape, config or message changes.
|
|
41
|
+
|
|
42
|
+
## 7. Multi-machine posture
|
|
43
|
+
|
|
44
|
+
Machine-local records. It fixes a multi-machine symptom: one conversation running in two places after a return trip.
|
|
45
|
+
|
|
46
|
+
## 8. Rollback cost
|
|
47
|
+
|
|
48
|
+
Revert the commit. No state depends on it.
|