feat(v0.8.679): Phase 704 thread archive CSV & forum tag export mesh parity
Complete signed guild thread archive CSV mesh export and forum tag palette export (RPC 126/127): thread-csv-ui.js, thread-csv-mixin.js, delivery-receipts store, guild gossip handlers, ui-flow IPC, deep link ?thread-csv=1, agentctl journeys, smokes, and docs. Fix pushForumTagExportToMesh naming from pin clone. Bundle: npm run test:ci-phase704 (50/50). Roadmap Phase 704 complete; Phase 705 slot opened.
This commit is contained in:
+41
@@ -3946,6 +3946,47 @@ class HeadlessSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async runThreadArchiveCsvJourney () {
|
||||||
|
if (!this.platform) throw new Error('headless not started')
|
||||||
|
await this.registerUser({ username: 'th704', displayName: 'Thread CSV 704' })
|
||||||
|
await this.createGuild({ name: 'Thread CSV 704', publicListing: false })
|
||||||
|
await this.wait({ mode: 'guild' }, 45000)
|
||||||
|
const row = await this.sendGuildMessage('Phase704 thread archive export seed')
|
||||||
|
await this.ipc({ type: 'create-thread', messageId: row.id, name: 'Archive export thread' })
|
||||||
|
await this.refreshView()
|
||||||
|
const threadId = this._lastView?.activeChannelId
|
||||||
|
if (threadId) await this.platform.archiveThread(threadId, true).catch(() => {})
|
||||||
|
const pushed = await this.platform.pushThreadArchiveCsvToMesh()
|
||||||
|
const v = await this.refreshView()
|
||||||
|
if (!pushed?.signature && !v.threadArchiveCsvMeta?.signature) {
|
||||||
|
throw new Error('expected signed thread archive CSV after mesh push')
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
guildThreadCsvCount: (v.threadArchiveCsvRows || []).length + (v.guildThreads || []).length,
|
||||||
|
hasMeta: v.threadArchiveCsvMeta != null,
|
||||||
|
threadCount: (v.guildThreads || []).length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async runForumTagExportJourney () {
|
||||||
|
if (!this.platform) throw new Error('headless not started')
|
||||||
|
await this.registerUser({ username: 'ft704', displayName: 'Forum Tag 704' })
|
||||||
|
await this.createGuild({ name: 'Forum Tag 704', publicListing: false })
|
||||||
|
await this.wait({ mode: 'guild' }, 45000)
|
||||||
|
await this.createGuildChannel('Forum Tags', { type: 'forum' })
|
||||||
|
await this.refreshView()
|
||||||
|
const pushed = await this.platform.pushForumTagExportToMesh()
|
||||||
|
const v = await this.refreshView()
|
||||||
|
if (!pushed?.signature) {
|
||||||
|
throw new Error('expected signed forum tag CSV export')
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
guildThreadCsvCount: (v.forumTagExportCsvRows || []).length,
|
||||||
|
hasForumExport:
|
||||||
|
v.lastForumTagExport != null || (v.forumTagExportCsvRows || []).length > 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async runForumPostSearchJourney () {
|
async runForumPostSearchJourney () {
|
||||||
if (!this.platform) throw new Error('headless not started')
|
if (!this.platform) throw new Error('headless not started')
|
||||||
await this.registerUser({ username: 'fm672', displayName: 'Forum 672' })
|
await this.registerUser({ username: 'fm672', displayName: 'Forum 672' })
|
||||||
|
|||||||
Reference in New Issue
Block a user