feat(migrate): use numeric labels for clarify options (a11y for non-Latin keyboards) - #255
Conversation
|
Nice catch on the accessibility gap — letters are a real barrier on non-Latin keyboard layouts, and the mechanical renumbering is careful. I checked every letter/number cross-reference in Two things to fix before merge: 1. Two questions with >8 options are only half-converted (see inline comments). The renumbering logic seems to have stopped at H→8 and left I/J/K/L/... as letters, so those two questions (repeated in both 2. This PR only touches Also flagging: this branch is quite stale relative to |
9223907 to
1cf0e77
Compare
|
Thanks for the careful review — all three items addressed in the new revision (force-pushed): 1. Full alphabet extended. The renumbering now runs 2. Applied to the advisor mirror. Same fix now landed in 3. Real rebase on Also worth flagging — a couple of edge cases the mechanical pass missed and I fixed manually so the whole file stays consistent:
Local checks re-run on the new revision:
Let me know if anything else needs to change. |
|
Re-reviewed the update — both issues from my last pass are resolved:
Side note, not a bug: the inline pipe-separated option lists now render as Re-swept all 14 changed files for leftover letter options; none found. LGTM. |
Replace A/B/C/D... option labels with 1/2/3/4... in the Clarify phase
so answers work for users on non-Latin keyboards (Arabic, Chinese,
Cyrillic, Greek, Hebrew, Japanese, Thai, etc.). Numbers are on every
keyboard layout; Latin letters are not.
- **Full alphabet extended to Z**: Q19 (source model, `clarify-ai.md` +
`clarify-ai-only.md`) has 19 options; Q17 (special features) has 10.
Prior revision stopped at H→8, leaving I–S as letters — the exact
friction this PR set out to remove. Now converts A→1 through Z→26.
- **Applied to both plugin trees**: `advisor/plugins/aws-startup-advisor/
skills/{gcp-to-aws,heroku-to-aws}/references/phases/clarify/*.md` are
byte-identical mirrors kept in sync by `drift:check`, so the same fix
now lands in both. `drift:check` passes locally.
- **Rebased on `main` (2026-08-28)**, not just conflict-resolved. All
recent additions to the affected files (Q7 auto-resolve, Q18
auto-resolve, Q23 LiteLLM/OpenRouter defaults, Step 0 compatibility
check, App Engine Q7b) are picked up and their letters renumbered.
Every reference within each file renames together so option labels and
every reference to them stay in sync:
- User-facing option labels (`> A) foo` → `> 1. foo`)
- Interpret rules (`- A → value` / `A -> value` → `- 1 → value` /
`1 -> value`)
- Defaults (`**Default:** A →`, `Default: A —`, `Default to **A**`,
`Default **A**`)
- Prose references (`If A:`, `Option B`, `user selects B`, `recommend A`,
`same as default (B)`, `maps to A`, `otherwise B →`, `same as A`)
- Cross-question references (`Q1 = A or B`, `Q5 != A`, `Q14 = D + F`,
`Q1 includes D/E/F`, `Q14 = B only`)
- Combination-pattern tables (`| B + any other |`,
`| B (harness) + A (no memory) |`)
- Defaults / assumption-sheet tables
Rows like `> A) foo | B) bar | C) baz` become `> 1\) foo | 2\) bar |
3\) baz` with backslash-escaped parens. Necessary because dprint would
otherwise canonicalize the leading `1)` to `1.` and leave the mid-line
`2)` `3)` untouched, breaking the row's visual consistency. The
escapes render as `1)` `2)` `3)` in the final markdown.
Same A–H letters, unchanged:
- Category names (`Category A`, `Category F`, `Cat B`)
- Letter ranges (`(A–F)`, `(A-F)`)
- Non-option letters (`A/B test`, `Series B`, `Pre-Series B`,
`C extensions`, `C/C++`, `Rust/C/C++`, `N/A`, `Y/N`, `I/O`)
- The Category-flow table in `clarify.md` (`| A (always) |`, `| B or C |`)
- `dprint check`: 0 errors
- `markdownlint-cli2`: 0 errors (860 files)
- `frontmatter-validator` on migrate + advisor × {heroku-to-aws,
agent-advisor, gcp-to-aws}: 6/6 OK
- `frontmatter-validator.test.ts`: 62/62 pass
- `drift:check`: OK (260 identical files, 25 allowlisted, 6 skill trees)
1cf0e77 to
c02a78c
Compare
leon1418
left a comment
There was a problem hiding this comment.
[🤖 AI review 🤖]
Finished reviewing PR #255 rev c02a78c with 2 comments.
Excellent accessibility improvement — renumbering option labels from Latin letters to numbers benefits every user on a non-Latin keyboard layout, and there are a lot of them. The A→1, B→2, … H→8 substitution is mechanically correct across all 14 files, cross-plugin parity is perfect (all 7 advisor↔migrate pairs are byte-identical), and structural taxonomy references (Category A–H, Cat B, A/B test, Series B, C extensions) are correctly preserved.
Two stray letter references survived the transformation:
clarify-global.mdQ2 defaulted semantics — "answer 8" was updated but "chosen_by: \"user\"for H" on the same line still says H instead of 8. (Nit — see inline)clarify-compute.mdQ7b default line — the bold**Default:** **A** (compute_model: \"managed_platform\")was not converted. The interpret block above was correctly changed (4 -> same as default (1)), but the prose default line still says A. (Nit — see inline)
Neither is functionally critical — the LLM interprets the surrounding numeric context fine, and the interpret rules are correct. Fixing them is a consistency polish.
Validation evidence:
- Cross-plugin parity: all 7 file pairs verified byte-identical after normalizing path prefixes ✅
- Stray letter scan: grep for option-context letter references in added lines found only the 2 Nits above ✅
- Structural refs preserved: Category headings, Cat B, A/B test, Series B, C extensions all intact ✅
- PR description test plan: dprint, markdownlint, frontmatter-validator, 62/62 tests all reported passing by author (not verified by reviewer)
CI: 0 check runs reported. Merge status: MERGEABLE. Approvals: REVIEW_REQUIRED (0 approvals). Not approved.
|
[🤖 AI review 🤖] Nit #2 (not in diff — unchanged line): In
This should be 1 to match the renumbering. The interpret block directly above was correctly changed ( Both Nits also need to be mirrored to the |
Two references outside the option lists still used letters after the A→N pass. Update both the advisor and migrate copies: - clarify-compute.md Q7b: `**Default:** **A**` → `**1**` - clarify-global.md Q2: `chosen_by: "user" for H` → `for 8` Interpret blocks and option rows were already numeric; these bold prose lines were outside the diff hunks the renumbering script targeted, so they were missed. Flagged in PR awslabs#255 review.
|
Thanks — both nits fixed in a44d3e3.
Mirrored the same edits to the |
…n merge Convert the remaining A/B/C letter references to numeric (1/2/3/4) in the Q8 Autopilot context and Context-for-user prose, and the Q5 interpret block, matching upstream's numeric-label convention (awslabs#255). Also aligns the advisor mirror with migrate (list markers and a stale (A) reference). Mirrored byte-identical across migrate/ and advisor/ plugins.
Problem
The Clarify phase presents its answer options with Latin letter labels (
> A) foo,> B) bar, up toH)in some questions). Users who type on keyboards without the Latin alphabet — Arabic, Chinese, Cyrillic, Greek, Hebrew, Japanese, Thai, and others — cannot easily produce those letters at the prompt. Numbers are on every keyboard layout.The Clarify phase is the very first user-facing interaction in every migration flow (
gcp-to-aws,heroku-to-aws,ai-only). A friction point here can quietly filter out non-English builders from ever completing a migration plan. It's a small accessibility fix that widens the plugin's reachable audience for zero functional cost.Fix
Renumber every letter-labeled answer option — and every internal reference to those labels — from
A/B/C/D/…to1/2/3/4/…across the 7 Clarify markdown files:skills/heroku-to-aws/references/phases/clarify/clarify-interview.md(DSL reference implementation)skills/gcp-to-aws/references/phases/clarify/clarify.mdskills/gcp-to-aws/references/phases/clarify/clarify-global.mdskills/gcp-to-aws/references/phases/clarify/clarify-compute.mdskills/gcp-to-aws/references/phases/clarify/clarify-database.mdskills/gcp-to-aws/references/phases/clarify/clarify-ai.mdskills/gcp-to-aws/references/phases/clarify/clarify-ai-only.mdEvery reference within each file renames together so option labels and every reference to them stay in sync:
> A) foo→> 1. foo(multi-line) or> 1\) foo | 2\) bar(inline, see note below)- A → value/A -> value→- 1 → value/1 -> value**Default:** A →,Default: A —,Default to **A**all rename consistentlyIf A:,Option B,user selects B,recommend A,same as default (B),maps to A,otherwise B →Q1 = A or B→Q1 = 1 or 2,Q5 != A→Q5 != 1,Q14 = D + F→Q14 = 4 + 6| B + any other |→| 2 + any other |,| B (harness) + A (no memory) |→| 2 (harness) + 1 (no memory) |Inline multi-option rows (
> A) foo | B) bar | C) baz) become> 1\) foo | 2\) bar | 3\) bazwith backslash-escaped parens. Necessary because dprint would otherwise canonicalize the leading1)to1.and leave the mid-line2)3)untouched, breaking the row's visual consistency. The escapes render as1)2)3)in the final markdown.Structural taxonomy references keep the same A–H letters:
Category A,Category F,Cat B)(A–F),(A-F))A/B test,Series B,Pre-Series B,C extensions,C/C++,Rust/C/C++,N/A)clarify.md(| A (always) |,| B or C |)Verification
Docs-only change. No code, no schema, no runtime behavior. The LLM interprets letter- or number-labeled options equally well; the payoff is on the human side.
The renumbering is a straight
A→1,B→2, …,H→8within each question. Within any given question, letters were assigned sequentially, so a numeric relabel preserves ordering and mapping semantics.Every touched file was scanned after transformation to confirm no stray letter reference remained inside the option-answer contexts, while every structural taxonomy reference (
Category X,Cat X,A/B test,Series B, ranges) is still present.Rebased on latest
main(2026-08-28). Conflicts with recently-added Q7 auto-resolve block (clarify-ai-only.md), Q18 auto-resolve (clarify-ai.md), Q23 LiteLLM/OpenRouter defaults (clarify-ai.md), Step 0 compatibility check (clarify.md), and the new App Engine Q7b question (clarify-compute.md) all resolved by keeping the new content and renumbering the letters it added.Test plan
dprint checkon all 7 changed files — 0 errorsmarkdownlint-cli2on all 7 changed files (repo-wide run over 860 files) — 0 errorsfrontmatter-validatoronheroku-to-aws(7 phase files),agent-advisor(11),gcp-to-aws(0, prose skill) — all OKnode --test migrate/plugins/migration-to-aws/tests/tools/frontmatter-validator.test.ts— 62/62 pass, 0 failclarify-interview.md): every option label, Interpret bullet, Default line, and Defaults-summary row uses numbers; no stray A/B/C reference remainsclarify-ai.md): combination tables and cross-question references use numbers consistently;Category F/G/Hheadings unchangedCategory [A-H]headings,Cat Brows,(A–F)ranges,A/B test,Series B,C extensionsstill present in the diff-unchanged regionsNot run locally (needs full
mise install):mise run security(bandit, semgrep, gitleaks, checkov, grype) — docs-only change, no code touchedmise run shared:check— noskills/shared/files touched, so vendored copies unaffectedBoth should pass in CI.