---
path: /v6
surface: customer
domain: v6-steward
auth: signed-in
source: apps/oshun/web/src/app/v6/page.tsx
status: walked
last_walked: '2026-06-03 automated runtime probe (Playwright headless) — prod build + mock BFF; render, HTTP 200, server-rendered <h1>, 0 page errors verified. Evidence: WALKTHROUGH/results/walkthrough-runtime-probe-2026-06-03.md'
v1_scope: out-of-v1
---

# V6 — Egbe Steward web app

## Purpose

Browser companion for the V6 **Egbe Steward App**: an asynchronous-stewardship
console for the V6 agent-companion experience. It surfaces the Chronicle digest,
remote objectives, squad comms, and Crossroads counsel for a steward's agents.
**Out of the V1 feature map** — this is a V6-arc surface that ships in the
`apps/oshun/web` build (documented here for an exhaustive route inventory).

## Entry points

- **Direct URL / bookmark** — `/v6` (signed-in; not in `PUBLIC_PATHS`)
- **Shell breadcrumb** — `Explore › Egbe Steward App` (the page mounts
  `ShellLayout active="explore"` with explicit breadcrumbs)

## Layout regions

- **Header**: shell header + page header (`data-v6-steward-browser`) with kicker
  "V6 steward", `model.title`, `model.summary`, and an **Open Homestead**
  secondary button
- **Status rail** (`data-testid="v6-steward-status-strip"`) — four metrics:
  Steward, Agents, Open (pending objectives), Crossroads (open count)
- **Sync band** (`data-testid="v6-steward-action-status"`) — live action-status
  line (e.g. "Ready for asynchronous stewardship.")
- **Tablist** (`role="tablist"`, `aria-label="Steward App sections"`) — four
  tabs: Chronicle, Objectives, Squad, Crossroads (icons via lucide-react)
- **Main** — the selected section panel

## States

- [ ] **Chronicle (default)** — `data-testid="v6-steward-section-chronicle"`:
      latest chronicle title, generation-mode digest line, ranked beats list
- [ ] **Objectives** — input + 48/64/88 priority segments + Issue Objective;
      list of objectives (status / autonomy mode / target / verb / priority)
- [ ] **Squad** — message textarea + intent segments (status-check /
      objective-clarification / permission-response) + Send Squad Comms; message
      list (intent / delivery state / body)
- [ ] **Crossroads (populated)** — open-choice prompt + stakes, option buttons,
      counsel textarea, Submit Counsel
- [ ] **Crossroads (empty)** — "No Crossroads records need review." when
      `getOpenOrLatestCrossroads(model)` returns null
- [ ] **Loading / Error / Offline** — N/A: the surface is client-rendered from
      `buildV6StewardAppModel()` (an in-bundle deterministic model); there is no
      network read on this page, so no loading/error/offline read states
- [ ] **Gated** — signed-in (shell); no per-role gate beyond the session
- [ ] **Standalone PWA** — renders within the shell

## Interactions

- [ ] **Open Homestead** (button, `data-testid="v6-steward-open-homestead"`) —
      sets the action-status line to "Opening homestead <homesteadPath>." (no
      navigation wired — status-only)
- [ ] **Section tabs** (4 buttons, `role="tab"`,
      `data-testid="v6-steward-tab-<id>"`) — switch `selectedSection`;
      `aria-selected` tracks the active tab
- [ ] **Objective label** (input, `data-testid="v6-steward-objective-input"`)
- [ ] **Priority segments** (3 buttons 48/64/88, `aria-pressed`) — set
      `objectivePriority`
- [ ] **Issue Objective** (button, `data-testid="v6-steward-issue-objective"`) —
      `createV6ObjectiveDraft(...)`, prepends to the local objectives list, sets
      status "Objective issued to <agent>." (local state only — no BFF write)
- [ ] **Squad message** (textarea), **intent segments** (3 buttons), **Send
      Squad Comms** (button) — append a local `V6SquadCommsMessage`; status
      "Squad comms sent to <agent>." (local only)
- [ ] **Crossroads option buttons** (`aria-pressed`), **Counsel** (textarea),
      **Submit Counsel** (button) — set status "Crossroads counsel submitted:
      <label>." (local only)

## Data & contracts

- **Reads**: in-bundle model `buildV6StewardAppModel()` from
  `apps/oshun/mobile/v6/stewardAppModel` (shared with the V6 mobile Steward
  App); no BFF/network read
- **Writes**: _None on the wire._ All actions mutate local React state and the
  action-status line; the V6 BFF wiring is a future-arc concern
- **Realtime**: _None._
- **Caching**: client component; SSR shell only
- **Auth/role check**: session (signed-in); no V1 BFF policy applies (out-of-v1)
- **Contracts**: `V6Objective`, `V6SquadCommsMessage`, `V6StewardSectionId`,
  `V6_STEWARD_SECTION_IDS`, `createV6ObjectiveDraft`,
  `getOpenOrLatestCrossroads`, `getPrimaryV6StewardAgent`

## Cross-references

- Sibling out-of-v1 surfaces: [`v2.md`](./v2.md),
  [`v3-landing.md`](./v3-landing.md)
- V6 studio counterpart:
  [`../../studio/future/egbe-studio.md`](../../studio/future/egbe-studio.md)
- Spec: `V6/V6_features.md`, `V6/V6_ARCHITECTURE.md`
- Component sources: `apps/oshun/web/src/app/v6/V6StewardWebApp.tsx`,
  `apps/oshun/mobile/v6/stewardAppModel.ts`

## Open questions / known gaps

- [ ] Every action is local-state only (`ACTION_AT_ISO` is a fixed constant);
      confirm the V6 BFF endpoints that will back Issue Objective / Send Squad
      Comms / Submit Counsel before this surface is promoted past V6 preview.
- [ ] Open Homestead sets a status line but does not navigate — confirm the
      intended homestead deep-link target.
