docs: split task 15 into 15a-15e after two failed attempts
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Task 15b — Copy-prompt buttons and reading progress
|
||||
|
||||
**Agent**: `component-builder` · **Model**: MiniMax-M3 **Depends on**: 05 ·
|
||||
**Parallel with**: 15a, 15c · **Blocks**: 15d **Worktree**:
|
||||
`.agents/scripts/worktree.sh start 15b copy-prompt`
|
||||
|
||||
## Scope
|
||||
|
||||
Two small pieces of `app.js`, as islands. No page migration.
|
||||
|
||||
### 1. `copyPrompt`
|
||||
|
||||
Reads `#${button.dataset.copyTarget}`'s `textContent` and copies it.
|
||||
|
||||
- Keeps `navigator.clipboard.writeText` **and** the `document.execCommand`
|
||||
textarea fallback. The fallback exists because the site is served over plain
|
||||
HTTP in workshop settings, where `navigator.clipboard` is undefined. Deleting
|
||||
it silently breaks the lab for attendees. Keep both paths.
|
||||
- Writes a bilingual result string into `#copy-status`.
|
||||
- On success, swaps the button's `<span>` to COPIED / COPIADO and back after
|
||||
1800 ms.
|
||||
|
||||
Targets asserted by `verify.mjs`:
|
||||
`data-copy-target="prompt-install-skills|prompt-basic|prompt-skills"`.
|
||||
|
||||
The prompt bodies are copy-pasted by attendees straight into an agent. **Exact
|
||||
whitespace and line breaks matter** — verify what lands on the clipboard is
|
||||
byte-identical to today's, not merely visually similar.
|
||||
|
||||
### 2. Reading progress
|
||||
|
||||
The `scroll` listener that sets `.reading-progress span`'s width. It is
|
||||
`{ passive: true }` today; keep it passive.
|
||||
|
||||
## Language
|
||||
|
||||
Both pieces read `currentLanguage`. Task 15c owns how language is held. Do not
|
||||
invent a second mechanism — take the language as a prop or read the document's
|
||||
`lang`, and say in your report which you chose so 15c and 15d can align.
|
||||
|
||||
## Do not
|
||||
|
||||
- Create `src/pages/full-guide.astro`. That is 15d.
|
||||
- Touch `verify.mjs`, `tokens.css`, `src/content/config.ts`.
|
||||
- Reformat `app.js`.
|
||||
- Substitute a near-miss token; mark gaps with
|
||||
`/* token-gap: <reason>; owner design-system-keeper */`.
|
||||
|
||||
## Done when
|
||||
|
||||
- [ ] Both clipboard paths present and the fallback actually exercised
|
||||
- [ ] `#copy-status` bilingual, and announced (it is a live region)
|
||||
- [ ] Clipboard payload byte-identical to today's for all three targets
|
||||
- [ ] `pnpm run gate` green — the full gate
|
||||
- [ ] 42 assertions intact
|
||||
Reference in New Issue
Block a user