M Maple 灵枢
← 返回原始报告
2026-05 2026.05.13 15 KB

Meridian Pulse MVP Research (MER-359)

原始 research campaign 输出,来自 MER-359 pulse mvp。这页保留报告结构和运行痕迹,正式文章会在写作区重写。

Meridian Pulse MVP Research

Version: 0.1.0 Status: Draft Created: 2026-05-13 Updated: 2026-05-13 Created by: Codex App / GPT-5.5 Linear: MER-359

Purpose

MER-359 asks how OpenAI ChatGPT Pulse should influence Meridian, Vyane, Argus, and Nebula.

The useful idea is not “more notifications”. It is a daily proactive research surface that turns Maple’s own goals, memory, sessions, tasks, and feedback into a small set of reviewable cards. The first Meridian version should stay personal-first, local-first, and reversible.

This document proposes a first MVP slice and the follow-up implementation tasks.

Research date: 2026-05-13.

Sources

Official ChatGPT Pulse sources checked:

  • OpenAI Help Center, ChatGPT Pulse, checked 2026-05-13. It currently lists Pulse as available to Pro users on Web, iOS, and Android.
  • OpenAI product announcement, Introducing ChatGPT Pulse, published 2025-09-25.
  • OpenAI Help Center, ChatGPT release notes, checked 2026-05-13. Release notes say Pulse launched for Pro users on iOS/Android on 2025-09-25, became available on web for Pro users on 2025-10-29, and gained Tasks management on 2025-12-17.

Local evidence checked:

What Pulse Contributes

ChatGPT Pulse currently has five product primitives worth copying:

  1. Daily asynchronous research, delivered once a day.
  2. Personalization from memory, chat history, feedback, and opt-in connected apps.
  3. Visual summaries that can be scanned, expanded, saved, or followed up.
  4. Topic curation through thumbs up/down, free-form feedback, and “curate tomorrow” prompts.
  5. Safety and user control: app connectors off by default, feedback history controls, daily expiry unless saved, layered safety checks.

Current product constraints that matter for Meridian:

  • Pulse requires memory to be enabled and can be turned off in settings.
  • Pulse summaries refresh daily and are deleted after one day unless saved as a chat or interacted with.
  • Gmail and Google Calendar style app access is opt-in and off by default.
  • Pulse is explicitly framed as something that should not keep users scrolling.
  • Release notes now place Tasks inside Pulse, which maps cleanly to Meridian’s automation schedules.

The Meridian version should keep those primitives, but map them to Maple’s local system:

Pulse primitive Meridian equivalent
Chat history Codex/Claude session records, Argus session mirror, execution log
Memory Vyane MemoryStore, Meridian memory files, session summaries
Connected apps Later opt-in connectors; not part of the first MVP
Visual cards Argus “今日 Pulse” card rail/list
Save as chat Create or append an Argus/Vyane session
Follow-up question Send message to the saved session or spawn a focused AgentRun
Feedback pulse_feedback records that influence tomorrow’s topic selection
Safety checks Source allowlist, evidence refs, no secret leakage, no public publishing without approval

Existing Building Blocks

Vyane already has enough substrate for a narrow MVP:

  • AutomationScheduleStore: user-configured schedules, cron-like timing, pause/resume/archive, due schedule trigger, approval-based execution.
  • ResearchCampaignManager: background research worker model, output directory, campaign/topic status tracking.
  • MemoryStore: local memory records, scopes, namespaces, explicit/inductive/deductive levels, search endpoint.
  • SessionRecord APIs: imported Codex/Claude conversation records exposed read-only.
  • MessageInbox and NotificationStore: app-facing delivery channels for Argus.
  • EventStore: timeline/audit stream suitable for generation traces.
  • FlowRuntime: durable flow substrate, not yet connected to scheduler, useful for a later Pulse generation trace.

Argus already has the right surface:

  • Five-tab IA, with 对话, 任务, 自动化, 智能体, 设置.
  • Notification section in the conversation tab through NotificationItem.
  • Automation tab with schedule and research campaign visibility.
  • Service layer and HTTP mapping, so a PulseService can be added without tying UI to Vyane field names.

Important boundary: NotificationStore is a good entry point but not the card store. Pulse cards need richer state: sources, evidence, actions, feedback, expiry, saved state, and visibility rules. A notification can point to a Pulse edition, but it should not carry the full card content.

Nebula should remain a publishing surface:

  • It already has research/writing pages and a research report sync script.
  • Pulse should not auto-publish to Nebula. The first safe path is “save card as draft / research note”, then Maple decides whether it becomes public or semi-public content.

MVP Slice

The first shippable slice:

Every morning, Vyane generates one Pulse edition with 3-7 local-first cards. Argus shows the edition, lets Maple expand cards, save a card into a session, ask a follow-up, and give feedback. Nebula receives nothing unless Maple explicitly exports a saved card later.

Generation Time

  • Default schedule: daily 08:30 Asia/Shanghai.
  • Generation window: read signals from the previous 24-72 hours plus long-term goals.
  • First version can support both manual generation and scheduled generation.
  • External connectors stay disabled. No Gmail, Calendar, production email, or private account access in MVP.
  • Scheduled generation should follow the existing approval-first automation design. Direct run remains internal-token only.

Data Sources

Allowed by default:

  • Meridian memory files and MemoryStore.
  • Linear issues and current active queue summaries.
  • logs/agents/events/execution.jsonl.
  • Vyane session records and session mirror metadata.
  • Argus-visible tasks, notifications, automation schedules, research campaign summaries.
  • Local docs under Meridian/Vyane/Argus/Nebula.

Optional after MVP:

  • Web/news search with explicit source allowlist.
  • Calendar/Gmail-style connectors only after settings, scope, audit log, and off switch exist.

Card Types

Initial card categories:

  • work_next: what Maple should look at next in Linear / PR / CI.
  • research_followup: useful follow-up from recent research or unresolved threads.
  • memory_reflection: pattern detected from sessions/memory, with evidence.
  • project_health: Vyane/Argus/Nebula state drift, stale tasks, failing automation.
  • publish_candidate: a saved research/report item that may become Nebula content.

Card Schema

{
  "id": "pulse-card-...",
  "edition_id": "pulse-2026-05-13",
  "title": "Short title",
  "summary": "One-screen summary",
  "detail": "Expanded explanation",
  "category": "work_next",
  "priority": 2,
  "status": "active",
  "source_refs": [
    {
      "type": "linear_issue",
      "label": "MER-272",
      "url": "https://linear.app/...",
      "evidence": "FlowRuntime PR merged"
    }
  ],
  "suggested_actions": [
    {
      "type": "open_session",
      "label": "继续处理 MER-359",
      "payload": {"logical_session_id": "pulse:mer-359"}
    }
  ],
  "safety": {
    "contains_external_data": false,
    "contains_secrets": false,
    "requires_approval": false
  },
  "created_at": "2026-05-13T00:30:00Z",
  "expires_at": "2026-05-14T00:30:00Z"
}

Feedback Schema

{
  "id": "pulse-feedback-...",
  "card_id": "pulse-card-...",
  "edition_id": "pulse-2026-05-13",
  "action": "thumbs_up",
  "reason": "useful_followup",
  "comment": "More of this tomorrow",
  "created_at": "2026-05-13T09:15:00+08:00",
  "source": "argus"
}

Feedback actions:

  • thumbs_up
  • thumbs_down
  • save
  • dismiss
  • curate_tomorrow
  • report

Feedback must be inspectable and deletable. It should influence ranking, not become invisible permanent preference unless Maple explicitly promotes it to memory.

Vyane API Draft

Recommended endpoints:

Endpoint Purpose
GET /api/pulse/editions?limit=7 List daily editions
GET /api/pulse/editions/{id} Edition detail with cards
POST /api/pulse/editions/generate Manual generation; internal or authenticated
GET /api/pulse/cards/{id} Card detail
POST /api/pulse/cards/{id}/feedback Record feedback
POST /api/pulse/cards/{id}/save Save card as Argus/Vyane session
POST /api/pulse/cards/{id}/follow-up Create follow-up message/session
POST /api/pulse/cards/{id}/dismiss Hide card from current edition
GET /api/pulse/preferences Read settings and source policy
PUT /api/pulse/preferences Update settings and source policy

Storage options:

  • MVP: append-only JSONL store similar to NotificationStore, keeping latest state per edition/card/feedback id.
  • Later: SQLite tables once FlowRuntime or richer querying becomes necessary.

Automation integration:

  • Add a schedule target type: pulse.generate.
  • Keep write actions separate from read/generation actions.
  • If card generation uses external search/connectors, require explicit source policy and audit fields.
  • First scheduled path: due schedule creates an approval; approval executes pulse.generate; the generator writes cards and adds a lightweight notification pointing to the edition.

Argus UX Draft

No new top-level tab in MVP.

Recommended placement:

  • 对话 tab: a “今日 Pulse” section above normal sessions/notifications.
  • 自动化 tab: schedule status, last run, failures, and source policy.
  • 设置 tab: Pulse enable switch, source toggles, connected app toggles later, feedback history.

Card actions:

  • Expand.
  • Save as session.
  • Ask follow-up.
  • Thumbs up/down.
  • Curate tomorrow.
  • Dismiss.
  • Report.

Card should show why it exists. At least one visible source/evidence line is required. If no evidence can be shown, the card should be marked as speculative and ranked lower.

iOS note: foreground refresh and SSE are enough for MVP. True background delivery later needs APNs or local notification design; long-running SSE cannot be the only mobile notification mechanism.

Nebula Path

Nebula should only receive explicit exports:

  • Save card as a private research draft.
  • Convert a group of saved cards into a Nebula writing draft.
  • Add source refs and publication status.

No auto-publish. No daily digest going public by default.

This keeps the boundary clear:

  • Argus: private daily work surface.
  • Nebula: public/semi-public publishing surface.

Safety And Control

MVP rules:

  • Off switch exists before scheduled generation is enabled.
  • All source families are visible in preferences.
  • External connectors are off by default.
  • Cards expire after one day unless saved.
  • Save/follow-up actions are explicit.
  • Public export requires approval.
  • Cards include source refs.
  • Secrets and tokens are redacted before persistence.
  • Web/app content is treated as untrusted input and summarized with prompt-injection guardrails.
  • Feedback history can be listed and deleted.
  • Every generation writes an event to execution.jsonl or Vyane EventStore.

Important product boundary:

Pulse is valuable only if it reduces Maple’s decision load. If it becomes a noisy notification feed, it should be disabled until ranking and feedback improve.

Implementation Plan

Phase 1: Contract And Store

  • Add PulseEdition, PulseCard, and PulseFeedback models.
  • Add append-only PulseStore.
  • Add read endpoints and feedback/save/dismiss mutations.
  • Add tests for expiry, latest-state loading, idempotent feedback, and safe source refs.

Phase 2: Local Generator

  • Add a generator that reads local signals only.
  • Start with deterministic ranking and templated summaries; do not depend on external connectors.
  • Sources: Linear state, execution log, MemoryStore, session-record summaries, notification/task/automation state.
  • Output 3-7 cards with evidence.

Phase 3: Argus UI

  • Add PulseCard core model and PulseService.
  • Add “今日 Pulse” section to 对话 tab.
  • Add detail view and actions: save, follow-up, feedback, dismiss.
  • Add settings toggles and feedback history.

Phase 4: Scheduler Integration

  • Add pulse.generate target to automation schedules.
  • Add daily default schedule creation flow, disabled until Maple enables it.
  • Record generation run status in EventStore and Automation tab.

Phase 5: Nebula Export

  • Add explicit export from saved Pulse card to Nebula draft or research note.
  • Do not publish automatically.

Linear Follow-Ups

Recommended child issues:

  1. Vyane: Pulse store and read API.
  2. Vyane: local Pulse generator from memory/session/Linear/execution signals.
  3. Argus: daily Pulse card UI and feedback actions.
  4. Vyane: scheduler target pulse.generate with source policy and audit.
  5. Nebula: explicit saved-card export to private draft.
  6. Vyane/Argus: card-level feedback endpoint, deletion, and preference influence.

The first two can be implemented before touching Argus UI. Scheduler should wait until manual generation and feedback are usable.

Verification Gaps

Not verified in this research pass:

  • No local Vyane dashboard was started.
  • No HTTP endpoint was called.
  • No Python or Swift tests were run.
  • No real ~/.config/vyane/*.jsonl or events.db contents were inspected.
  • Argus UI was not launched.
  • Nebula build was not run.
  • APNs, Cloudflare Tunnel, and iOS background behavior were not tested.