# GH-491 Chat Epic Grooming Reconciliation

Task: `GH-491-EPIC-GROOMING`
Parent issue: #491, `Epic: SaaS web console integrated chat workspace`
Date: 2026-06-30

## Decision

`GH-491-EPIC-GROOMING` is no longer blocked as a grooming task. The epic
should remain open as a product epic, but the local grooming task can close
because the child-story set exists, duplicate stories were reconciled, and the
previous missing multi-tab workspace isolation evidence has since been added.

This does not mean the SaaS chat product surface is broadly release-ready.
Release readiness still depends on each implementation child story and any
current release gates in the active release scope.

## Child Story Status

| Issue | Scope | Status | Reconciliation |
| --- | --- | --- | --- |
| #492 | Chat domain model and storage contract | Closed | Covered by the original child-story implementation and reconciliation comments. |
| #493 | Orchestrator chat API and event stream | Closed | Conditionally complete; release caveats were recorded for server-derived scope, policy-before-side-effects, scoped cursors, stream filtering, and safe errors. |
| #494 | Workflow events in chat timeline | Closed | Reconciled as already validated; do not duplicate. |
| #495 | Web console chat UX shell | Closed | Reconciled as already validated for the base shell and primary chat flow. |
| #496 | Chat security and privacy guardrails | Closed | Closed story; epic-level release evidence still requires fail-closed policy outcomes, redaction, scoped access denial, and sanitized audit behavior. |
| #497 | Chat provider provenance and token cost ledger | Closed | Metadata slice implemented and revalidated; broader reporting/UI/API release scope remains dependent on follow-up release criteria. |
| #498 | Chat evidence export retention and audit | Closed | Export/delete/audit scope implemented and revalidated; launch controls and compliance semantics remain release-scope decisions. |
| #521 | Chat multi-tab workspace isolation E2E evidence | Closed | Original QA block was resolved by later E2E evidence and QA approval. |

## Evidence That Resolves The GH-521 Block

Local Orchestra evidence and reviews now show:

- `GH-521` developer evidence: `npm run build` passed, `npm run lint` passed,
  focused chat/API/UI tests passed 18/18, Playwright
  `e2e/web-console-chat.spec.js --project=chromium` passed 2/2, and
  `npm test` passed 1138/1138 with 4 skipped.
- `GH-521` QA review approved the previous block as resolved. The review states
  Playwright now covers two simultaneous browser contexts/workspaces, negative
  DOM assertions for cross-workspace messages/events, refresh preservation,
  concurrent API sends, unauthorized message and SSE deep-link fail-closed
  behavior, export scope exclusion, cross-workspace delete rejection, and mobile
  alternate-workspace chat evidence.
- `GH-521` Architect review approved the deterministic Playwright approach
  within existing `ChatScope`, storage, API, and UI boundaries.

Security's earlier `GH-521` review was conditional, not a permanent block:
cross-scope sentinels, unsafe deep-link disclosure, stale UI state, unredacted
secret/PII, stack traces, or scope/auth/path/stream/export/delete contract
changes must still trigger Security re-review.

## Remaining Release Gates

The grooming task can close, but the epic should keep these release checks
visible:

1. `#493`: confirm server-owned tenant/workspace/actor/runtime/provider
   authority, policy-before-provider/runtime side effects, scoped idempotency,
   scoped opaque cursors, exact-scope stream filtering, and user-safe errors.
2. `#496`: confirm fail-closed allow/block/defer/redact/quarantine/delete
   policy outcomes; provider egress denied by default unless policy allows;
   redaction before persistence, evidence, provider egress, stream, audit, and
   ledger display.
3. `#497`: confirm provider-backed, blocked, deferred, retry, streaming, and
   local/no-provider paths produce scoped sanitized ledger/provenance records
   without fake token/cost values or double-counting.
4. `#498`: confirm export/delete/retention are role- and scope-gated; redacted
   markdown/JSON exports avoid raw secrets/PII/restricted fragments; legal hold,
   retention expiry, policy-denied delete, sanitized tombstones, and
   cross-workspace denial remain covered when launch-scoped.
5. Any new scope/auth/path/stream/export/delete contract change needs Security,
   QA, and Architect re-review before release.

## Outcome

Close `GH-491-EPIC-GROOMING` locally as groomed/reconciled. Keep GitHub issue
#491 open as the parent epic and continue execution through its child stories
and release gates.
