instar 1.3.369 → 1.3.371

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.
Files changed (42) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +40 -1
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +3 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/CoherenceJournal.d.ts +12 -1
  8. package/dist/core/CoherenceJournal.d.ts.map +1 -1
  9. package/dist/core/CoherenceJournal.js +38 -2
  10. package/dist/core/CoherenceJournal.js.map +1 -1
  11. package/dist/core/JournalSyncApplier.d.ts.map +1 -1
  12. package/dist/core/JournalSyncApplier.js +16 -0
  13. package/dist/core/JournalSyncApplier.js.map +1 -1
  14. package/dist/core/PoolActivityView.d.ts +87 -0
  15. package/dist/core/PoolActivityView.d.ts.map +1 -0
  16. package/dist/core/PoolActivityView.js +146 -0
  17. package/dist/core/PoolActivityView.js.map +1 -0
  18. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  19. package/dist/core/PostUpdateMigrator.js +16 -0
  20. package/dist/core/PostUpdateMigrator.js.map +1 -1
  21. package/dist/scaffold/templates.d.ts.map +1 -1
  22. package/dist/scaffold/templates.js +4 -0
  23. package/dist/scaffold/templates.js.map +1 -1
  24. package/dist/server/routes.d.ts.map +1 -1
  25. package/dist/server/routes.js +56 -1
  26. package/dist/server/routes.js.map +1 -1
  27. package/dist/threadline/ConversationMeshView.d.ts +50 -0
  28. package/dist/threadline/ConversationMeshView.d.ts.map +1 -0
  29. package/dist/threadline/ConversationMeshView.js +78 -0
  30. package/dist/threadline/ConversationMeshView.js.map +1 -0
  31. package/dist/threadline/ConversationStore.d.ts +17 -0
  32. package/dist/threadline/ConversationStore.d.ts.map +1 -1
  33. package/dist/threadline/ConversationStore.js +52 -0
  34. package/dist/threadline/ConversationStore.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/data/builtin-manifest.json +63 -63
  37. package/src/scaffold/templates.ts +4 -0
  38. package/upgrades/1.3.370.md +38 -0
  39. package/upgrades/1.3.371.md +62 -0
  40. package/upgrades/side-effects/pool-activity-view-p4.md +54 -0
  41. package/upgrades/side-effects/reflex-placement-fallback.md +57 -0
  42. package/upgrades/side-effects/threadline-conversation-kind-p3.md +83 -0
@@ -0,0 +1,54 @@
1
+ # Side-Effects Review — Pool-Wide Parallel-Work Awareness build (P4.1)
2
+
3
+ **Version / slug:** `pool-activity-view-p4`
4
+ **Date:** `2026-06-06`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required (implements the 2-round-converged P4 spec; a read-only fold over already-replicated journal streams; zero new stores/verbs/loops)`
7
+
8
+ ## Summary of the change
9
+
10
+ POOL-WIDE-PARALLEL-WORK-SPEC (converged 2026-06-06; spec + report + eli16
11
+ ride this PR): `GET /parallel-work/activities?scope=pool` answers "what is
12
+ every machine of mine working on, and is anything overlapping?" by
13
+ composing the LOCAL parallel-work index with the journal replicas P1
14
+ already ships.
15
+
16
+ 1. `src/core/PoolActivityView.ts` — NET-NEW fold on the reader's raw
17
+ query() path (round-1: readOwnAutonomousRuns is own-only; no lifecycle
18
+ helper exists). Discriminated union rows (`kind: 'local'|'remote'`)
19
+ with NAMED null absences; remote `running` derived PER INSTANCE
20
+ (sessionId/runId) then any-active aggregated — a later terminal for
21
+ session B never masks still-running session A; `lowConfidence` rides
22
+ the bound-hit flag; `possibleOverlap` pairs EVERY machine combination
23
+ (local↔remote and remote↔remote) and is annotated `recentMove` from
24
+ the answer-complete placement stream within the post-transfer closeout
25
+ window — the settling transient is distinguished, never a wolf-cry.
26
+ 2. The route: `?scope=pool` composes local + remote under the
27
+ `pool: { selfMachineId, replicasRead, boundHit }` honesty header —
28
+ LOCAL replica files, no peer fan-out (an offline peer's last-replicated
29
+ streams still answer). Default scope byte-identical; a dark replica
30
+ layer degrades pool scope to local rows (200); the pre-existing
31
+ no-index 503 unchanged.
32
+
33
+ ## 1-2. Over/Under-block
34
+
35
+ Over: none — read-only, never gates. Under: remote intent TEXT
36
+ (focus/tags) is machine-local by design (named absence; the P4.2 deferral
37
+ is registered in the project plan); the gapped-stream qualifier gains
38
+ teeth with the P1.3 reader states (named dependency — lowConfidence is
39
+ today's honest signal).
40
+
41
+ ## 3. Fit / 4. Blast radius
42
+
43
+ A pure module + a query-param branch on the existing route. Provenance
44
+ asymmetry (live local truth vs replica-derived remote) is structural in
45
+ the row shape. Worst case = a mislabeled advisory row; nothing actuates
46
+ off this view (Signal vs Authority).
47
+
48
+ ## Evidence
49
+
50
+ - tests/unit/PoolActivityView.test.ts — 5 passing: the union shape +
51
+ named absences + honesty header; per-instance aggregation
52
+ (B-terminal-never-masks-A); both kinds feeding one topic +
53
+ artifactsKnown; overlap pairs incl. remote↔remote + the recentMove
54
+ annotation; local-only degradation. Typecheck clean.
@@ -0,0 +1,57 @@
1
+ # Side-Effects Review — reflex journal-placement fallback (#930)
2
+
3
+ **Version / slug:** `reflex-placement-fallback`
4
+ **Date:** `2026-06-06`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required (third live-proof finding; ~20-line fallback with a wiring-shape regression test; admits only a read-only/jailed/verified pull)`
7
+
8
+ ## Summary of the change
9
+
10
+ #927's quiet-topic pin fallback (#926) is router-local-blind: the pin
11
+ written by a transfer lives on the LEASE HOLDER, so the pinned-TO machine
12
+ still answered not-owner (live, v1.3.369). Second fallback in wsOwnerOf:
13
+ the newest topic-placement JOURNAL entry (own + replica) — `owner ===
14
+ self` ⇒ self-owned at that entry's epoch. The placement entry is emitted
15
+ at the router's CAS chokepoint (the strongest placement evidence
16
+ reachable from the target machine).
17
+
18
+ ## Signal-vs-Authority justification (the load-bearing call)
19
+
20
+ The journal-actuation ban guards kill/spawn/move decisions. What this
21
+ fallback admits is a working-set PULL: read-only on the source,
22
+ hash-verified, jailed, never-clobber on the destination, idempotent, and
23
+ still guarded by the per-write stillCurrent recheck (any REAL claim
24
+ supersedes the in-flight pull). Nomination has run on replica evidence
25
+ since P2 §3.3 by design — this extends the same trust class to the
26
+ ownership precondition for the same operation, nothing else. The
27
+ coordinator module is deliberately NOT in the actuation-ban set (it
28
+ already imports the reader for nomination).
29
+
30
+ ## 1-2. Over/Under-block
31
+
32
+ Over: none new — the fallback only ever yields SELF. Under: a topic
33
+ whose placement was never journaled (pre-P1 history) still answers
34
+ not-owner honestly.
35
+
36
+ ## 3. Fit / 4. Blast radius
37
+
38
+ ~20 lines in the existing wsOwnerOf seam (the spec-named home), spec
39
+ §3.3 delta + eli16 amendment ride along. Active only where replication
40
+ is explicitly enabled. Worst case = an unnecessary pull that verifies
41
+ and lands nothing new.
42
+
43
+ ## Evidence
44
+
45
+ - tests/unit/working-set-ownerof-wiring.test.ts — wiring-shape assertion
46
+ for BOTH fallback steps + the honest default.
47
+ - Typecheck clean. The live proof completes on the echo pair after this
48
+ ships (the staged 77901 artifact + recorded hashes).
49
+
50
+ ## Addendum — the dropped commitments advert (same branch)
51
+
52
+ While verifying P1.5a live, found that fetchPeerCapacity's narrowing
53
+ return discarded the peer's commitmentsAdvert — driveCommitmentsSync
54
+ never fired; zero commitment replicas ever landed in either direction.
55
+ Pass-through (one spread line) + a source-shape regression test. The
56
+ integration suite drove the engine directly and missed this seam — the
57
+ wiring-integrity gap class.
@@ -0,0 +1,83 @@
1
+ # Side-Effects Review — Threadline Conversation Coherence build (P3.1 + P3.2 surfaces)
2
+
3
+ **Version / slug:** `threadline-conversation-kind-p3`
4
+ **Date:** `2026-06-06`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required (implements the 2-round-converged P3 spec; a 4th journal kind riding P1's proven transport; content-free by typed schema; read-only view)`
7
+
8
+ ## Summary of the change
9
+
10
+ THREADLINE-CONVERSATION-COHERENCE-SPEC (converged 2026-06-06, merged in
11
+ #924) — every machine can answer "which machine holds each A2A
12
+ conversation, and is it bound to a topic?" from local disk:
13
+
14
+ 1. The 4th journal kind `threadline-conversation` — the spec's honest
15
+ "compiler-guided multi-site edit" performed in full: JournalKind union,
16
+ JOURNAL_KINDS, 6 Record literals (nextSeq/highWaterSeq/opKeys/retention
17
+ merge/rateBuckets/persistMeta), the typed validate() branch
18
+ (action/conversationId/peerFingerprint/topicId? — free text
19
+ structurally excluded, 256-char id bounds), the opKeyOf branch
20
+ ((conversationId, action, topicId?) — conversationId lives in data,
21
+ the round-1 finding), the emitThreadlineConversation emitter, AND the
22
+ JournalSyncApplier.validateData mirror branch (without which the
23
+ receive side suspect-flags the sender). DEFAULT_RETENTION +
24
+ ConfigDefaults literal (8MiB × keep 8; applyDefaults backfills).
25
+ 2. ConversationStore: the lifecycle emission as a prev/next TRANSITION
26
+ DIFF inside commit() — the store's single write funnel — on `state` +
27
+ `boundTopicId` ONLY (message appends/lastActivity bumps emit NOTHING);
28
+ terminal set = resolved/failed/archived (the real enum);
29
+ setCoherenceJournalSeam + one wiring line at the store's construction
30
+ (journal in scope; emit drops harmlessly when absent/locked-out).
31
+ 3. NEW route GET /threadline/conversations (?scope=mesh) + the
32
+ ConversationMeshView fold: OWN rows from the LIVE store (the
33
+ authority — own-stream journal entries ignored), replica rows folded
34
+ per-stream last-writer on the composite (holderMachineId,
35
+ conversationId) key under the P1 reader's bounds, with staleness +
36
+ streamStatus + partial-result honesty. 200 with own rows when
37
+ replication is dark; 503 only when the store itself is absent.
38
+ 4. Agent Awareness on ALL THREE surfaces (template + migrateClaudeMd +
39
+ shadow markers + featureSections tracking): the holder-view trigger
40
+ including the relay's REAL offline bound (in-memory ~24h queue) in the
41
+ honest-answer wording.
42
+
43
+ ## Decision-point inventory
44
+
45
+ - Transition derivation: first-commit → started (+bound when born
46
+ bound); boundTopicId change → unbound(old)+bound(new); non-terminal →
47
+ terminal → closed. No fingerprint → no emission (nothing coherent to
48
+ record).
49
+ - The fold's `unbound` clears the binding; `closed` keeps the row with
50
+ status closed (existence stays answerable).
51
+ - Emission failure NEVER reaches the conversation write (observability
52
+ invariant; try/catch at the seam).
53
+
54
+ ## 1-2. Over/Under-block
55
+
56
+ Over: conversations without peer fingerprints never journal (deliberate).
57
+ Under: the P1.2 reader reports streamStatus 'current' always — the
58
+ gapped qualifier gains teeth with the P1.3 reader states (the spec's
59
+ named dependency); until then partial-result is the honesty signal.
60
+
61
+ ## 3. Fit / 4. Blast radius
62
+
63
+ The kind rides P1's transport/trust wholesale (proven by the integration
64
+ test reusing the journal-sync applier verbatim); the store seam is one
65
+ injected callback; the view is read-only. Emission is always-on with the
66
+ journal (like every kind); REPLICATION of it rides the existing explicit
67
+ gate. A bug can only mis-report holder visibility — nothing actuates off
68
+ this view (Signal vs Authority).
69
+
70
+ ## Evidence
71
+
72
+ - tests/unit/ThreadlineConversationKind.test.ts — 7 passing: schema
73
+ bounds + op-key dedupe; the commit() diff matrix (started/bound,
74
+ rebind unbound+bound naming the OLD topic, closed, non-lifecycle
75
+ emits NOTHING, no-fingerprint emits nothing); the fold (own-live +
76
+ replica last-writer + unbound clears + closed status + local scope).
77
+ - tests/integration/threadline-conversation-replication.test.ts — 1
78
+ passing: store lifecycle on A → journal → buildServeBatch → apply on
79
+ B under A's authenticated identity → B's mesh view names A as holder
80
+ with the binding → close converges on the next delta.
81
+ - CoherenceJournal (39 incl. the advert test updated for 4 kinds),
82
+ CoherenceJournalReader, JournalSyncApplier suites green;
83
+ feature-delivery-completeness (81) green. Typecheck clean.