Skip to content

Epic: Deliver a Telegram-first conversational agent MVP #122

Open

Description

@alexeygrigorev

Epic: Deliver a Telegram-first conversational agent MVP

Status: blocked overall — all seven child source slices, reviews, deployment permissions, and the normal-CI all-off deployment are complete; no direct epic implementation remains, and the consolidated HUMAN rollout waits for #166/#182 to restore the final canonical Card/Task baseline
Tags: enhancement, assistant, backend, infra, testing, data, P1, human
Depends on: #166 A/B/C → #182 final no-replacement Cards preflight → #166 D → cleanup, followed by one successful ordinary all-off deployment; then #128's staged HUMAN rollout and child evidence cross-posts
Satisfied dependencies: #123 is closed; #121 and #124-#128 source/default-off prerequisites are integrated; #129/#130/#131 and #136/#140/#143 are complete; normal dark deployment is proven
Not a dependency: #137 retained-queue evidence; any migration/import framework, polling bot, source repository, or manual app deployment
Blocks: none outside this epic; #128 closes #121 and #124-#127 from its cross-posted HUMAN evidence, then closes #122 last
Next owner: #166 credentialed operator and On-Call for the protected storage sequence; afterward the authorized #128 Telegram/provider owner with On-Call; PM closes each child and this epic
Resume condition: #166/#182 record accepted production outcomes, canonical writers reopen, temporary phase controls are removed, ordinary push-triggered OIDC deployment is restored, and one following normal main run succeeds with the exact six conversational controls dark
Architecture: docs/CONVERSATIONAL_AGENT_PLUGIN_ARCHITECTURE.md (accepted architecture commit 4e5402c)
Current evidence: accepted child commits listed below; normal dark deployment 31545689094; reconfirmation 31711997388; current #128 rollout tracker

Epic outcome

Ship one private-Telegram conversational MVP for verified DataOps users:

  • text, one bounded voice note, and one bounded photo enter through the same authenticated private-chat adapter;
  • provider-derived transcript/description is private and untrusted until the user explicitly uses, corrects, or discards it;
  • the first internal effect is exactly one actor-owned todo after an immutable preview and transactional approval;
  • the first external effect is exactly one public-source Typefully saved draft after an immutable preview and transactional approval;
  • the Typefully result remains unscheduled, unpublished, and unshared;
  • duplicate delivery, stale controls, wrong actors, revoked bindings, groups, and ambiguous provider effects cannot create a second or unauthorized effect;
  • rollback returns to authenticated bounded dark maintenance and never restores legacy /todo, /social, /podcast, direct mutation, polling, or a second adapter.

The accepted child issues remain the detailed product authorities. #122 coordinates lifecycle and closure only; it owns no additional route, schema, worker, provider adapter, UI, infrastructure, migration, or compatibility implementation.

Completed source and dark-deployment ledger

Milestone Issue Accepted source Current lifecycle
M1 state/storage/retention/export safety #123 e27f6856fee5cc98b94e66cd3a4941195568bd7a closed, deployed, On-Call accepted
M2 static plugin runtime and conversational z.ai #125 543d63c51795b5a8849fc4ba0d8b7802639c51a3 source/default-off deployed; live z.ai evidence remains
M3 Telegram identity/text/voice/photo #121 253d0f9699dae40c3774955514b2e9fe1ba2ef28 source/default-off deployed; HUMAN stages tracked and delegated to #128
M4 transactional approval/execution recovery #124 840dd471a522b9275a62174185076eb6d1072080 source/resources default-off deployed; live worker/recovery evidence remains
M5 conversational todo #126 c47c5258a08b29c7c5ea6e797149c8a6619bbe71 source/default-off deployed; one controlled todo journey remains
M6 Typefully saved draft #127 92706b37abb47616fd071606193066a7b3b735a3 source/default-off deployed; private config/effect/reconciliation evidence remains
M7 integrated rollout/cutover #128 9595361a0546a52a5cb90ace7df0bbdeb524866a plus accepted E2E repair fe030ad3b36e73df2542ca8c2bf42afa7ed3277e all-off deployment complete; staged HUMAN matrix waits for #166/#182

Every commit above is an ancestor of deployed SHA 794076354048f6ff3417d55d13d334caf4237cea.

Normal OIDC run 31545689094 created the accepted dark realization, reached UPDATE_COMPLETE, seeded, and passed deployed smoke. It retained the topic, three custom log groups, and disabled generated schedules; the accepted transform has 17 condition-gated alarm definitions and correctly instantiates zero alarms while all capabilities are off. Run 31711997388 reconfirmed stack deployment, seed, and smoke with the exact dark controls:

Telegram ingress=false
execution=false
plugins=none
Typefully external=false
voice=false
photo=false

This proves publication and default-off infrastructure. It does not prove a real binding, webhook ownership, Telegram delivery, model/media/provider result, task/Typefully effect, queue/heartbeat canary, subscription, or reverse rollback.

Permanent safety boundary

  • Telegram webhook secret/chat allowlisting is ingress control; permanent admin-managed numeric identity binding plus an enabled DataOps user grants private authority.
  • Core, not model/plugin/Telegram, owns revision, request changes, exact approval, cancel, discard, and session transitions.
  • Approval atomically consumes one presentation, claims the exact proposal, and queues one durable attempt. A leased worker performs the effect outside the webhook.
  • Todo is create-one-only and actor-owned. Typefully is public-source create-one-saved-draft-only. No schedule, publish, share, update, bulk effect, or direct slash-command mutation exists.
  • An ambiguous post-dispatch result becomes outcome_unknown and is never automatically retried. Reconciliation cannot fabricate, replay, or overwrite an effect.
  • Raw media reaches only its intended provider through bounded temporary storage and is deleted. Private messages, derived text, proposals, and private results follow the accepted 30-day boundary; minimal safe audit/effect receipts follow the one-year boundary.
  • Public source, logs, issues, screenshots, metrics, queues, failure artifacts, portable exports, and model context exclude credentials, tokens, Telegram identities, raw media, private transcripts/OCR, provider bodies, replayable approvals, and private edit URLs.
  • Production resources remain CloudFormation-owned. Runtime creates no infrastructure. Feature changes deploy only through ordinary reviewed main OIDC CI/CD.

No migration or compatibility work

The MVP needs no data migration/import phase. Identity bindings and conversations are ordinary permanent runtime records created through the accepted product paths.

Do not import usernames/chat allowlists/podcast-bot state, revive a legacy handler, add snapshot/backfill/checkpoint/resume/orphan/rollback APIs, run retained importers, or modify source repositories. #174's migration cleanup does not remove permanent product recovery, idempotency, uncertainty handling, retention, export validation, or disaster-recovery safety.

#166/#182 is application deployment sequencing, not conversational data migration. The exact protected phase commits must not acquire Telegram flags, secret changes, bindings, provider calls, canaries, or epic implementation.

Remaining rollout and closure sequence

#128 is the only execution tracker for the steps below. Child issues do not run parallel provider canaries or independent deployments.

  1. Complete Replace the transitional Tasks table with the final cardId schema #166 A/B/C, Gate canonical Card lifecycle on the empty production Cards table #182's final read-only Cards preflight, Replace the transitional Tasks table with the final cardId schema #166 D, canonical first-write evidence, and cleanup. Restore ordinary push-triggered OIDC deployment and record one successful all-off run with final writers open.
  2. [HUMAN] Privately confirm one webhook owner/no poller, intended identity/admin, exact managed Telegram/z.ai/Groq/Typefully configuration, alarm subscription owner, public-source/media test fixtures, rollback owner, and public redaction plan.
  3. [HUMAN] Reconfirm dark maintenance/readiness and real bind → revoke → fail-closed → reactivate behavior with zero model/media/domain/provider effect while disabled.
  4. [HUMAN] Enable ingress/execution with plugins todo, media off, and Typefully external off. Prove private text/session behavior, z.ai conversation, exact preview/revision/approval, duplicate convergence, one queued/leased attempt, one actor-owned Task, result delivery, static /todo, and group/unlinked isolation.
  5. [HUMAN] Enable voice and photo separately. Make exactly one bounded Groq voice and one bounded z.ai photo call, cover a use/correction decision across one and discard across the other, prove no retained raw media, and return each media control off after its canary.
  6. [HUMAN] Add Typefully to the allowlist with external execution off. Propose/revise/cancel and prove there is no approve/queue/provider path and no durable dispatchable canary.
  7. [HUMAN] After Ship approved Typefully saved-draft creation #127's private account/source/reconciliation readiness, enable Typefully external execution and approve exactly one typed-public-source saved draft. Prove exact intended account/content, unscheduled/unpublished/unshared semantics, one provider effect, private result delivery, and conservative handling of any naturally occurring ambiguity without blind retry. Do not deliberately manufacture an ambiguous provider effect.
  8. [HUMAN] Observe bounded readiness, queue/worker/recovery/result-delivery, heartbeat schedules, confirmed alarm canaries, and redacted logs/metrics. Do not inspect/publish payloads, purge queues, or mutate unrelated retained resources.
  9. [HUMAN] Reverse the controls through ordinary OIDC in the accepted Roll out and cut over the Telegram conversational MVP #128 order until the exact all-dark snapshot is restored. Prove durable state remains truthful, no unknown effect becomes retryable, and no legacy mutation/poller returns.
  10. Cross-post sanitized evidence to Consolidate private Telegram identity, text, voice, and photo input #121 and Add transactional approval and durable execution recovery #124-Ship approved Typefully saved-draft creation #127. PM closes each child only when its own criteria pass, closes Roll out and cut over the Telegram conversational MVP #128 after full observation/rollback, then closes Epic: Deliver a Telegram-first conversational agent MVP #122 last.

A failed stage stops progression and uses the reviewed switch rollback. It does not authorize a manual deploy, Lambda/IAM patch, queue purge, data edit, provider replay, broad credential inspection, import/export/restore, or destructive cleanup.

Epic acceptance criteria

No direct #122 Software Engineer stage remains. If a HUMAN stage finds a source defect, stop and regroom it on the owning child (or a new bounded bug); do not implement an unreviewed fix in the epic.

Out of scope

Telegram groups/shared context beyond static redirect; web conversation/approval; generic files/uploads; SOP/podcast/GitHub mutation; workflows/recurring/calendar/newsletter/sponsor/bookkeeping plugins; scheduling/publishing; history-wide retrieval or automatic memory; dynamic plugins/packages/DSLs; multi-effect plans; plaintext credentials/secret UI; raw operational knowledge in the public repo; manual app deployment; queue/data cleanup; migration/import; and edits to ../dtc-operations, ../datatasks, ../podcast-assistant, or other source repositories.

Activity

  1. added
    enhancementNew or improved functionality
    needs groomingRaw intake that needs PM grooming
    assistantAssistant modules and jobs
    infraDeployment and infrastructure
    dataData model, migration, storage
    P1Important
    portalShared portal shell and UX
    and removed
    needs groomingRaw intake that needs PM grooming
    on Jul 29, 2026
  2. changed the title [-]Build channel-independent conversational agent plugin framework[/-] [+]Epic: Deliver a Telegram-first conversational agent MVP[/+] on Jul 29, 2026
  3. alexeygrigorev commented on Jul 29, 2026

    @alexeygrigorev
    MemberAuthor

    PM GROOMED: Reframed this as a dependency-ordered epic rather than one implementation branch. The MVP is intentionally limited to private Telegram, admin-provisioned identity links, persistent bounded conversations, a static two-turn plugin runtime, immutable proposal approval, conversational todo plus deterministic /todo, and Typefully saved-draft creation only after exact approval. The body records seven MVP children (reusing #121 for the Telegram adapter), their dependency graph, the current z.ai credential/deployment gap, complete automated race/security/provider/retention tests, and four [HUMAN] rollout gates. SOP, podcast, history/memory, group chats, workflow plugins, uploads, and the web conversation UI are explicitly post-MVP. No child issues were created during this grooming pass; the orchestrator can file/link them from the specified breakdown before implementation.

  4. alexeygrigorev commented on Jul 29, 2026

    @alexeygrigorev
    MemberAuthor

    PM REGROOMED against accepted architecture commit 4e5402c. The epic keeps seven children and now makes Telegram voice/photo part of M3 (#121), because media shares the verified private-chat adapter, download, normalization, event, and provider boundary. Updated scope removes /todo from MVP, removes automatic inactivity pause, sets 30-day private payload retention, splits PluginDraft/ProposalVersion/ProposalPresentation/ExecutionAttempt, requires transactional claim plus durable leased worker/recovery, makes actions core-owned, and narrows Typefully to public-source create-only with no preferred-time/schedule/publish behavior. Added exact Groq whisper-large-v3, z.ai glm-4.6v, z.ai Anthropic conversational, media cleanup, provider egress, race/recovery, retention/restore, and HUMAN Telegram/provider gates. Removed portal/frontend labels because the web adapter is post-MVP. No child issues were created in this pass.

  5. added
    humanCode done or issue blocked on human verification
    on Jul 31, 2026
  6. alexeygrigorev commented on Jul 31, 2026

    @alexeygrigorev
    MemberAuthor

    PM EPIC STATUS RECONCILIATION — all source slices integrated; production lifecycle open

    All seven child source slices are integrated in dependency order:

    Only #123 is closed. The other six children remain open for deployment,
    provider, Telegram, or HUMAN production acceptance. The latest #128 automated
    application gate is green, but its deployment rolled back and produced no
    accepted production conversational graph. Normal deployment is now blocked by
    #136 → #140 → #141.

    The former combined child criterion is split accordingly: source integration is
    complete; child lifecycle completion remains open. The other automated epic
    criteria are checked because the accepted child implementations prove those
    source/runtime contracts. All six explicit HUMAN gates remain unchecked.

    PM decision: keep the epic open with human. It depends on the successful
    normal deployment and its child production/HUMAN gates, but not on #137.
    Retained-queue reconciliation is downstream evidence-only work and must not
    create a release cycle or gain deletion authority.

    No code, AWS, IAM, workflow, environment, flag, provider, Telegram, or queue
    action was performed during this reconciliation.

  7. removed
    humanCode done or issue blocked on human verification
    on Jul 31, 2026
  8. alexeygrigorev commented on Jul 31, 2026

    @alexeygrigorev
    MemberAuthor

    PM tracker reconciliation — epic dependency made truthful

    The seven integrated source slices remain preserved. The epic now names #136 plus #140 lifecycle acceptance and #143 ownership remediation, explicitly excludes #141 as a blocker, and records the #128 On-Call/default-off deployment resume signal. Removed the premature human label while deployment and child gates remain. No child or HUMAN criterion was marked complete.

  9. added
    humanCode done or issue blocked on human verification
    on Aug 13, 2026
  10. alexeygrigorev commented on Aug 13, 2026

    @alexeygrigorev
    MemberAuthor

    PM epic lifecycle reconciliation — implementation complete; #128 owns one post-#166 HUMAN matrix

    Replaced the stale “seven children to create / wait for #136” tracker with the current closeout state.

    Added human; kept the epic open and blocked overall. This reconciliation made no repository edit, test run, AWS/dispatch/provider/credential/data/import/export/restore action, commit, or push.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1ImportantassistantAssistant modules and jobsbackendBackend/APIdataData model, migration, storageenhancementNew or improved functionalityhumanCode done or issue blocked on human verificationinfraDeployment and infrastructuretestingTests and QA

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions