instar 1.3.1674 → 1.3.1675
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 +55 -6
- package/dist/commands/server.js.map +1 -1
- package/dist/core/CodexLifecycleProductionComposition.d.ts +1 -1
- package/dist/core/CodexLifecycleProductionComposition.d.ts.map +1 -1
- package/dist/core/EvolutionArchive.d.ts +79 -0
- package/dist/core/EvolutionArchive.d.ts.map +1 -0
- package/dist/core/EvolutionArchive.js +309 -0
- package/dist/core/EvolutionArchive.js.map +1 -0
- package/dist/core/EvolutionArchiveSync.d.ts +26 -0
- package/dist/core/EvolutionArchiveSync.d.ts.map +1 -0
- package/dist/core/EvolutionArchiveSync.js +109 -0
- package/dist/core/EvolutionArchiveSync.js.map +1 -0
- package/dist/core/EvolutionManager.d.ts +37 -6
- package/dist/core/EvolutionManager.d.ts.map +1 -1
- package/dist/core/EvolutionManager.js +210 -149
- package/dist/core/EvolutionManager.js.map +1 -1
- package/dist/core/FileClassifier.d.ts.map +1 -1
- package/dist/core/FileClassifier.js +3 -0
- package/dist/core/FileClassifier.js.map +1 -1
- package/dist/core/JobCoverage.d.ts +53 -0
- package/dist/core/JobCoverage.d.ts.map +1 -0
- package/dist/core/JobCoverage.js +194 -0
- package/dist/core/JobCoverage.js.map +1 -0
- package/dist/core/JobCoverageMonitor.d.ts +84 -0
- package/dist/core/JobCoverageMonitor.d.ts.map +1 -0
- package/dist/core/JobCoverageMonitor.js +364 -0
- package/dist/core/JobCoverageMonitor.js.map +1 -0
- package/dist/core/JobDependency.d.ts +4 -0
- package/dist/core/JobDependency.d.ts.map +1 -0
- package/dist/core/JobDependency.js +30 -0
- package/dist/core/JobDependency.js.map +1 -0
- package/dist/core/JobPortableBundle.d.ts +61 -0
- package/dist/core/JobPortableBundle.d.ts.map +1 -0
- package/dist/core/JobPortableBundle.js +302 -0
- package/dist/core/JobPortableBundle.js.map +1 -0
- package/dist/core/JobPortableFs.d.ts +18 -0
- package/dist/core/JobPortableFs.d.ts.map +1 -0
- package/dist/core/JobPortableFs.js +65 -0
- package/dist/core/JobPortableFs.js.map +1 -0
- package/dist/core/JobPortableIntegrity.d.ts +4 -0
- package/dist/core/JobPortableIntegrity.d.ts.map +1 -0
- package/dist/core/JobPortableIntegrity.js +86 -0
- package/dist/core/JobPortableIntegrity.js.map +1 -0
- package/dist/core/JobPortableSync.d.ts +79 -0
- package/dist/core/JobPortableSync.d.ts.map +1 -0
- package/dist/core/JobPortableSync.js +513 -0
- package/dist/core/JobPortableSync.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +38 -3
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/ReplicatedStoreReconcilerWiring.d.ts +2 -0
- package/dist/core/ReplicatedStoreReconcilerWiring.d.ts.map +1 -1
- package/dist/core/ReplicatedStoreReconcilerWiring.js +4 -4
- package/dist/core/ReplicatedStoreReconcilerWiring.js.map +1 -1
- package/dist/core/WriteDomainRegistry.d.ts.map +1 -1
- package/dist/core/WriteDomainRegistry.js +13 -0
- package/dist/core/WriteDomainRegistry.js.map +1 -1
- package/dist/core/jobMeshAwareness.d.ts +12 -0
- package/dist/core/jobMeshAwareness.d.ts.map +1 -0
- package/dist/core/jobMeshAwareness.js +37 -0
- package/dist/core/jobMeshAwareness.js.map +1 -0
- package/dist/core/roleFollowRestart.d.ts +16 -0
- package/dist/core/roleFollowRestart.d.ts.map +1 -1
- package/dist/core/roleFollowRestart.js +32 -1
- package/dist/core/roleFollowRestart.js.map +1 -1
- package/dist/core/types.d.ts +24 -4
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/localVerify/FailedFileDiagnosisPeerService.d.ts.map +1 -1
- package/dist/localVerify/FailedFileDiagnosisPeerService.js +3 -1
- package/dist/localVerify/FailedFileDiagnosisPeerService.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +4 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +24 -0
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/monitoring/guardManifest.d.ts.map +1 -1
- package/dist/monitoring/guardManifest.js +6 -0
- package/dist/monitoring/guardManifest.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 +11 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/scheduler/AgentMdJobLoader.d.ts +4 -15
- package/dist/scheduler/AgentMdJobLoader.d.ts.map +1 -1
- package/dist/scheduler/AgentMdJobLoader.js +69 -1
- package/dist/scheduler/AgentMdJobLoader.js.map +1 -1
- package/dist/scheduler/JobCatalogReconcile.d.ts +2 -0
- package/dist/scheduler/JobCatalogReconcile.d.ts.map +1 -0
- package/dist/scheduler/JobCatalogReconcile.js +27 -0
- package/dist/scheduler/JobCatalogReconcile.js.map +1 -0
- package/dist/scheduler/JobLoader.d.ts.map +1 -1
- package/dist/scheduler/JobLoader.js +26 -1
- package/dist/scheduler/JobLoader.js.map +1 -1
- package/dist/scheduler/JobScheduler.d.ts +14 -9
- package/dist/scheduler/JobScheduler.d.ts.map +1 -1
- package/dist/scheduler/JobScheduler.js +182 -9
- package/dist/scheduler/JobScheduler.js.map +1 -1
- package/dist/scheduler/PromotionCatchUpStore.d.ts +20 -0
- package/dist/scheduler/PromotionCatchUpStore.d.ts.map +1 -0
- package/dist/scheduler/PromotionCatchUpStore.js +60 -0
- package/dist/scheduler/PromotionCatchUpStore.js.map +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/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +2 -1
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +2 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +265 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/testing/selfActionRegistry.d.ts.map +1 -1
- package/dist/testing/selfActionRegistry.js +92 -0
- package/dist/testing/selfActionRegistry.js.map +1 -1
- package/package.json +1 -1
- package/scripts/job-portable-fs.py +254 -0
- package/scripts/job-portable-sync-rollback.mjs +66 -0
- package/src/data/builtin-manifest.json +66 -66
- package/src/data/feature-ladders.json +2 -0
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/src/scaffold/templates.ts +11 -0
- package/upgrades/1.3.1675.md +48 -0
- package/upgrades/side-effects/evolution-retention-cap-saturation.md +172 -0
- package/upgrades/side-effects/lease-job-coverage-and-catchup.md +86 -0
- package/upgrades/side-effects/lease-job-definition-replication.md +94 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAsIA,OAAO,EAAE,cAAc,EAAwD,MAAM,2BAA2B,CAAC;AAgBjH,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AA6BjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/server.js
CHANGED
|
@@ -261,6 +261,7 @@ import { StaleProcessGuard } from '../core/StaleProcessGuard.js';
|
|
|
261
261
|
import { cleanupGlobalInstalls } from '../core/GlobalInstallCleanup.js';
|
|
262
262
|
import { ForegroundRestartWatcher } from '../core/ForegroundRestartWatcher.js';
|
|
263
263
|
import { NotificationBatcher } from '../messaging/NotificationBatcher.js';
|
|
264
|
+
import { EvolutionArchiveSync } from '../core/EvolutionArchiveSync.js';
|
|
264
265
|
import { admitNoticeToHub, recordHeldHubPost, resolveHubFilterMode } from '../messaging/attentionHubPolicy.js';
|
|
265
266
|
import { formatLocalTimestamp } from '../utils/localTime.js';
|
|
266
267
|
import { resolveTelegramStartupTopology, wireTelegramSendSide } from '../messaging/telegramSendSideComposition.js';
|
|
@@ -7924,7 +7925,7 @@ export async function startServer(options) {
|
|
|
7924
7925
|
});
|
|
7925
7926
|
if (decision === 'restart') {
|
|
7926
7927
|
console.log(pc.yellow(` [lease] role is now ${coordinator.role}: restarting once so boot builds what it needs`));
|
|
7927
|
-
requestRoleRestart({ stateDir: config.stateDir }, nowAwake);
|
|
7928
|
+
requestRoleRestart({ stateDir: config.stateDir, leaseEpoch: coordinator.getLeaseEpoch(), machineId: coordinator.identity?.machineId }, nowAwake);
|
|
7928
7929
|
}
|
|
7929
7930
|
}
|
|
7930
7931
|
catch (err) {
|
|
@@ -7966,6 +7967,13 @@ export async function startServer(options) {
|
|
|
7966
7967
|
// Wire machine identity for machine-scoped job filtering
|
|
7967
7968
|
if (coordinator.identity) {
|
|
7968
7969
|
scheduler.setMachineIdentity(coordinator.identity.machineId, coordinator.identity.name);
|
|
7970
|
+
scheduler.setPromotionLeaseProvider(() => ({
|
|
7971
|
+
leaseEpoch: coordinator.getLeaseEpoch(), machineId: coordinator.identity.machineId,
|
|
7972
|
+
holdsLease: coordinator.holdsLease(),
|
|
7973
|
+
// The local journal cannot prove what a prior holder launched.
|
|
7974
|
+
// A registry count is not a cross-machine decision witness.
|
|
7975
|
+
runOnceWitness: false,
|
|
7976
|
+
}));
|
|
7969
7977
|
}
|
|
7970
7978
|
if (quotaTracker) {
|
|
7971
7979
|
// Basic binding — QuotaManager will override this once wired
|
|
@@ -13360,8 +13368,43 @@ export async function startServer(options) {
|
|
|
13360
13368
|
const evolution = new EvolutionManager({
|
|
13361
13369
|
stateDir: config.stateDir,
|
|
13362
13370
|
...(config.evolution || {}),
|
|
13371
|
+
archiveOrigin: cjOwnMachineId ?? undefined,
|
|
13363
13372
|
autoExpiry: config.evolutionActions?.autoExpiry,
|
|
13364
13373
|
});
|
|
13374
|
+
const evolutionArchiveSync = new EvolutionArchiveSync(evolution.archive, {
|
|
13375
|
+
fetchPage: async (_peerId, url, offset, signal) => {
|
|
13376
|
+
const extra = config.multiMachine?.peerUrlAllowlist;
|
|
13377
|
+
if (!isPeerUrlAllowedForCredentials({ url, kind: 'last-known-url' }, extra).ok)
|
|
13378
|
+
throw new Error('archive peer URL rejected');
|
|
13379
|
+
const response = await fetch(`${url}/evolution/archive?offset=${offset}&limit=50`, {
|
|
13380
|
+
headers: { Authorization: `Bearer ${config.authToken}` }, signal, redirect: 'error',
|
|
13381
|
+
});
|
|
13382
|
+
if (!response.ok)
|
|
13383
|
+
throw new Error(`archive peer HTTP ${response.status}`);
|
|
13384
|
+
// Bound bytes while streaming, before parsing; Content-Length alone is not evidence.
|
|
13385
|
+
const reader = response.body?.getReader();
|
|
13386
|
+
if (!reader)
|
|
13387
|
+
throw new Error('archive peer missing body');
|
|
13388
|
+
const chunks = [];
|
|
13389
|
+
let size = 0;
|
|
13390
|
+
try {
|
|
13391
|
+
for (;;) {
|
|
13392
|
+
const next = await reader.read();
|
|
13393
|
+
if (next.done)
|
|
13394
|
+
break;
|
|
13395
|
+
size += next.value.byteLength;
|
|
13396
|
+
if (size > 1024 * 1024)
|
|
13397
|
+
throw new Error('archive peer response oversized');
|
|
13398
|
+
chunks.push(next.value);
|
|
13399
|
+
}
|
|
13400
|
+
}
|
|
13401
|
+
finally {
|
|
13402
|
+
await reader.cancel().catch(() => { });
|
|
13403
|
+
}
|
|
13404
|
+
return JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
13405
|
+
},
|
|
13406
|
+
log: (event, detail) => console.warn(`[EvolutionManager] ${event} ${JSON.stringify(detail)}`),
|
|
13407
|
+
});
|
|
13365
13408
|
console.log(pc.green(' Evolution system enabled'));
|
|
13366
13409
|
// WS2.2 — the bypass-proof union reader for the `learnings` store. The single funnel
|
|
13367
13410
|
// every replicated learning read routes through, so no caller reads a raw replica
|
|
@@ -13396,7 +13439,7 @@ export async function startServer(options) {
|
|
|
13396
13439
|
void learningsUnionReader; // consumed by the learnings peer-read surface (the E2E reads through it) + future session-context injection
|
|
13397
13440
|
// WS2 SEND-SIDE: attach the journal-backed emitter to the EvolutionManager's
|
|
13398
13441
|
// learning hooks. The call sites already fire emitPut/emitDelete on every
|
|
13399
|
-
// saveLearnings (
|
|
13442
|
+
// saveLearnings (final puts including eviction, no retention tombstones); the adapter maps the
|
|
13400
13443
|
// manager's emit signature to the store's build*RecordData. The emitter owns the
|
|
13401
13444
|
// dark gate, HLC tick, `observed` witness, and journal append. Attached only when
|
|
13402
13445
|
// the emitter exists (journal live); when dark the hooks stay no-ops (byte-
|
|
@@ -13576,7 +13619,7 @@ export async function startServer(options) {
|
|
|
13576
13619
|
loadOriginRecords: (store, recordKey) => {
|
|
13577
13620
|
if (store !== EVOLUTION_ACTION_STORE_KEY || _meshSelfId === null)
|
|
13578
13621
|
return [];
|
|
13579
|
-
for (const a of evolution.
|
|
13622
|
+
for (const a of evolution.listActionsForReplication()) {
|
|
13580
13623
|
if (deriveEvolutionActionRecordKey(a.title, a.commitTo, a.createdAt) === recordKey) {
|
|
13581
13624
|
const o = evolutionActionToOriginRecord(a, _meshSelfId);
|
|
13582
13625
|
return o ? [o] : [];
|
|
@@ -13588,7 +13631,7 @@ export async function startServer(options) {
|
|
|
13588
13631
|
if (store !== EVOLUTION_ACTION_STORE_KEY)
|
|
13589
13632
|
return [];
|
|
13590
13633
|
const keys = [];
|
|
13591
|
-
for (const a of evolution.
|
|
13634
|
+
for (const a of evolution.listActionsForReplication()) {
|
|
13592
13635
|
const k = deriveEvolutionActionRecordKey(a.title, a.commitTo, a.createdAt);
|
|
13593
13636
|
if (k !== null)
|
|
13594
13637
|
keys.push(k);
|
|
@@ -13602,8 +13645,8 @@ export async function startServer(options) {
|
|
|
13602
13645
|
// WS2.5 SEND-SIDE: attach the journal-backed emitter to the EvolutionManager's
|
|
13603
13646
|
// action-queue hooks. saveActions already fires emitPut on every surviving action
|
|
13604
13647
|
// (so a STATUS CHANGE re-emits — a peer SEES completed/in_progress and won't redo it)
|
|
13605
|
-
//
|
|
13606
|
-
//
|
|
13648
|
+
// including final puts for archived terminal records. Hot eviction never emits
|
|
13649
|
+
// deletion authority; archive custody and repair preserve memory. The adapter maps the
|
|
13607
13650
|
// manager's emit signature to the action build*RecordData projection; the generic emitter
|
|
13608
13651
|
// owns the dark gate, HLC tick, `observed` witness, journal append, and ALL the safety
|
|
13609
13652
|
// guards (null recordKey ⇒ skip, null projection ⇒ skip, over-cap throw ⇒ counted no-op).
|
|
@@ -28791,6 +28834,11 @@ export async function startServer(options) {
|
|
|
28791
28834
|
// intact): working-set pending-pull drain (§3.4) + queued
|
|
28792
28835
|
// commitment-mutate re-fire (P1.5b §3.4). Both no-op while dark.
|
|
28793
28836
|
const onPeerBack = (machineId) => {
|
|
28837
|
+
const archivePeer = (_resolvePeerUrls?.() ?? []).find(peer => peer.machineId === machineId);
|
|
28838
|
+
if (archivePeer)
|
|
28839
|
+
void evolutionArchiveSync.onPeerRecorded(machineId, archivePeer.url).catch(error => {
|
|
28840
|
+
console.warn(`[EvolutionManager] archive-sync-failed ${String(error)}`);
|
|
28841
|
+
});
|
|
28794
28842
|
workingSetPullCoordinator?.onPeerRecorded(machineId);
|
|
28795
28843
|
void _commitmentReFire?.(machineId).catch(() => { });
|
|
28796
28844
|
// §5.3(e): a returning peer drains any pending topic-profile pulls
|
|
@@ -32363,6 +32411,7 @@ export async function startServer(options) {
|
|
|
32363
32411
|
let _shuttingDown = false;
|
|
32364
32412
|
let shutdownStep = 'start';
|
|
32365
32413
|
const shutdown = async () => {
|
|
32414
|
+
evolutionArchiveSync.stop();
|
|
32366
32415
|
// Re-entrancy guard: SIGINT+SIGTERM (or a restartDetected racing a signal)
|
|
32367
32416
|
// must not run the teardown twice. closeAllSqlite() is itself idempotent,
|
|
32368
32417
|
// but the resume-UUID save + sidecar flush should run once.
|