feat(phase707): screen share CSV & soundboard registry export mesh parity (v0.8.682)

Add signed guild screen share CSV mesh export and soundboard registry CSV
export (RPC 132/133): screen-csv-ui.js, screen-csv-mixin.js, delivery-receipts
collections, guild gossip handlers, ui-flow IPC, deep link ?screen-csv=1,
screen-csv-errors dev filter, agentctl screen/soundboard journeys, and
test:ci-phase707 regression bundle chaining phase706.
This commit is contained in:
Raven Scott
2026-06-03 04:22:52 -04:00
parent 68effad067
commit 1ce3f19255
2 changed files with 44 additions and 0 deletions
+2
View File
@@ -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 707 (v0.8.682):** `runScreenShareCsvJourney`, `runSoundboardRegistryExportJourney`; bundle `test:agentctl-phase707-screen`.
**Phase 692 (v0.8.667):** `runDigestRelayHandoffCsvJourney`, `runArchivePeerExportMeshJourney`; bundle `test:agentctl-phase692-relay`.
**Phase 691 (v0.8.666):** `runHookFailureDigestCsvJourney`, `runComplianceSnapshotExportJourney`; bundle `test:agentctl-phase691-digest`.
+42
View File
@@ -4066,6 +4066,48 @@ class HeadlessSession {
}
}
async runScreenShareCsvJourney () {
if (!this.platform) throw new Error('headless not started')
await this.registerUser({ username: 'sc707', displayName: 'Screen CSV 707' })
await this.createGuild({ name: 'Screen CSV 707', publicListing: false })
await this.wait({ mode: 'guild' }, 45000)
await this.createGuildChannel('Voice Share', { type: 'voice' })
await this.refreshView()
const ch = this._lastView?.channels?.find((c) => c.type === 'voice')
if (ch?.id) {
await this.platform.joinVoiceChannel(ch.id).catch(() => {})
await this.startGuildScreenShare('Phase707 screen export').catch(() => {})
}
const pushed = await this.platform.pushScreenShareCsvToMesh()
const v = await this.refreshView()
if (!pushed?.signature && !v.screenShareCsvMeta?.signature) {
throw new Error('expected signed screen share CSV after mesh push')
}
return {
guildScreenCsvCount: (v.screenShareCsvRows || []).length + (v.guildScreenShares || []).length,
hasMeta: v.screenShareCsvMeta != null,
shareCount: (v.guildScreenShares || []).length
}
}
async runSoundboardRegistryExportJourney () {
if (!this.platform) throw new Error('headless not started')
await this.registerUser({ username: 'sb707', displayName: 'Soundboard 707' })
await this.createGuild({ name: 'Soundboard 707', publicListing: false })
await this.wait({ mode: 'guild' }, 45000)
await this.refreshView()
const pushed = await this.platform.pushSoundboardRegistryExportToMesh()
const v = await this.refreshView()
if (!pushed?.signature) {
throw new Error('expected signed soundboard registry CSV export')
}
return {
guildScreenCsvCount: (v.soundboardRegistryExportCsvRows || []).length,
hasSoundboardExport:
v.lastSoundboardRegistryExport != null || (v.soundboardRegistryExportCsvRows || []).length > 0
}
}
async runForumPostSearchJourney () {
if (!this.platform) throw new Error('headless not started')
await this.registerUser({ username: 'fm672', displayName: 'Forum 672' })