Repository navigation
feat(char): wowlab char macros, and the macro placement candidate rule (M14-07) - #292
Merged
Merged
Conversation
…x (M14-07) Every record of the account and character macros-cache.txt with the action slots the candidate numbering gives it (never more than unconfirmed), the keys keymap says reach them, and the macros check findings joined by macro. The owner runbook docs/handoffs/M14-macro-place.md settles the numbering. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Probe from review of m14/07-char-macros: with no usable bindings record, 'no key reaches it' is printed without keymap's note that keys left out of the files may still be bound. Positive control: char binds carries it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wording (M14-07) Carry every keymap note and qualify "no key reaches it" when the keys are incomplete (keymap.KeyMap.keys_incomplete); rename placement.index to candidate_index; credit only the 120 offset to memory and file order to this tool; note on unconfirmed when the bars are incomplete; read nothing from case-variant records the way macros check says it; runbook: times from char macros, the macro cap, optional /dump step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sandgraal
marked this pull request as ready for review
October 19, 2026 10:54
|
Claude encountered an error after 2m 47s —— View job Independent review (code-reviewer): M14-07
|
… 1.4 (M14-07) The section 1 list skipped 4, so CommonMark rendered the /dump step as 4 while three cross-references said 1.5. Review job finding on #292. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
sandgraal
added a commit
that referenced
this pull request
Oct 19, 2026
…2 CharMacrosReport amendment; M13-73, M13-74 (#295) ## What Conductor lane (ADR-0013 amendment, 2026-10-17): `docs/BACKLOG.md`, `docs/LAB_PLAN.md`, and one line of `.github/workflows/claude-review.yml`. - Ticks M14-07 (#292, 4a5b8db) and M13-68 (its deliverable is the record below). - `docs/LAB_PLAN.md` §16.2: a dated amendment with the final `CharMacrosReport` fields as merged (`candidate_index`, `keys_incomplete`, the candidate rule's two [verify] marks, the runbook), as the M14-07 implementer and domain-reviewer confirmed them. - M13-68: the third `lab/` run of the review job recorded (#292 at 54fd434, run 39240814654: 3 min 22 s, `num_turns` 38, result `success`, FINDINGS(1), job `failure` because the action fails a run whose `num_turns` exceeds `--max-turns` even after a successful result; #286 failed the same way at 36). Two of three `lab/` runs overran 30, so per the ticket's rule `--max-turns` goes from 30 to 40 in `.github/workflows/claude-review.yml` (the one change the ticket allows): 40 covers both overruns with margin, the docs-side runs used 10 and 11 turns, and a `lab/` run's wall time of about 3.5 minutes bounds the cost. An earlier draft of the record read the failure wrongly and said the cap stays; the #295 review caught it and the paragraph carries a dated correction. - New tickets: M13-73 (`char binds` with case-variant `WowLab.lua` files and no `--character`; both M14-07 reviewers, off that branch) and M13-74 (`sv merge --expect` pins the merged bytes, not only the target; the M14-03 security review, ruled a follow-up by the conductor because M14-03 named the target hash as the pin and allows one new JSON field). ## Proof - Headings: M14-07 and M13-68 are the only `[ ]` → `[x]` changes; two new tickets after M13-72. - The workflow diff is one line (`--max-turns 30` → `40`); permissions, the env scrub, the allowed tools, the model pin, the diff cap and the skip conditions are untouched (narrow `security-reviewer` pass on the line). - Pre-commit hooks green on every commit; rebased on `main` at 4a5b8db. ## Reviewed by `code-reviewer` FINDINGS(3) at 6c68099 (the run-3 record misread the job failure and claimed a 400 KiB skip; fixed 3fde547) → re-check: record confirmed against the log; title and body updated. `security-reviewer` (narrow, the workflow line) CLEAN at 3fde547: permissions, env scrub, allowed tools, model pin, diff cap and skip conditions untouched; no `timeout-minutes` exists to move. 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-07 —
wowlab char macros, and the macro placement candidate rule. Branchm14/07-char-macros, head f66e528 (first push fe6e068, then review probe d18ecea, fix rounds f00aad4, 54fd434 and f66e528), cut from main 8b9c290.Acceptance — with proof
--jsonon the fixture install, validating →pytest lab/core/tests/test_cli_char_macros.py(test_char_macros_on_the_fixture_install_with_no_record_places_nothing,test_char_macros_json_1_macro_none_2_findings_cross_capture,test_char_macros_text_on_the_fixture_install_cross_capture) → pass. The JSON round-trips throughCharMacrosReport.model_validate_json; the install tree is unchanged after each run (L1).test_unconfirmed_with_one_candidate_slot_and_a_key_constructed→ pass. Character macro 29 gets index 149 and slot 64, the added constructed bind line CTRL-F7 reaches it; macro 20 gets 140 and slot 65; text shows "may sit at slot 64 (unconfirmed)".test_unconfirmed_with_two_candidate_slots_constructed→ pass (slots [64, 65]).test_none_on_no_bar_with_the_checkers_finding_constructed→ pass. Placement is none, and each macro carries the checker's own not-on-action-bar finding.test_findings_are_the_checkers_own_joined_by_macro_constructed→ pass. Findings and per-macro cannot-judge entries, joined across all macros, equalmacros check --jsonexactly.confirmed→test_no_output_carries_confirmed(6 setups: fixture-install, cross-capture, 4 constructed; x 3 character choices; text and JSON; regex(?<![A-Za-z])confirmed) → pass.macros list/macros checkbyte-identical to main → 10 invocations (list and check, text and JSON; account, character, schema-1 character) captured at origin/main 8b9c290 before editing and again after;diff -r before after→ IDENTICAL, exit codes too.docs/handoffs/M14-macro-place.md.make cigreen (implementer's run, exit 0). Tail: 8613 passed, 208 skipped (test); 66 passed, 8824 deselected (parser); 1746 passed, 24 skipped; hooks 182 passed under 3.12 and 182 under 3.9; lint "All checks passed!", "464 files already formatted", mypy "Success: no issues found in 44 source files".luadata.py,guard.pyor another parser changed? No. Graders activated: n/a.wowlab char macros [--character] [--account] [--root] [--flavor] [--json]. It reads only and exits 0 even without a record. For each macro it prints the header line, the body lines, aplacement: <status>: <reason>line, "may sit at slot n (unconfirmed): <bar/page>" lines with the keys that reach each slot, thenfinding <rule> (line n): <checker detail>andcannot judgelines. After that come "Cannot judge for any macro" and the notes.--jsonisCharMacrosReport{flavor_folder, account, character, chosen_by, files[...], bindings_files[CharBindsFile], record_file, record_mtime_ns, record_schema, record_error, keys_incomplete (str | null), macros[{scope, file, position, line, id, name, icon, body_lines, complete, bytes, characters, placement{status, candidate_index, slots[{slot, page_note, unfollowed_page}], keys[keymap.KeyRow], reason}, findings[macrocheck.Finding], cannot_judge[macrocheck.CannotJudge]}], cannot_judge, notes}.keys_incompleteset), the text qualifies "no key reaches it ... among the keys read ()" and prints every keymap note. The no-record wording matchesmacros check.macros listandmacros checkare unchanged (byte-identical, above).charandmacros.docs/GLOSSARY.md(entry "Macro id, macro index"),.github/release-notes.md, new library modulelab/core/src/wowlab_core/macroplace.py,keymap.py(+11 lines, review round 1), and the merged review testlab/core/tests/review/test_m14_07_no_key_claim_without_bindings_record.py._constructedsuffix (test_a_schema_1_record_places_nothing_constructed,test_char_macros_without_character_takes_the_latest_record_cross_capture_constructed); in the proof lines aboveindexnow readscandidate_indexin the JSON.new runtime dependencies: none
Invariants (AGENTS.md)
ACCOUNT_MACROS = 120is a client UI constant, marked candidate + [verify] everywhere in output; ruled acceptable under L6 by the domain-reviewer. No flavor, product, interface or build constant; the library discovers the flavor folder_constructedand limited to boundary and hostile cases; no live callsJudgment calls
Claims for the reviewers to test:
confirmed; the best status isunconfirmed.sub_typeon an action-bar slot.CharBindsReportstyle.Reviews
Reviewed by: domain-reviewer FINDINGS(9) at fe6e068 (file-order attribution, runbook mtimes/cap/example,
candidate_indexrename, stale-cache note; none wrong), all fixed at f00aad4, one runbook polish fixed at 54fd434, CLEAN. code-reviewer FINDINGS(2)+1 at fe6e068 (every keymap note carried, test labels, no-record wording), CLEAN at f00aad4 (758 passed over the char/keymap/review suites,make lintclean). Round 1make ci: 8619 passed; round 2 is docs-only. Review job FINDINGS(1), runbook numbering → fixed f66e528, graded CLEAN by code-reviewer. Head f66e528.session: 284d1153-c891-4b84-8e47-150842fac4ba
🤖 Generated with Claude Code