已关闭
[SESSION-08] Add cross-frontend, archive and canonical-session E2E #27
urandon创建于  8月3日关闭于  18 天前
urandon
urandon成员
8月3日 创建

Parent and architecture

Outcome

Replace the local two-tenant E2E contract with canonical-session, cross-frontend, archive and stateless-context scenarios before harness-specific/cloud release gates.

Estimate

  • 8 SP / 5 engineering days
  • Risk: high

Scope

  • Extend fixtures with Telegram plus a synthetic second frontend.
  • Cover session creation, binding/switching, event append, worker reconstruction, assistant finalization, Telegram projection, listing/history and archive lifecycle.
  • Prove canonical object prefixes and manifests without reading unrelated tenant payloads.
  • Add failure/recovery cases for duplicate updates, duplicate terminal callbacks, stale fences, corrupt snapshots, interrupted deletion and delivery retry.
  • Update:
    • docs/local-e2e.md;
    • local stand fixtures/seeding;
    • operator evidence queries;
    • CI E2E targets.
  • Keep test evidence payload-free and deterministic.
  • Define which scenarios are structural/local and which must be repeated in cloud-dev under #14.

Required scenarios

  • Two /new operations in one Telegram chat create distinct sessions.
  • The previous session remains listable/openable after switching.
  • Archive/unarchive does not delete events or artifacts.
  • A stateless worker reconstructs identical context from events and snapshot-plus-tail.
  • Telegram and a synthetic second frontend observe the same authorized session.
  • Duplicate Telegram updates create one user event and one run.
  • One terminal result creates one assistant event and one delivery.
  • Two tenants cannot cross-bind, list, open, materialize or delete.
  • Operational TTL cleanup leaves canonical history intact.
  • Audited deletion affects only the selected session/tenant.

Acceptance criteria

  • A fresh local stand runs the entire canonical-session suite through one documented command.
  • Every required scenario has explicit stable IDs/count assertions and negative tenant tests.
  • No test depends on Telegram history or a harness-local session database as canonical input.
  • CI proves session queries use point/fixed-fan-out paths and no full-table scans.
  • docs/local-e2e.md distinguishes local correctness evidence from later cloud performance/operability evidence.
likedislike
urandonurandon成员
8月4日 修改了issue 的描述
urandonurandon成员
8月4日 修改了issue 的描述
urandon
urandon成员
19 天前 评论:

Starting the autonomous structural/local implementation lane on codex/session-27-cross-frontend-e2e from b179c7d1be086691ae3ed99847a16fac9763804a.

Gap audit against the current composed E2E found that lower layers already prove many canonical invariants, but make e2e-local itself still lacks the cross-frontend/lifecycle composition required here.

First bounded patch will add a real-stand canonical session scenario covering:

  • two successive /new operations and stable access to prior sessions;
  • authorized session list/open/history through the production session API service over real YDB/S3;
  • synthetic second-frontend attach to the same Telegram-owned session and canonical event observation;
  • archive/history/artifact preservation/unarchive;
  • exact stable counts for duplicate ingress and terminal finalization.

A later bounded patch will add real context event-only vs snapshot+tail/corrupt fallback, operational TTL preservation, interrupted deletion with sentinel isolation, and explicit bounded-query/EXPLAIN evidence.

WEB-06 #35 remains the later cloud/OIDC repetition gate and is still externally blocked by unapplied WEB-05 #34; this patch will not pretend to satisfy that live evidence. Each MR will use the same post-PR fresh subagent review and one feedback cycle before merge.

likedislike
urandonurandon成员
19 天前 关联了pull request:[SESSION-08] Compose canonical session lifecycle E2E
urandon
urandon成员
19 天前 评论:

Первый composed E2E-срез влит через MR !43 (9c57e6219c4b49f0e9dd72bceaa0ae3b385de0f6, обычный merge commit).

Покрыто:

  • duplicate Telegram ingress и terminal replay с точными canonical counts;
  • реальный Telegram 429 retry без orphan delivery;
  • два последовательных /new, list/open старых сессий;
  • archive → history/artifact identity → unarchive;
  • synthetic frontend attach к текущей canonical session и terminal worker run;
  • cross-tenant get/history/bind/list/blob/delete negative matrix;
  • YDB Timestamp microsecond boundary для list/cursor;
  • bounded run-delivery continuation: terminal history фильтруется до LIMIT, полная non-terminal page переотправляет wake до исчерпания.

Exact-head CI green: https://github.com/urandon/sessionless/actions/runs/32538547293
Post-merge main CI: https://github.com/urandon/sessionless/actions/runs/32539651755

Issue оставляю открытым для второго structural slice:

  • snapshot+tail vs event-only и corrupt-snapshot fallback;
  • operational TTL preservation;
  • interrupted deletion/retry с same-tenant и cross-tenant sentinels + audit evidence;
  • YDB EXPLAIN/no-full-scan evidence и fixed 16-bucket fan-out.
likedislike
urandonurandon成员
19 天前 关联了pull request:[SESSION-08] Compose canonical snapshot replay and fallback E2E
urandon
urandon成员
18 天前 评论:

MR !44 merged into main as 6605f8a4e034484462880ea0085ce2eca4cda29f.

Delivered the second bounded #27 slice:

  • real YDB/MinIO/ElasticMQ/one-shot worker proof that snapshot+tail materialization is byte-identical to event-only replay;
  • covered event payloads are unavailable during the snapshot-path worker run, proving they are not read;
  • corrupt pinned snapshot falls back to canonical event replay and still succeeds;
  • deterministic harness context-history capture is explicit opt-in and is absent by default;
  • Telegram delivery is drained before covered payloads are hidden;
  • fixed the real snapshot builder/YDB pagination mismatch (200-row store bound), with a 201-event regression proving page requests [200,1].

Evidence:

#27 remains open. The next structural slice is operational-TTL preservation, interrupted deletion with same-/cross-tenant sentinels, and bounded YDB EXPLAIN/no-full-scan evidence. Cloud/browser repetition remains tracked by #34/#35/#14.

likedislike
urandonurandon成员
18 天前 关联了pull request:[SESSION-08] Prove TTL-safe resumable deletion and bounded query plans
urandon
urandon成员
18 天前 评论:

Завершён финальный structural slice SESSION-08.

Что вошло:

  • MR !47: resumable tenant-scoped deletion с точным inventory и повтором после частичного удаления Object Storage;
  • доказательство сохранности canonical history/artifacts и durable delivery/checkpoint ledgers после operational TTL;
  • same-tenant и cross-tenant sentinels;
  • cleanup session_displays;
  • 13 реальных YDB EXPLAIN shapes с fail-closed запретом TableFullScan;
  • отдельный follow-up #57 для явной политики retention/deletion payload-free API idempotency и upload-intent metadata.

Проверка и оркестрация:

  • feature SHA: d6af4e4a54856852657dab7657c93df6615d4797;
  • exact-SHA CI #149 — полностью зелёный: https://github.com/urandon/sessionless/actions/runs/32554906066
  • независимый review: один цикл, итог no P1/P2;
  • no-ff merge SHA: fc242feff33fd841d90e0b06e5ef5f9478430649;
  • GitCode → GitHub push mirror завершён, GitHub main подтверждает тот же SHA;
  • post-merge CI #150: Go, Telegram Worker, browser/accessibility, YDB schema/state, local multi-service stand и Terraform — зелёные; runtime clean-room build зелёный, публикация остановилась только на известной live-foundation границе #34: https://github.com/urandon/sessionless/actions/runs/32555763352

Локальная структурная acceptance #27 выполнена. Реальные managed-TTL/RU и cloud browser/OIDC доказательства остаются в терминальных cloud-gates #14/#34/#35 и не размывают этот bounded contract.

likedislike
urandonurandon成员
18 天前 关闭了 issue
urandonurandon成员
15 天前 添加了label:mvpsessiontest
urandonurandon成员
15 天前 关联了里程碑:MVP — Core platform (#6)