Skip to content

moooon

Motir

Vibe your whole project. Bring an idea — Motir's three AI layers plan it, track it, and ship it, end to end. You're looking at Motir, built in Motir.

  • Vibe Project
  • Open Source
  • AI Agent
  • AI Loop
1
requests
0
upvotes
145
planned
1,361
shipped

Motir · Work items

MOTIR-310Done

5.6.2 The combined collaboration journey E2E — one issue through every Epic-5 feature, the cross-story seams asserted end-to-end

Estimate: 35m · Depends on: 5.6.1, 5.1.7, 5.2.8, 5.3.8, 5.4.11, 5.5.5

The chain-proof: tests/e2e/collab-journey.spec.ts, one continuous flow on a fresh issue (not the loaded fixture — this spec is about correctness of the seams, not scale), against the standing dev-server harness with the Inngest dev stub.

The build-up: create an issue (auto-watch asserted) → second user watches → set custom-field values + labels + components on the rail → post a comment that BOTH embeds an upload AND @mentions the watching user → assert the seams in one pass: the attachment panel shows the file editor-sourced (5.2.3 ran inside 5.1.2's tx chain), the mentioned watcher received exactly ONE email (the mention; the watcher job deduped — grep the dev console for both jobs' output), the author received none, a third watching user received the watcher email, and the All feed interleaves the field changes, the label/component entries, and the comment in true order with the History tab showing the non-comment entries.

The unwind: delete the comment (thread + reply cascade) → the embedded attachment unlinks from the panel, History records the deletion (who/when, no content), and no further notification fires; delete a valued custom field → the rail card vanishes and the old History entries render the deleted-referent fallback; archive the select option in use → the rail value and its History entries keep rendering with the archived mark. Transition the issue → the watcher transition email fires (actor excluded).

Vitest companion (tests/integration/collab-journey.test.ts): the same chain at the service layer where E2E assertion is weak — the comment-delete transaction leaves NO orphan mention rows / attachment links / revision gaps (DB-state asserts), and the notification events carry the exact recipient sets the dedupe contract promises.

Acceptance criteria

  • The E2E passes the full build-up + unwind with every cross-story assert named above, green in CI's Playwright lane (selector + harness memories respected).
  • The notification asserts are exact (one mention email, one watcher email to the non-mentioned watcher, zero to the actor; zero after the unwind) — not substring-loose.
  • The Vitest companion proves the no-orphan transaction properties + the recipient-set contracts at the service layer.
  • No duplication of per-story coverage (review note in the spec header mapping each assert to the seam it owns); flake-isolation respected.

Context refs

  • The five story test subtasks (5.1.7 / 5.2.8 / 5.3.8 / 5.4.11 / 5.5.5) — what NOT to re-test; their specs as harness/selector exemplars
  • 5.6.1 helpers; the dev email console [EMAIL] grep contract; @inngest/test where the E2E can't reach
  • The cross-story seam contracts: 5.2.3 (link-on-write in comment txs), 5.4.5 (mention dedupe), 5.5.1 (fallback rendering)
  • The E2E harness memories (standing dev server + Inngest stub, OOM-safe)