> For the complete documentation index, see [llms.txt](https://faction-os.gitbook.io/faction-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/phases/phase_24/session_03_live_enemy_presentation.md).

# Session 03: Live Enemy Presentation

**Session ID**: `phase24-session03-live-enemy-presentation` **Package**: apps/web **Status**: Not Started **Estimated Tasks**: \~22 **Estimated Duration**: 2-4 hours

***

## Objective

Render the already-folded live enemy tier on the battlefield - skirmisher edge markers, the ram at the keep gate, the gremlin count chip, stacked wraith wisps, and siege state - as a thin selector-fed board-internal layer with accessible controls, safe labels, and complete reduced-motion twins.

***

## Scope

### In Scope (MVP)

* A new board-internal live-legion layer component beside `CampLayer.tsx`, ordered below hero tokens, following the shipped layer conventions.
* Skirmishers: small red edge markers with count badge, tooltip showing the safe test path, green pass/clear state; bounded visible count.
* Ram: marker at a stable keep-gate anchor with slow-rock motion variant and cracked-gate static chip; `build_fix` collapse state.
* Gremlins: count chip on the keep with subtle jitter motion variant and jitter-free static twin.
* Wraiths: one translucent wisp per hero near its standee, stack-count badge, darkening by stack, board-wide visible cap of 3; static wisp icon twin.
* Siege: visible siege state derived from projection siege level.
* Accessibility: each interactive marker is a native button with an accessible name; inspection routes to its real source (skirmisher tooltip to test path, wraith to its hero) without new routes.
* Component tests across desktop/mobile board sizes, reduced-motion mode, cap behavior, and privacy of rendered strings.

### Out of Scope

* Strike playback, camp HP drain, kills (Session 04).
* Scrying posture and alert pulse (Session 05).
* Audio (Session 06).

***

## Prerequisites

* [ ] Session 01 complete (shared safe-label and presentation constants).

***

## Deliverables

1. Live-legion presentation layer component(s) plus any pure presentation selectors needed in `apps/web/src/lib/`.
2. Keep-gate anchor if no stable anchor exists, kept inside the board-internal layer contract.
3. Component and selector tests including reduced-motion and privacy checks.

***

## Success Criteria

* [ ] A real `test_failure` event produces a visible skirmisher and a pass clears it, through the normal event path.
* [ ] Ram, gremlin, wraith, and siege states each render with motion and static variants and never exceed their visual caps.
* [ ] Every marker has an accessible name and inspects to a real source.
* [ ] No raw output, prompts, absolute paths, or secrets render.
* [ ] Web typecheck and focused tests pass.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://faction-os.gitbook.io/faction-os-docs/.spec_system/archive/phases/phase_24/session_03_live_enemy_presentation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
