Repository navigation
feat(ui): the Character tab, with the picker, header and gear (M14-08) - #290
Merged
Merged
Conversation
A fourth tab drawn from char list --json and char gear --json. Item names take their quality colour from rules the server makes from the shipped gear_slots.toml (gear.colour_class, gear.colour_rgb); the templates hold no slot name and no colour code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sandgraal
marked this pull request as ready for review
October 19, 2026 07:02
Owner
Author
|
Reviewed at fc522f8. security-reviewer: CLEAN (no new write path, no new data-to-HTML sink, colour rules only from the shipped gear_slots.toml, CSP style hash covers them, clipboard gets the raw link only). code-reviewer: CLEAN (every acceptance item has a test that fails without the code; mutation probe caught all seven changes; widened explorer allowlist is exactly char list + char gear). Four uncounted notes go to the conductor's docs PR. |
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
sandgraal
added a commit
that referenced
this pull request
Oct 19, 2026
…-72; M14-09 pointers (#293) ## What Conductor docs lane (ADR-0013 amendment, 2026-10-17): `docs/BACKLOG.md` only. - Ticks M14-02 (#288), M14-05 (#286), M14-06 (#287), M14-08 (#290). - M14-02: a dated note on the Windows stdin follow-up (#291, 826ce3d): why `DEVNULL` made the child's `isatty()` True on Windows, what changed, and that Windows on `main` at 826ce3d is green. - M14-08: a dated note from the #290 reviews (shipped-table colours vs the ticket's "from the model" wording, which is an owner item; the `aria-live` region; the `page.css` exemption in the colour grep test). - M14-09: pointers from the #290 code review (the `loadGear` refactor, the intro paragraph and allowlist test that change, the default-flavor question, the `aria-live` narrowing). - New tickets: M13-71 (`guard_bash.py`: `--input` bodies and the substring allowlist match, from the #289 review; conductor lane) and M13-72 (`char list --json` carries every full record under the Character tab, and the colour grep's `page.css` exemption; from the #290 code review, off that branch). ## Proof - `grep -c '^## \[' docs/BACKLOG.md` → 87 headings; the four ticks are the only `[ ]` → `[x]` changes. - Pre-commit hooks green on the commit (merge-conflict check, end-of-file). - Rebased on `main` at 7415e07 (#289); the one conflict (M13-70 and M13-71 both appended after M13-69) was resolved by keeping both. ## Reviewed by `code-reviewer` CLEAN at cec1ea3 (every claim checked against main and the CI history; the one nit, a blank line before M13-72, fixed in the follow-up commit). session: 284d1153-c891-4b84-8e47-150842fac4ba 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ticket
M14-08 — The Character tab: picker, header, gear.
Acceptance — with proof
All proofs are in
lab/core/tests/test_ui_character.py(21 passed).test_the_character_tab_is_the_fourth_and_starts_hiddenpasses.test_the_picker_lists_the_characters_latest_written_firstpasses.char gear --jsonfor the picked one (all 19 slots in slot order; empty slots drawn "empty"; a second pick reads the other character):test_the_gear_rows_match_char_gear_for_the_picked_onepasses. Header:test_the_header_carries_spec_averages_and_the_notespasses.test_the_detail_row_carries_the_raw_link_and_copies_itpasses.char listread once):test_the_tab_runs_only_char_list_and_char_gearpasses.test_hostile_item_text_draws_as_inert_text_constructedpasses.test_the_templates_hold_no_slot_name_and_no_colour_codepasses: no slot name or colour code fromgear_slots.tomlin the templates, no quality word in page.js, no.colour-rule in page.css. The colour rules are generated from the shipped table and read on the gear backing: two tests pass.make cigreen (paste tail): ruff clean, mypy 42 files clean,8579 passed, 208 skipped, serial 66, parser 1746 passed / 24 skipped, hooks 182 x2.luadata.py,guard.pyor another parser changed? No.wowlab ui):wowlab uigains a fourth tab, Character, after Commands.".char listexits 1 the status line shows its stderr and the readable characters are still listed.<style>ends with the generated colour rules, under the CSP hash.gear_slots.toml.Invariants (AGENTS.md)
char listandchar gearconstructed; no live callsJudgment calls
Claims for the reviewers:
.gear-name.colour-<code> { color: #rrggbb; }are appended by the server to the hashed<style>from the shipped table only (newgear.colour_class/gear.colour_rgb).char gear --jsonis byte-identical; no new field.char showones first.runJsongainedpartial; a sharedcopyButton().test_ui_explorer.py::test_the_explorer_runs_only_listed_read_commandsallowed set widened by the two leaves.disabled.Reviews
security-reviewer and code-reviewer: dispatched by the conductor; pending.
session: 284d1153-c891-4b84-8e47-150842fac4ba
🤖 Generated with Claude Code