v0.1 bf7c821

spec.md RawHistoryFolder

Feature Specification: Browser Controls UI

Feature Branch: 002-browser-controls-ui
Created: 2025-09-09
Status: Draft
Input: User description: "Browser Controls UI, I want to add button and keyboard controls to the web browser, for now ctrl + to zoom, Ctrl - to unzoom, back/next mouse buttons, and ctrl shift c to copy url into wlcopy"

Execution Flow (main)

1. Parse user description from Input
   → Feature: Browser navigation and zoom controls with clipboard integration
2. Extract key concepts from description
   → Actors: Browser users
   → Actions: Zoom in/out, navigate back/forward, copy URL
   → Data: Current page URL, zoom level
   → Constraints: Linux clipboard integration (wlcopy)
3. For each unclear aspect:
   → Zoom levels follow Firefox behavior (30%-500%, per-domain persistence)
   → Navigation history edge cases handle empty history silently
4. Fill User Scenarios & Testing section
   → User can zoom and navigate using keyboard and mouse
5. Generate Functional Requirements
   → Each requirement focuses on user capabilities
6. Identify Key Entities
   → Browser state (zoom, history, current URL)
7. Run Review Checklist
   → All requirements clarified and specified
8. Return: SUCCESS (spec ready for planning)

⚡ Quick Guidelines

  • ✅ Focus on WHAT users need and WHY
  • ❌ Avoid HOW to implement (no tech stack, APIs, code structure)
  • 👥 Written for business stakeholders, not developers

User Scenarios & Testing (mandatory)

Primary User Story

A user browsing web content wants to quickly navigate and adjust their viewing experience using familiar keyboard shortcuts and mouse controls. They need to zoom in to read small text, zoom out to see more content, navigate through their browsing history, and easily share the current page URL with others.

Acceptance Scenarios

  1. Given the browser is displaying a webpage, When the user presses Ctrl+Plus, Then the page zooms in and content becomes larger
  2. Given the browser is displaying a webpage, When the user presses Ctrl+Minus, Then the page zooms out and more content becomes visible
  3. Given the user has navigated to previous pages, When the user clicks the back mouse button, Then the browser navigates to the previous page in history
  4. Given the user has navigated back in history, When the user clicks the forward mouse button, Then the browser navigates to the next page in history
  5. Given the browser is displaying a webpage, When the user presses Ctrl+Shift+C, Then the current page URL is copied to the system clipboard via wlcopy

Edge Cases

  • What happens when user tries to zoom beyond 30% or 500% limits? (System ignores further zoom attempts)
  • How does system handle zoom keyboard shortcuts when no page is loaded? (System applies zoom to next loaded page)
  • What happens when back/forward mouse buttons are pressed but no history exists? (System does nothing/ignores silently)
  • How does system handle clipboard copy when wlcopy command is not available? (System tries fallback: xclip → xsel)

Requirements (mandatory)

Functional Requirements

  • FR-001: System MUST respond to Ctrl+Plus keyboard shortcut to zoom in the current webpage
  • FR-002: System MUST respond to Ctrl+Minus keyboard shortcut to zoom out the current webpage
  • FR-003: System MUST respond to back mouse button clicks to navigate to previous page in browsing history
  • FR-004: System MUST respond to forward mouse button clicks to navigate to next page in browsing history
  • FR-005: System MUST respond to Ctrl+Shift+C keyboard shortcut to copy current page URL to system clipboard
  • FR-006: System MUST integrate with wlcopy command for clipboard operations on Linux systems
  • FR-007: System MUST provide visual feedback when zoom level changes
  • FR-008: System MUST implement Firefox-style zoom levels (30%, 50%, 67%, 80%, 90%, 100%, 110%, 120%, 133%, 150%, 170%, 200%, 240%, 300%, 400%, 500%)
  • FR-009: System MUST persist zoom levels per-domain between browser sessions
  • FR-011: System MUST attempt clipboard fallback sequence (wlcopy → xclip → xsel) when primary clipboard tool fails
  • FR-010: System MUST handle cases where navigation history is empty (disable/ignore navigation attempts)
  • FR-012: System MUST update window title dynamically when page title changes (format: "Dumber - [Page Title]")

Key Entities (include if feature involves data)

  • Browser State: Represents current browsing context including zoom level, navigation history, and active URL
  • Navigation History: Collection of previously visited pages enabling back/forward functionality
  • Zoom Level: Current magnification setting for webpage display

Review & Acceptance Checklist

GATE: Automated checks run during main() execution

Content Quality

  • No implementation details (languages, frameworks, APIs)
  • Focused on user value and business needs
  • Written for non-technical stakeholders
  • All mandatory sections completed

Requirement Completeness

  • No [NEEDS CLARIFICATION] markers remain
  • Requirements are testable and unambiguous
  • Success criteria are measurable
  • Scope is clearly bounded
  • Dependencies and assumptions identified

Execution Status

Updated by main() during processing

  • User description parsed
  • Key concepts extracted
  • Ambiguities marked
  • User scenarios defined
  • Requirements generated
  • Entities identified
  • Review checklist passed

Implementation Notes

Frontend Integration Requirements

  • The frontend needs to call UpdatePageTitle when the page loads to trigger the title update. This can be done via JavaScript when the page finishes loading.
  • Window title format: "Dumber - [Page Title]" (e.g., "Dumber - Google", "Dumber - Wikipedia")

source
1# Feature Specification: Browser Controls UI
2
3**Feature Branch**: `002-browser-controls-ui`  
4**Created**: 2025-09-09  
5**Status**: Draft  
6**Input**: User description: "Browser Controls UI, I want to add button and keyboard controls to the web browser, for now ctrl + to zoom, Ctrl - to unzoom, back/next mouse buttons, and ctrl shift c to copy url into wlcopy"
7
8## Execution Flow (main)
9```
101. Parse user description from Input
11   → Feature: Browser navigation and zoom controls with clipboard integration
122. Extract key concepts from description
13   → Actors: Browser users
14   → Actions: Zoom in/out, navigate back/forward, copy URL
15   → Data: Current page URL, zoom level
16   → Constraints: Linux clipboard integration (wlcopy)
173. For each unclear aspect:
18   → Zoom levels follow Firefox behavior (30%-500%, per-domain persistence)
19   → Navigation history edge cases handle empty history silently
204. Fill User Scenarios & Testing section
21   → User can zoom and navigate using keyboard and mouse
225. Generate Functional Requirements
23   → Each requirement focuses on user capabilities
246. Identify Key Entities
25   → Browser state (zoom, history, current URL)
267. Run Review Checklist
27   → All requirements clarified and specified
288. Return: SUCCESS (spec ready for planning)
29```
30
31---
32
33## ⚡ Quick Guidelines
34- ✅ Focus on WHAT users need and WHY
35- ❌ Avoid HOW to implement (no tech stack, APIs, code structure)
36- 👥 Written for business stakeholders, not developers
37
38---
39
40## User Scenarios & Testing *(mandatory)*
41
42### Primary User Story
43A user browsing web content wants to quickly navigate and adjust their viewing experience using familiar keyboard shortcuts and mouse controls. They need to zoom in to read small text, zoom out to see more content, navigate through their browsing history, and easily share the current page URL with others.
44
45### Acceptance Scenarios
461. **Given** the browser is displaying a webpage, **When** the user presses Ctrl+Plus, **Then** the page zooms in and content becomes larger
472. **Given** the browser is displaying a webpage, **When** the user presses Ctrl+Minus, **Then** the page zooms out and more content becomes visible
483. **Given** the user has navigated to previous pages, **When** the user clicks the back mouse button, **Then** the browser navigates to the previous page in history
494. **Given** the user has navigated back in history, **When** the user clicks the forward mouse button, **Then** the browser navigates to the next page in history
505. **Given** the browser is displaying a webpage, **When** the user presses Ctrl+Shift+C, **Then** the current page URL is copied to the system clipboard via wlcopy
51
52### Edge Cases
53- What happens when user tries to zoom beyond 30% or 500% limits? (System ignores further zoom attempts)
54- How does system handle zoom keyboard shortcuts when no page is loaded? (System applies zoom to next loaded page)
55- What happens when back/forward mouse buttons are pressed but no history exists? (System does nothing/ignores silently)
56- How does system handle clipboard copy when wlcopy command is not available? (System tries fallback: xclip → xsel)
57
58## Requirements *(mandatory)*
59
60### Functional Requirements
61- **FR-001**: System MUST respond to Ctrl+Plus keyboard shortcut to zoom in the current webpage
62- **FR-002**: System MUST respond to Ctrl+Minus keyboard shortcut to zoom out the current webpage  
63- **FR-003**: System MUST respond to back mouse button clicks to navigate to previous page in browsing history
64- **FR-004**: System MUST respond to forward mouse button clicks to navigate to next page in browsing history
65- **FR-005**: System MUST respond to Ctrl+Shift+C keyboard shortcut to copy current page URL to system clipboard
66- **FR-006**: System MUST integrate with wlcopy command for clipboard operations on Linux systems
67- **FR-007**: System MUST provide visual feedback when zoom level changes
68- **FR-008**: System MUST implement Firefox-style zoom levels (30%, 50%, 67%, 80%, 90%, 100%, 110%, 120%, 133%, 150%, 170%, 200%, 240%, 300%, 400%, 500%)
69- **FR-009**: System MUST persist zoom levels per-domain between browser sessions
70- **FR-011**: System MUST attempt clipboard fallback sequence (wlcopy → xclip → xsel) when primary clipboard tool fails
71- **FR-010**: System MUST handle cases where navigation history is empty (disable/ignore navigation attempts)
72- **FR-012**: System MUST update window title dynamically when page title changes (format: "Dumber - [Page Title]")
73
74### Key Entities *(include if feature involves data)*
75- **Browser State**: Represents current browsing context including zoom level, navigation history, and active URL
76- **Navigation History**: Collection of previously visited pages enabling back/forward functionality
77- **Zoom Level**: Current magnification setting for webpage display
78
79---
80
81## Review & Acceptance Checklist
82*GATE: Automated checks run during main() execution*
83
84### Content Quality
85- [x] No implementation details (languages, frameworks, APIs)
86- [x] Focused on user value and business needs
87- [x] Written for non-technical stakeholders
88- [x] All mandatory sections completed
89
90### Requirement Completeness
91- [x] No [NEEDS CLARIFICATION] markers remain
92- [x] Requirements are testable and unambiguous  
93- [x] Success criteria are measurable
94- [x] Scope is clearly bounded
95- [x] Dependencies and assumptions identified
96
97---
98
99## Execution Status
100*Updated by main() during processing*
101
102- [x] User description parsed
103- [x] Key concepts extracted
104- [x] Ambiguities marked
105- [x] User scenarios defined
106- [x] Requirements generated
107- [x] Entities identified
108- [x] Review checklist passed
109
110---
111
112## Implementation Notes
113
114### Frontend Integration Requirements
115- The frontend needs to call `UpdatePageTitle` when the page loads to trigger the title update. This can be done via JavaScript when the page finishes loading.
116- Window title format: "Dumber - [Page Title]" (e.g., "Dumber - Google", "Dumber - Wikipedia")
117
118---

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close