Skip to content

Commit 26160c0

Browse files
committed
Fix about attribution and teleprompter TPS fidelity
1 parent 5a603c7 commit 26160c0

32 files changed

+1083
-209
lines changed

AGENTS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ Repo-specific design rules:
290290
- Treat every file under `new-design/` as a static design/prototype reference only. Production UI must be implemented as Blazor components in `src/PrompterLive.Shared`; do not ship raw `new-design` HTML as runtime UI.
291291
- Do not re-invent the UI when the answer should be “port the markup and classes from `new-design`”.
292292
- For parity tasks, port the full routed screen from its matching `new-design/*.html` reference, not just isolated high-signal blocks. Settings, Editor, Learn, Teleprompter, and Go Live must match the reference screen in layout and intended interaction while staying Blazor/C# owned.
293+
- About content must stay factual and current: do not invent team members or contributor names; use Managed Code attribution and official company links only.
293294
- Do not introduce a server host for the app runtime.
294295
- Preserve stable `data-testid` selectors on core flows because the Playwright suite depends on them.
295296
- Keep UI routes in shared route constants and keep `data-testid` names in shared UI contract constants.
@@ -320,6 +321,7 @@ Repo-specific design rules:
320321
- Never introduce a non-SOLID design unless the exception is explicitly documented under `exception_policy`.
321322
- Never force-push to `main`.
322323
- Never approve or merge on behalf of a human maintainer.
324+
- When the task explicitly needs delivery, the agent may commit, push to `main` or a feature branch, open a PR, and merge it after the required tests and validation commands pass.
323325

324326
### Boundaries
325327

@@ -352,7 +354,9 @@ Ask first:
352354
- brittle selectors without `data-testid`
353355
- mixed-language root README or public entry docs; keep them English-only unless the user explicitly asks otherwise
354356
- design drift from `new-design`
357+
- made-up About/team content or stale attribution; About must point to real Managed Code ownership and official links
355358
- any visible typing latency in the editor; plain input must feel immediate with no observable delay
359+
- teleprompter controls that fade so much they become hard to see during real reading
356360
- editor keystroke paths that persist, compile, or rebuild shared session state; keep plain typing in memory and move heavier local sync to debounce or autosave
357361
- murky JavaScript or interop layers that keep product UI behavior in JS when Blazor can own it cleanly
358362
- runtime dependencies fetched from random external sources instead of vendored release artifacts
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
# About And Teleprompter Fidelity Plan
2+
3+
## Task Goal
4+
5+
Remove invented hardcoded About content, replace it with factual Managed Code attribution and official links, then bring the teleprompter reading experience in line with `new-design/teleprompter.html` and the TPS specification so playback is visually smooth, timing-aware, and fully covered by automated tests.
6+
7+
## Scope
8+
9+
### In Scope
10+
11+
- Update the Settings About section so it no longer shows invented people and instead shows factual Managed Code ownership plus official links, including GitHub.
12+
- Tighten teleprompter rendering and playback so active reading does not visibly jump while words/cards advance.
13+
- Make teleprompter controls materially more visible during use while staying aligned with the design direction.
14+
- Extend teleprompter rendering to reflect the TPS cues already produced by the compiler, including color, emotion, highlight, pronunciation cues, and speed-sensitive visual spacing.
15+
- Add or update bUnit and Playwright coverage for About and teleprompter fidelity, including at least one end-to-end teleprompter scenario.
16+
- Run build and relevant verification, then format, commit, and push.
17+
18+
### Out Of Scope
19+
20+
- Changing TPS parsing rules in `PrompterLive.Core` unless a concrete renderer gap requires a narrowly scoped compatibility fix.
21+
- Redesigning routes or app shell behavior outside Settings/About and Teleprompter.
22+
- Adding a backend or changing runtime hosting shape.
23+
24+
## Constraints And Risks
25+
26+
- `new-design/teleprompter.html` remains the visual reference; parity work should preserve its structure and interaction tone.
27+
- Browser UI tests are the primary acceptance gate; teleprompter changes are not done until real-browser checks pass.
28+
- The UI suite must run in a single `dotnet test` process and not overlap with other build/test commands.
29+
- `About` must stay factual: no invented team members or stale attribution.
30+
- Teleprompter smoothing must not create delayed input, unreadable word spacing, or layout churn from width-changing state changes.
31+
- Files should stay within maintainability limits; if teleprompter logic needs more space, split it into focused partials/helpers instead of growing a large file further.
32+
33+
## Testing Methodology
34+
35+
- Use bUnit to verify About content contracts and teleprompter rendered markup/state mappings for TPS styling classes and metadata-driven output.
36+
- Use Playwright UI tests to verify real browser playback, focal alignment, control visibility, timing continuity, and a full teleprompter scenario with screenshots under `output/playwright/`.
37+
- Validate both static fidelity and dynamic behavior:
38+
- About shows factual Managed Code attribution and official links.
39+
- Teleprompter words preserve TPS-driven styling and pacing hints.
40+
- Playback advances without vertical jump artifacts on active text.
41+
- Card transitions stay smooth and time/progress continue advancing.
42+
- Controls remain visibly usable against live camera/gradient backgrounds.
43+
- Quality bar:
44+
- No teleprompter regression in relevant bUnit coverage.
45+
- Relevant Playwright teleprompter flows green.
46+
- Repo build green under `-warnaserror`.
47+
48+
## Ordered Plan
49+
50+
- [x] Step 1. Establish baseline context and failures.
51+
- Read the exact About and teleprompter implementation/test files that own this work.
52+
- Run the relevant baseline commands in order:
53+
- `dotnet build /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx -warnaserror`
54+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj`
55+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build`
56+
- Verification before moving on:
57+
- Record every failing test and symptom below.
58+
- Confirm whether teleprompter failures reproduce before code changes.
59+
60+
- [x] Step 2. Replace hardcoded About content with factual Managed Code metadata.
61+
- Update `src/PrompterLive.Shared/Settings/Components/SettingsAboutSection.razor` and its code-behind to remove invented people and add factual company attribution plus official links, including GitHub.
62+
- Keep the section visually aligned with Settings design patterns and preserve existing test ids or add stable new ones if needed.
63+
- Verification before moving on:
64+
- Add/update bUnit assertions in `tests/PrompterLive.App.Tests/Settings/SettingsInteractionTests.cs`.
65+
- Confirm no stale invented names remain via targeted search.
66+
67+
- [x] Step 3. Expand teleprompter word rendering to honor TPS visual cues.
68+
- Update teleprompter reader models/rendering so words expose the cues already emitted by `ScriptCompiler`, including stronger distinctions for emphasis/highlight, pronunciation/tooltips, emotion/color mappings, and speed-sensitive spacing.
69+
- Keep speed-based letter spacing bounded so words never become mush or split into visually disconnected letters.
70+
- Verification before moving on:
71+
- Add/update bUnit tests under `tests/PrompterLive.App.Tests/Teleprompter/`.
72+
- Use TPS-backed sample scripts to prove slow/fast/xslow/xfast, highlight, pronunciation, and emotion styling render as expected.
73+
74+
- [x] Step 4. Remove teleprompter playback jumpiness and align transitions with the design.
75+
- Refine reader alignment/transition logic and any supporting browser interop so active-word tracking and card transitions stay smooth during playback.
76+
- Match the intended movement profile from `new-design/teleprompter.html` while avoiding text jumps during per-word advancement.
77+
- Verification before moving on:
78+
- Add/update Playwright assertions for continuity and alignment.
79+
- Capture a teleprompter scenario screenshot artifact under `output/playwright/`.
80+
81+
- [x] Step 5. Make teleprompter controls visibly usable.
82+
- Update the relevant reader CSS modules so sliders, edge info, and control bar stay visible enough against the background instead of fading into near-invisibility.
83+
- Keep the visual language aligned with the design reference while improving usability.
84+
- Verification before moving on:
85+
- Add/update browser checks that confirm control opacity/visibility at runtime.
86+
87+
- [x] Step 6. Add a full teleprompter browser scenario.
88+
- Add or extend a real Playwright scenario that opens a TPS-backed teleprompter script, starts playback, verifies styling/timing/progress/controls, and saves screenshots.
89+
- Verification before moving on:
90+
- Scenario passes in the browser suite.
91+
- Screenshot artifacts are written under `output/playwright/`.
92+
93+
- [x] Step 7. Run final validation and ship.
94+
- Run the required verification in order:
95+
- `dotnet build /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx -warnaserror`
96+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj`
97+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build`
98+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx`
99+
- `dotnet format /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx`
100+
- If green, commit with a focused message and push the current branch.
101+
- Verification before moving on:
102+
- All planned checklist items are complete.
103+
- Working tree is clean except for intentional artifacts, if any.
104+
105+
## Baseline Failures
106+
107+
- [x] No pre-existing baseline failures in the relevant build, bUnit, or UI suites.
108+
- Build: `dotnet build /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx -warnaserror` passed.
109+
- bUnit: `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj` passed with `94/94`.
110+
- UI: `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build` passed with `75/75`.
111+
- Root-cause note: current repo baseline is green; this task will add targeted regression coverage for the requested About and teleprompter behavior.
112+
- Fix status: no inherited failures to clear before implementation.
113+
114+
## Intended Fix Tracking
115+
116+
- [x] About invented team content removed and replaced with factual Managed Code attribution.
117+
- [x] Teleprompter TPS styling parity expanded beyond the current reduced class mapping.
118+
- [x] Teleprompter playback jumpiness eliminated or reduced to non-visible smooth motion.
119+
- [x] Teleprompter controls made clearly visible during live use.
120+
- [x] Full teleprompter browser scenario added or extended with screenshot artifacts.
121+
122+
## Final Validation Skills
123+
124+
- `dotnet`
125+
- Reason: enforce repo-compatible build, test, and format commands for this Blazor/.NET solution.
126+
- Expected outcome: green build/test/format evidence aligned with `AGENTS.md`.
127+
128+
- `playwright`
129+
- Reason: validate teleprompter behavior in a real browser and capture screenshot artifacts for the changed flow.
130+
- Expected outcome: passing teleprompter scenario coverage with browser-realistic evidence.
131+
132+
## Final Validation Results
133+
134+
- `dotnet build /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx -warnaserror`
135+
- Result: passed after implementation and again after formatting.
136+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj`
137+
- Result: passed with `34/34`.
138+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj`
139+
- Result: passed with `95/95`.
140+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build`
141+
- Result: passed with `76/76`.
142+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx`
143+
- Result: passed for the full solution.
144+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx --collect:"XPlat Code Coverage"`
145+
- Result: passed for the full solution with coverage artifacts emitted for Core, App, and UI suites.
146+
- `dotnet format /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx`
147+
- Result: passed.
148+
149+
## Notes
150+
151+
- `About` now uses only Managed Code and PrompterLive official links and removes invented roster content from both production UI and the design reference.
152+
- Teleprompter playback now pre-centers upcoming content before card activation to avoid visible jump on live reading transitions.
153+
- TPS shorthand inline speed tags like `[180WPM]...[/180WPM]` are now preserved by the compiler so reader timing matches TPS input.
154+
- End-to-end browser evidence includes the teleprompter full-flow screenshots under `output/playwright/teleprompter-product-launch/`.

docs/Features/AppVersioningAndGitHubPages.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ This flow keeps the version number automated:
99
- local builds default to `0.1.0`
1010
- release builds derive `0.1.<run_number>` from the active release workflow run
1111
- the About screen reads the compiled assembly metadata instead of hardcoded copy
12+
- the About screen links only to official Managed Code and `managedcode/PrompterLive` resources; it must never invent a team roster
1213

1314
## Version And Deploy Flow
1415

@@ -44,7 +45,7 @@ flowchart LR
4445
- `PrompterLiveBuildNumber` comes from `GITHUB_RUN_NUMBER` when CI provides it, or falls back to `0` locally.
4546
- `.github/workflows/deploy-github-pages.yml` resolves the release version from `VersionPrefix`, so the release tag and the compiled app version stay aligned.
4647
- `Program.cs` creates `IAppVersionProvider` from the compiled `PrompterLive.App` assembly metadata.
47-
- `SettingsAboutSection` renders that provider value in the About card subtitle.
48+
- `SettingsAboutSection` renders that provider value in the About card subtitle and pairs it with official Managed Code, GitHub, releases, and issues links.
4849

4950
## GitHub Pages Rules
5051

@@ -65,6 +66,7 @@ flowchart LR
6566
- `.github/workflows/pr-validation.yml` runs `dotnet test tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --no-build`
6667
- `.github/workflows/pr-validation.yml` runs `dotnet test tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --no-build`
6768
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --filter "FullyQualifiedName~SettingsInteractionTests.AboutSection_RendersInjectedAppVersionMetadata"`
69+
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj --filter "FullyQualifiedName~SettingsInteractionTests.AboutSection_RendersInjectedAppVersionMetadata_AndOfficialManagedCodeLinks"`
6870
- `dotnet test /Users/ksemenenko/Developer/PrompterLive/tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj --filter "FullyQualifiedName~TeleprompterSettingsFlowTests.TeleprompterAndSettingsScreens_RespondToCoreControls"`
6971
- `.github/workflows/deploy-github-pages.yml` publish step passes `-p:PrompterLiveBuildNumber=${{ github.run_number }}`
7072
- `.github/workflows/deploy-github-pages.yml` publishes both the GitHub Release asset and the GitHub Pages artifact from the same release build output

docs/Features/ReaderRuntime.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ The important contracts are:
1111
- RSVP keeps a five-word context rail on each side, matching `new-design/app.js`.
1212
- Teleprompter camera stays behind the text as one background layer.
1313
- Teleprompter word groups stay short enough to avoid run-on lines.
14+
- Teleprompter preserves TPS word presentation details such as pronunciation guides, inline colors, emotion styling, and speed-derived spacing/timing.
15+
- Teleprompter pre-centers the next card before it slides in, so block transitions do not jump at the focal line.
16+
- Teleprompter controls stay readable at rest; they must not fade until they become unusable.
1417

1518
## Flow
1619

@@ -38,11 +41,17 @@ flowchart LR
3841
- `teleprompter` selects one primary camera device for `#rd-camera`.
3942
- `teleprompter` does not render overlay camera elements such as `#rd-camera-overlay-*`.
4043
- `teleprompter` groups words by pauses, sentence endings, clause endings, and short phrase limits.
44+
- `teleprompter` forwards TPS pronunciation metadata to word-level `title` / `data-pronunciation` attributes.
45+
- `teleprompter` derives word-level pacing from the compiled TPS duration and carries effective WPM into the DOM for testable parity.
46+
- `teleprompter` keeps TPS inline colors visible even when a phrase group is active or the active word is highlighted.
4147

4248
## Verification
4349

4450
- bUnit verifies teleprompter background-camera markup and readable phrase groups.
51+
- bUnit verifies product-launch TPS modifiers survive into teleprompter word markup, timing, and pronunciation metadata.
4552
- Core tests verify TPS scripts generate RSVP phrase groups.
53+
- Core tests verify shorthand inline WPM scopes such as `[180WPM]...[/180WPM]` survive nested tags.
4654
- Playwright verifies ORP centering and the `security-incident` phrase-aware flow in `learn`.
4755
- Playwright verifies there is no teleprompter overlay camera box and that phrase groups do not overflow.
4856
- Playwright verifies the teleprompter camera button attaches and detaches a real synthetic `MediaStream` on the background video layer.
57+
- Playwright verifies the full `Product Launch` teleprompter scenario, including visible controls, TPS formatting parity, screenshot artifacts, and aligned post-transition playback.

0 commit comments

Comments
 (0)