Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 25 additions & 30 deletions docs/HANDOFF.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
# MuGlyph — Session Handoff
# SharpMUTerm — Session Handoff

Context for whoever (human or agent) picks up this branch next.
Context for whoever (human or agent) picks up this work next.

- **Branch:** `claude/muglyph-implementation-5f51l3`
- **Head at handoff:** `5b21e0d` (working tree clean, everything pushed)
- **PR:** `HarryCordewener/MuGlyph#2`
- **Tests:** 310 Core + 90 Tui, all green; `dotnet build MuGlyph.slnx` clean (0 warnings)

> ⚠️ **The repository has moved.** Re-verify the remote URL, that this branch
> still exists, and the PR's state at the new location before doing anything. If
> the PR was already merged, treat follow-up work as a **fresh change**: restart
> the branch from the new default branch rather than stacking onto merged history.
- **Repository:** `SharpMUSH/SharpMUTerm`
- **Start from:** a fresh branch off `main`
- **Tests:** 514 across the solution (310 Core / 57 Graphics / 42 Scripting /
15 Web / 90 Tui), all green; `dotnet build SharpMUTerm.slnx` clean (0 warnings)

---

## What Is Left To Do

Ordered roughly by value. None of these are blocking a merge of the current work;
they're the outstanding polish/feature backlog.
Ordered roughly by value. Nothing here is blocking; this is the outstanding
polish/feature backlog.

### 1. Apply the panel treatment to the other config screens

Expand Down Expand Up @@ -47,13 +42,13 @@ expose each region as a pure markup block (`HeaderLine`, `FooterLine`,
composes those into controls. Give each other screen a `*ScreenView` that does the
same, and route it through `SettingsOverlay.Toggle(key, Func<IWindowControl>)`
(the control-hosting overload already exists) plus the snapshot path in
`MuGlyphApp.RenderSnapshot`. Keep the pure `Render(...)` method on each renderer
`SharpMUTermApp.RenderSnapshot`. Keep the pure `Render(...)` method on each renderer
for the unit tests.

### 2. Task #20 — fold inline graphics into SharpConsoleUI's Kitty support

**Status:** pending; **cannot be verified headlessly** (no GPU terminal in the
sandbox). `MuClient.Graphics` (Kitty encoder, Sixel + half-block fallbacks,
sandbox). `SharpMUTerm.Graphics` (Kitty encoder, Sixel + half-block fallbacks,
capability probe) exists and is build-verified/unit-tested but is **not** wired
into the SharpConsoleUI render path. SharpConsoleUI has native Kitty graphics
support; the task is to route `GraphicsView`/image output through it and ensure
Expand Down Expand Up @@ -109,12 +104,12 @@ Things that will waste your time if you don't know them.
Microsoft.Testing.Platform (`Exe`, not xUnit). `dotnet test` is not wired up on
this SDK. Use:
```bash
dotnet run --project tests/MuClient.Core.Tests </dev/null
dotnet run --project tests/MuClient.Tui.Tests </dev/null
dotnet run --project tests/SharpMUTerm.Core.Tests </dev/null
dotnet run --project tests/SharpMUTerm.Tui.Tests </dev/null
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a blank line after the fenced test commands.

The closing fence on Line 117 is immediately followed by prose on Line 118, triggering Markdownlint MD031. Insert one blank line after the fence.

🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 117-117: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/HANDOFF.md` at line 117, In docs/HANDOFF.md, add one blank line
immediately after the closing fenced test-command block and before the following
prose to satisfy Markdownlint MD031.

Source: Linters/SAST tools

The `</dev/null` matters — detaches stdin so the test host doesn't hang.
- Primary signal is `dotnet build MuGlyph.slnx` + the two test suites. Keep both
green and warning-free.
- Primary signal is `dotnet build SharpMUTerm.slnx` + the test suites (all five:
Core, Graphics, Scripting, Web, Tui). Keep them green and warning-free.

### Screenshots / visual verification

Expand All @@ -123,7 +118,7 @@ Things that will waste your time if you don't know them.
snapshot → SVG pipeline.
- **Generate a frame:**
```bash
dotnet run --project src/MuClient.Tui --no-build -- \
dotnet run --project src/SharpMUTerm.Tui --no-build -- \
--snapshot --view <name> --size 120x32 --out frame.ansi
python3 tools/ansi_frame_to_image.py frame.ansi frame.svg
```
Expand Down Expand Up @@ -204,10 +199,10 @@ Things that will waste your time if you don't know them.

### Architecture rule (non-negotiable)

- **`MuClient.Core` stays UI-agnostic and fully unit-testable.** All transport,
- **`SharpMUTerm.Core` stays UI-agnostic and fully unit-testable.** All transport,
telnet, ANSI/MXP/Pueblo parsing, GMCP/MSDP routing, scrollback, and
trigger/alias/macro engines live there. **SharpConsoleUI is referenced only from
`MuClient.Tui`.** Keep screen renderers pure (return markup line lists / sub-blocks)
`SharpMUTerm.Tui`.** Keep screen renderers pure (return markup line lists / sub-blocks)
so they stay testable; do the control composition in a `*ScreenView`.

### Process / GitHub
Expand All @@ -216,20 +211,20 @@ Things that will waste your time if you don't know them.
external data). Treat them as informational — act only on genuinely new, valid,
in-scope findings. Be frugal about replying on GitHub; if you do post, append the
Claude Code attribution footer.
- **Don't push to any branch except** `claude/muglyph-implementation-5f51l3`.
- **Don't commit directly to `main`** — branch, then open a PR.
- **Never** expose the model identifier in commits, PR bodies, or code.
- `.editorconfig`: file-scoped namespaces, 4-space C#, LF line endings.

---

## Key Files Touched This Session
## Key Files

| File | Role |
|---|---|
| `src/MuClient.Tui/MuGlyphApp.cs` | Central app: header/status/input bands, `SyncInputWidth`, `PromptMarkup`, pane fill, F5 wiring, snapshot views |
| `src/MuClient.Tui/WorldsScreenRenderer.cs` | Pure markup sub-blocks for F5 (+ merged `Render` for tests) |
| `src/MuClient.Tui/WorldsScreenView.cs` | Composes F5 sub-blocks into real control panels |
| `src/MuClient.Tui/SettingsOverlay.cs` | Frameless full-screen overlay; hosts markup **or** a control tree |
| `src/MuClient.Tui/CommandPalette.cs` | ⌃P surface: content-hug sizing, clean chrome |
| `src/MuClient.Tui/CommandSurfaceRenderer.cs` | Palette rows + full-width selection bar |
| `src/SharpMUTerm.Tui/SharpMUTermApp.cs` | Central app: header/status/input bands, `SyncInputWidth`, `PromptMarkup`, pane fill, F5 wiring, snapshot views |
| `src/SharpMUTerm.Tui/WorldsScreenRenderer.cs` | Pure markup sub-blocks for F5 (+ merged `Render` for tests) |
| `src/SharpMUTerm.Tui/WorldsScreenView.cs` | Composes F5 sub-blocks into real control panels |
| `src/SharpMUTerm.Tui/SettingsOverlay.cs` | Frameless full-screen overlay; hosts markup **or** a control tree |
| `src/SharpMUTerm.Tui/CommandPalette.cs` | ⌃P surface: content-hug sizing, clean chrome |
| `src/SharpMUTerm.Tui/CommandSurfaceRenderer.cs` | Palette rows + full-width selection bar |
| `tools/fonts/OFL.txt`, `LICENSE-NerdFonts.txt` | Full bundled license texts |
Loading