instar 1.3.347 → 1.3.348
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 +118 -4
- package/dist/commands/server.js.map +1 -1
- package/dist/core/CoherenceJournal.d.ts +13 -0
- package/dist/core/CoherenceJournal.d.ts.map +1 -1
- package/dist/core/CoherenceJournal.js +16 -0
- package/dist/core/CoherenceJournal.js.map +1 -1
- package/dist/core/MeshRpc.d.ts +17 -0
- package/dist/core/MeshRpc.d.ts.map +1 -1
- package/dist/core/MeshRpc.js +5 -1
- package/dist/core/MeshRpc.js.map +1 -1
- package/dist/core/PeerPresencePuller.d.ts +45 -0
- package/dist/core/PeerPresencePuller.d.ts.map +1 -1
- package/dist/core/PeerPresencePuller.js +59 -0
- package/dist/core/PeerPresencePuller.js.map +1 -1
- package/dist/redteam/ScenarioPack.d.ts +22 -5
- package/dist/redteam/ScenarioPack.d.ts.map +1 -1
- package/dist/redteam/ScenarioPack.js +19 -7
- package/dist/redteam/ScenarioPack.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/1.3.348.md +57 -0
- package/upgrades/coherence-journal-meshwire.eli16.md +9 -0
- package/upgrades/side-effects/coherence-journal-meshwire.md +49 -0
- package/upgrades/side-effects/resolver-verdict-honesty.md +45 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-06-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-06-06T06:16:53.583Z",
|
|
5
|
+
"instarVersion": "1.3.348",
|
|
6
6
|
"entryCount": 199,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: minor -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
**Coherence Journal mesh transport (P1 closing step)** — the `journal-sync`
|
|
9
|
+
MeshCommand + receive handler + own-stream advert on the `session-status`
|
|
10
|
+
response + `PeerPresencePuller` delta-drive that runs the merged
|
|
11
|
+
`JournalSyncApplier` over the existing 30s machine check-in
|
|
12
|
+
(COHERENCE-JOURNAL-SPEC §3.4 rule 5). Adverts are O(kinds) integers on the
|
|
13
|
+
heartbeat; entry deltas ride separate size-capped requests. Ships DARK
|
|
14
|
+
everywhere (gated on explicit `multiMachine.coherenceJournal.replication.enabled
|
|
15
|
+
=== true`) — merge does not change live mesh traffic; cross-machine sync is
|
|
16
|
+
a deliberate flip (the live two-machine proof).
|
|
17
|
+
|
|
18
|
+
The MTP red-team harness resolver (`src/redteam/ScenarioPack.ts`) now states its
|
|
19
|
+
governance verdicts honestly. Every `ResolvedExpectation` carries a `method`
|
|
20
|
+
field (`keyword-heuristic`), and the `reason` strings name their keyword-overlap
|
|
21
|
+
basis instead of asserting the verdict as fact — an `ungoverned` result is now
|
|
22
|
+
framed as a candidate to verify semantically, not a proven intent gap. The
|
|
23
|
+
matching logic is unchanged; only the verdict's self-description.
|
|
24
|
+
|
|
25
|
+
## What to Tell Your User
|
|
26
|
+
|
|
27
|
+
This is the wire that lets your agent's machines actually exchange their
|
|
28
|
+
diaries — but it ships switched OFF. Turning it on (so the Laptop can answer
|
|
29
|
+
"where did this conversation live on the Mini?") is a deliberate, watched
|
|
30
|
+
step, not something a code update flips silently.
|
|
31
|
+
|
|
32
|
+
Nothing user-facing changes. This is an internal correctness fix to an
|
|
33
|
+
experimental capability: the red-team harness no longer overstates a crude
|
|
34
|
+
keyword-match result as a definitive finding.
|
|
35
|
+
|
|
36
|
+
## Summary of New Capabilities
|
|
37
|
+
|
|
38
|
+
- None user-invocable yet — the transport is dark until the replication
|
|
39
|
+
switch is turned on. Internal: `journal-sync` mesh verb + advert-driven
|
|
40
|
+
delta replication.
|
|
41
|
+
|
|
42
|
+
- `ResolvedExpectation.method` field for provenance of every governance verdict.
|
|
43
|
+
- Honest verdict `reason` strings (keyword-overlap basis named; `ungoverned`
|
|
44
|
+
framed as candidate-to-verify).
|
|
45
|
+
|
|
46
|
+
## Evidence
|
|
47
|
+
|
|
48
|
+
- Integration round-trip (two in-process journal+applier pairs through a
|
|
49
|
+
real signed MeshRpc envelope; forged-sender rejection) + gated-drive unit
|
|
50
|
+
test (no-op when off, never throws). tsc + full lint chain clean.
|
|
51
|
+
|
|
52
|
+
Not a behavior change to classification — a truthfulness fix to the verdict
|
|
53
|
+
text + a provenance field, required by the Truthful Provenance standard (#896).
|
|
54
|
+
The brittleness it makes honest about was observed live: a false-negative
|
|
55
|
+
`ungoverned` verdict on the first boundary map. Verified by 26 unit tests
|
|
56
|
+
(one new, asserting method-provenance and that the as-fact phrasing is gone) and
|
|
57
|
+
a clean `tsc --noEmit`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# The diaries actually sync now (P1 closing step — mesh transport)
|
|
2
|
+
|
|
3
|
+
P1.1 made each machine keep its diaries, P1.2 made them readable, P1.3 built the engine that safely receives a peer's diary. This is the wire that connects them: machines now actually hand each other their diaries over the secure line they already use.
|
|
4
|
+
|
|
5
|
+
It's deliberately tiny and cheap. The existing once-every-30-seconds "are you alive?" check between machines now carries one extra scrap of information: a peer's "I'm at line N in each of my diaries." When a machine notices a peer is further along than the copy it holds, it asks for just the missing lines — over a separate, size-capped request, so the fast heartbeat itself never gets heavy. The receiving side runs every defense from P1.3 (a machine can only hand over its OWN diary; every line validated; restores caught; nothing trusted until durably saved).
|
|
6
|
+
|
|
7
|
+
**The safety choice that matters:** this ships DARK even on me. Merging it does NOT turn on cross-machine syncing. The transport and the drive are gated behind an explicit "replication on" switch that defaults off everywhere — so landing this code changes nothing about live mesh traffic. Turning it on between the Laptop and the Mini is a separate, deliberate, watched step (the live proof you pre-approved). This is on purpose: the mesh is load-bearing for everything, and "merge a PR" should never silently rewire it.
|
|
8
|
+
|
|
9
|
+
What the live proof will show, once both machines are on this version and I flip the switch: move conversation 13481 from the Laptop to the Mini, then ask the LAPTOP "where did 13481 live and why did it move?" — and it answers correctly from the Mini's synced diary. That's the whole initiative's promise, demonstrated end to end. After the proof, the switch can become the spec's default (live-on-dev); until then it stays off so nothing surprises us.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Side-Effects Review — Coherence Journal mesh transport (P1 closing step)
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `coherence-journal-meshwire`
|
|
4
|
+
**Date:** `2026-06-05`
|
|
5
|
+
**Author:** `echo`
|
|
6
|
+
**Second-pass reviewer:** `not required as a PR-time pass — design converged (§3.4 rule 5); this is the transport that drives the already-merged, already-reviewed JournalSyncApplier`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
Wires the `journal-sync` mesh transport (COHERENCE-JOURNAL-SPEC §3.4 rule 5) that drives the merged `JournalSyncApplier`: a `journal-sync` MeshCommand (read/observe RBAC class), an always-registered receive handler (serve own-stream batch / apply inbound), the own-stream advert piggybacked on the `session-status` response, and the `PeerPresencePuller` delta-drive (request + apply when a peer is ahead). The SEND/drive path is gated on `multiMachine.coherenceJournal.replication.enabled === true` (explicit true only) — ships DARK on every agent including echo; merge does not alter live mesh traffic.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
- `journal-sync` RBAC classification — ADD — read/observe class (any registered peer), same as capacity-report/session-status. No new authority: it serves/accepts replica DATA, never an actuation.
|
|
14
|
+
- Replication activation — gated on explicit `replication.enabled===true`; absent in ConfigDefaults → false everywhere. The proof flips it deliberately.
|
|
15
|
+
|
|
16
|
+
## 1. Over-block
|
|
17
|
+
Receive handler rejects forged/invalid entries via the applier's §3.4 gates (already reviewed) — counted, never silent. No new over-block surface on the live path (drive is dark).
|
|
18
|
+
|
|
19
|
+
## 2. Under-block
|
|
20
|
+
First-hop-only: a third machine's history relayed by a peer is rejected (accepted P1 limitation; transitive relay is post-P1). The receive handler being always-on is safe because the applier validates every entry and no peer SENDS unless its own replication flag is on.
|
|
21
|
+
|
|
22
|
+
## 3. Level-of-abstraction fit
|
|
23
|
+
Transport is a thin driver over the pure applier/writer; the puller carries the advert because the puller IS the existing 30s cadence (no new timer — §3.4 rule 5's grounded correction). Right seam.
|
|
24
|
+
|
|
25
|
+
## 4. Signal vs authority compliance
|
|
26
|
+
**Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
27
|
+
- [x] No — the transport moves signal data (replica streams). The §3.9 actuation-ban lint (merged) keeps consumers signal-only.
|
|
28
|
+
|
|
29
|
+
## 5. Interactions
|
|
30
|
+
- Heartbeat bloat: the advert is O(kinds) integers on the session-status RESPONSE; entry payloads ride SEPARATE size-capped journal-sync requests, never the heartbeat envelope (the master spec's JSON.stringify-on-hot-path root cause is avoided).
|
|
31
|
+
- Mixed-version: an old peer RBAC-default-denies journal-sync (403) or has no handler (501); the sender treats both as "peer lacks the verb" and backs off — no retry storm (gated drive only runs when replication is on anyway).
|
|
32
|
+
- Backward-compat: the journalAdvert field on session-status is optional; old callers parse permissively and ignore it (verified).
|
|
33
|
+
- guardWrite seam: replica appends go through state.guardJournalWrite (standby-safe, prefix-allowlisted) — same as the writer.
|
|
34
|
+
|
|
35
|
+
## 6. External surfaces
|
|
36
|
+
- New mesh verb on the wire ONLY when replication.enabled===true on the sender. On merge: dark everywhere → zero new mesh traffic. The receive handler accepts journal-sync if a peer ever sends, but no peer sends while dark.
|
|
37
|
+
- New replica files under state/coherence-journal/peers/ ONLY once the proof flips it on.
|
|
38
|
+
|
|
39
|
+
## 7. Rollback cost
|
|
40
|
+
Pure code revert + patch; replica files inert plain JSONL. The dark default means rollback before the proof is a no-op in practice.
|
|
41
|
+
|
|
42
|
+
## Conclusion
|
|
43
|
+
The transport lands dark by explicit gate so merge ≠ live mesh change; the live two-machine proof is a deliberate, monitored flip (pre-approved). The §3.4-rule-5 grounded transport (advert on the real 30s pull, deltas separate + capped) is implemented as specified. After a successful proof, the gate can move to the spec's live-on-dev default in a follow-up. Clear to ship dark.
|
|
44
|
+
|
|
45
|
+
## Second-pass review (if required)
|
|
46
|
+
**Reviewer:** convergence panel (§3.4 design-time) + the live two-machine proof as the closing functional verification.
|
|
47
|
+
|
|
48
|
+
## Evidence pointers
|
|
49
|
+
- tests/integration/journal-sync-roundtrip.test.ts (two in-process pairs through a real signed envelope; forged-sender rejection), tests/unit/PeerPresencePuller-journal.test.ts (gated drive; no-op when off; never throws).
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Side-effects review — red-team resolver verdict honesty
|
|
2
|
+
|
|
3
|
+
## What this change is
|
|
4
|
+
A two-part honesty fix to `src/redteam/ScenarioPack.ts` `resolveExpectation`:
|
|
5
|
+
(1) adds a `method: 'keyword-heuristic'` field to `ResolvedExpectation`;
|
|
6
|
+
(2) rewrites the governed/ungoverned `reason` strings so they name their
|
|
7
|
+
keyword-overlap basis and frame an `ungoverned` result as a candidate-to-verify
|
|
8
|
+
rather than an asserted intent gap. The matching LOGIC is unchanged — only the
|
|
9
|
+
verdict's self-description.
|
|
10
|
+
|
|
11
|
+
## Why
|
|
12
|
+
The keyword-overlap matcher produces false negatives (it misses
|
|
13
|
+
semantically-related constraints) and is rephrase-bypassable (CMT-1110). On the
|
|
14
|
+
first live boundary map it reported a false "ungoverned" finding as fact, which
|
|
15
|
+
briefly misled the author. The just-ratified Truthful Provenance standard
|
|
16
|
+
(#896) requires a verdict to carry the method that produced it; an asserted
|
|
17
|
+
heuristic verdict violated that.
|
|
18
|
+
|
|
19
|
+
## Blast radius
|
|
20
|
+
- **Behavior of governance classification: unchanged.** `governance` is still
|
|
21
|
+
`'governed'`/`'ungoverned'` by the same threshold; only `reason` text changed
|
|
22
|
+
and a `method` field was added. No scenario's pass/fail flips.
|
|
23
|
+
- **Consumers:** the only consumer of `reason`/`method` is the local
|
|
24
|
+
orchestrator (`.instar/scripts/redteam-run.mjs`), which prints them — it now
|
|
25
|
+
prints the honest text. No code branches on the reason string. The new
|
|
26
|
+
`method` field is additive (optional consumers ignore it).
|
|
27
|
+
- **No route, config, lifecycle, or migration surface touched.** Pure-logic
|
|
28
|
+
module with no runtime consumers in the server.
|
|
29
|
+
- **Type change:** `ResolvedExpectation` gains a required `method` field; both
|
|
30
|
+
return sites set it, and tsc is clean, so no caller breaks.
|
|
31
|
+
|
|
32
|
+
## Framework generality
|
|
33
|
+
Pure logic over parsed ORG-INTENT — no session-launch/inject/message-delivery
|
|
34
|
+
surface, framework-agnostic. No Claude-specific assumption.
|
|
35
|
+
|
|
36
|
+
## Test coverage
|
|
37
|
+
26 unit tests (was 25): a new test asserts every verdict carries
|
|
38
|
+
`method: 'keyword-heuristic'`, and the ungoverned test now asserts the reason
|
|
39
|
+
names the keyword basis + frames itself as a candidate (and that the old
|
|
40
|
+
as-fact phrasing is gone). Both sides of the governed/ungoverned boundary
|
|
41
|
+
covered. `tsc --noEmit` clean.
|
|
42
|
+
|
|
43
|
+
## Rollback
|
|
44
|
+
Revert the single file + test; zero runtime consequence (nothing branches on
|
|
45
|
+
the verdict text).
|