Files
zulip-xmpp/pm/tasks.org
2026-04-14 15:33:18 -04:00

5.7 KiB

Task Log

[X] 0.1.0: Define v0 bridge contract (estimate 1 commit)

Write a one-page spec for the first bridge: one XMPP MUC room <-> one Zulip stream/topic, append-only relay, no edits/reactions/history sync. keep scope painfully small so transport bugs are obvious. my preference is for python-based systems.

Acceptance Criteria

  1. A short design note exists under pm/ or docs/

    • includes message flow in both directions
    • identifies system actors: Zulip bot, XMPP client, relay core
  2. Explicit non-goals are listed

    • no thread mapping beyond fixed topic
    • no rich sync
    • no presence mirroring
  3. First-run assumptions are frozen

    • single room
    • single stream/topic
    • trusted private deployment

evidence

  • commit: 5ad2b6b
  • tests: n/a (design note only)
  • datetime: [2026-04-14 Tue 14:28]
  • artifact: pm/0.1.0-v0-bridge-contract.org

notes

  • This is the boundary-setting task; everything else depends on it.

[X] 0.1.1: Define canonical relay envelope + anti-loop rules (estimate 1 commit)

Specify the minimal message metadata the bridge must preserve and the exact loop-prevention mechanism.

Acceptance Criteria

  1. Canonical fields are listed

    • origin
    • source message id
    • sender display name
    • target room mapping
    • timestamp
  2. Loop prevention rule is explicit

    • bridge stamps outgoing messages
    • bridge ignores messages carrying its own origin marker
  3. Failure handling is defined

    • duplicate delivery behavior
    • malformed message behavior
    • reconnect replay policy
  • pm note: this is the real core of v0; if this is fuzzy the bridge will thrash.

evidence

  • commit: c72b1d8
  • tests: n/a (design note only)
  • datetime: [2026-04-14 Tue 14:40]
  • artifact: pm/0.1.1-relay-envelope-and-loop-rules.org

notes

  • Prefer boring explicit metadata over clever heuristics.

[ ] 0.1.2: Survey Zulip bot constraints + auth model (estimate 1 commit)

Confirm what kind of bot/client should be used on the Zulip side and document any constraints that change architecture.

Acceptance Criteria

  1. Zulip integration mode is chosen

    • bot user vs normal user account
    • event queue / polling approach
  2. Constraints are captured

    • message formatting limitations
    • topic requirements
    • rate limits / event semantics if relevant
  3. Setup checklist is written

    • credentials needed
    • permissions needed
    • minimal stream access needed
  • pm note: Zulip quirks may force the shape of the relay more than XMPP will.

evidence

  • commit:
  • tests:
  • datetime:

notes

  • Keep this empirical; document only constraints that affect v0.

[X] 0.1.3: Survey XMPP MUC event model + library options (estimate 1 commit)

Pick the first XMPP client library/runtime and document the exact events needed for room relay.

Acceptance Criteria

  1. First implementation language/runtime is chosen

    • likely Python unless a strong reason says otherwise
  2. Library candidates are compared briefly

    • connection support
    • MUC message receive/send
    • reconnect behavior
  3. Required event subset is documented

    • groupchat message receive
    • send message to MUC
    • ignore join/leave/presence noise
  • pm note: avoid solving the Emacs client here; this is just relay transport.

evidence

  • commit:
  • tests: n/a (design note only)
  • datetime: [2026-04-14 Tue 15:05]
  • artifact: pm/0.1.3-xmpp-event-model-and-library-choice.org

notes

  • Goal is “good enough to prototype,” not perfect XMPP abstraction.

[ ] 0.1.4: Write config schema for single-room bridge (estimate 1 commit)

Design the smallest possible config file/environment contract for running one bridge instance.

Acceptance Criteria

  1. Config fields are listed

    • Zulip site/email/api key
    • Zulip stream/topic
    • XMPP jid/password/muc room/nick
  2. One-room mapping is represented simply

    • avoid generalized many-room config unless needed
  3. Secrets vs non-secrets are separated

    • env vars or secrets file for credentials
    • checked-in example config for everything else
  • pm note: optimize for easy local bring-up, not future elegance.

evidence

  • commit:
  • tests:
  • datetime:

notes

  • If the config shape feels overdesigned, shrink it again.

[ ] 0.1.5: Define observability + manual test plan for v0 (estimate 1 commit)

Specify how to tell whether the bridge is healthy before adding Hermes.

Acceptance Criteria

  1. Logs are defined

    • startup config summary without secrets
    • inbound message event
    • outbound relay result
    • duplicate/loop drop reason
  2. Manual test cases are listed

    • Zulip -> XMPP happy path
    • XMPP -> Zulip happy path
    • duplicate suppression
    • reconnect after disconnect
  3. Success criteria are concrete

    • messages appear once on each side
    • sender attribution preserved enough for humans
    • no infinite echo loops
  • pm note: make the bridge boring before attaching Hermes or Retcon.

evidence

  • commit:
  • tests:
  • datetime:

notes

  • This should become the operator checklist for first deploy.

[ ] 0.1.6: Sketch Hermes/Retcon follow-on integration points (estimate 1 commit)

Document where Hermes and Retcon could attach after transport is stable, without implementing them yet.

Acceptance Criteria

  1. Hermes interaction modes are listed

    • passive listener
    • command-triggered actor
    • summarizer
  2. Retcon integration points are listed

    • append raw inbox
    • synthesize summaries
    • extract durable notes
  3. Trust boundaries are explicit

    • what can be written automatically
    • what should remain user-confirmed
  • pm note: this keeps the long-term vision visible without contaminating v0 scope.

evidence

  • commit:
  • tests:
  • datetime:

notes

  • Hermes should arrive after transport and logging are stable.