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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +40 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +3 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/CoherenceJournal.d.ts +12 -1
- package/dist/core/CoherenceJournal.d.ts.map +1 -1
- package/dist/core/CoherenceJournal.js +38 -2
- package/dist/core/CoherenceJournal.js.map +1 -1
- package/dist/core/JournalSyncApplier.d.ts.map +1 -1
- package/dist/core/JournalSyncApplier.js +16 -0
- package/dist/core/JournalSyncApplier.js.map +1 -1
- package/dist/core/PoolActivityView.d.ts +87 -0
- package/dist/core/PoolActivityView.d.ts.map +1 -0
- package/dist/core/PoolActivityView.js +146 -0
- package/dist/core/PoolActivityView.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +16 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +4 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +56 -1
- package/dist/server/routes.js.map +1 -1
- package/dist/threadline/ConversationMeshView.d.ts +50 -0
- package/dist/threadline/ConversationMeshView.d.ts.map +1 -0
- package/dist/threadline/ConversationMeshView.js +78 -0
- package/dist/threadline/ConversationMeshView.js.map +1 -0
- package/dist/threadline/ConversationStore.d.ts +17 -0
- package/dist/threadline/ConversationStore.d.ts.map +1 -1
- package/dist/threadline/ConversationStore.js +52 -0
- package/dist/threadline/ConversationStore.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +63 -63
- package/src/scaffold/templates.ts +4 -0
- package/upgrades/1.3.370.md +38 -0
- package/upgrades/1.3.371.md +62 -0
- package/upgrades/side-effects/pool-activity-view-p4.md +54 -0
- package/upgrades/side-effects/reflex-placement-fallback.md +57 -0
- 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.
|