feat(v0.8.667–0.8.668): relay CSV and worker release CSV mesh parity
Phase 692 (v0.8.667): digest relay handoff CSV, archive peer export mesh, relay-csv-ui, relay-csv-mixin, agentctl relay journeys, test:ci-phase692. Phase 693 (v0.8.668): worker release CSV, integration manifest export mesh, worker-csv-ui, worker-csv-mixin, RPC 104/105, agentctl worker journeys, test:ci-phase693. Fix relay modal IPC (sync-digest-relay-handoff-csv), worker-errors filter, and phase687 boot gate version pin. Roadmap: Phases 692–693 complete, Phase 694 opened.
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
Agent control plane for Pearcord — send the same IPC messages the UI sends, read `view` snapshots, and run scripted journeys against a **live worker** or an in-process **headless** session.
|
||||
|
||||
**Phase 692 (v0.8.667):** `runDigestRelayHandoffCsvJourney`, `runArchivePeerExportMeshJourney`; bundle `test:agentctl-phase692-relay`.
|
||||
|
||||
**Phase 691 (v0.8.666):** `runHookFailureDigestCsvJourney`, `runComplianceSnapshotExportJourney`; bundle `test:agentctl-phase691-digest`.
|
||||
|
||||
**Phase 690 (v0.8.665):** `runAuditCsvMeshPushJourney`, `runModDigestNotifyJourney`; bundle `test:agentctl-phase690-audit`.
|
||||
|
||||
+67
@@ -3503,6 +3503,73 @@ class HeadlessSession {
|
||||
}
|
||||
}
|
||||
|
||||
async runDigestRelayHandoffCsvJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'rh692', displayName: 'Relay CSV 692' })
|
||||
await this.createGuild({ name: 'Relay CSV 692', publicListing: false })
|
||||
await this.wait({ mode: 'guild' }, 45000)
|
||||
await this.platform.dryRunDigestWebhookRelay().catch(() => null)
|
||||
const pushed = await this.platform.pushDigestRelayHandoffCsvToMesh()
|
||||
const v = await this.refreshView()
|
||||
if (!pushed?.signature && !v.digestRelayHandoffCsvMeta?.signature) {
|
||||
throw new Error('expected signed relay handoff CSV after mesh push')
|
||||
}
|
||||
return {
|
||||
guildRelayHandoffCount: (v.digestRelayHandoffCsvRows || []).length,
|
||||
hasMeta: v.digestRelayHandoffCsvMeta != null
|
||||
}
|
||||
}
|
||||
|
||||
async runArchivePeerExportMeshJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'ap692', displayName: 'Archive 692' })
|
||||
await this.createGuild({ name: 'Archive 692', publicListing: false })
|
||||
await this.wait({ mode: 'guild' }, 45000)
|
||||
const pushed = await this.platform.pushArchivePeerExportToMesh()
|
||||
const v = await this.refreshView()
|
||||
if (!pushed?.signature) {
|
||||
throw new Error('expected signed archive peer CSV export')
|
||||
}
|
||||
return {
|
||||
guildRelayHandoffCount: (v.archivePeerExportCsvRows || []).length,
|
||||
hasArchiveExport: v.lastArchivePeerExport != null || (v.archivePeerExportCsvRows || []).length > 0
|
||||
}
|
||||
}
|
||||
|
||||
async runWorkerReleaseCsvJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'wr693', displayName: 'Worker CSV 693' })
|
||||
await this.createGuild({ name: 'Worker CSV 693', publicListing: false })
|
||||
await this.wait({ mode: 'guild' }, 45000)
|
||||
const pushed = await this.platform.pushWorkerReleaseCsvToMesh()
|
||||
const v = await this.refreshView()
|
||||
if (!pushed?.signature && !v.workerReleaseCsvMeta?.signature) {
|
||||
throw new Error('expected signed worker release CSV after mesh push')
|
||||
}
|
||||
return {
|
||||
guildWorkerReleaseCount: (v.workerReleaseCsvRows || []).length,
|
||||
hasMeta: v.workerReleaseCsvMeta != null
|
||||
}
|
||||
}
|
||||
|
||||
async runIntegrationManifestExportJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'im693', displayName: 'Manifest 693' })
|
||||
await this.createGuild({ name: 'Manifest 693', publicListing: false })
|
||||
await this.wait({ mode: 'guild' }, 45000)
|
||||
const pushed = await this.platform.pushIntegrationManifestExportToMesh()
|
||||
const v = await this.refreshView()
|
||||
if (!pushed?.signature) {
|
||||
throw new Error('expected signed integration manifest CSV export')
|
||||
}
|
||||
return {
|
||||
guildWorkerReleaseCount: (v.integrationManifestExportCsvRows || []).length,
|
||||
hasManifestExport:
|
||||
v.lastIntegrationManifestExport != null ||
|
||||
(v.integrationManifestExportCsvRows || []).length > 0
|
||||
}
|
||||
}
|
||||
|
||||
async runForumPostSearchJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'fm672', displayName: 'Forum 672' })
|
||||
|
||||
Reference in New Issue
Block a user