From f755e9f01e9c56bddcc90ea87c473b927bed4484 Mon Sep 17 00:00:00 2001 From: Robin Olsen Date: Wed, 1 Apr 2026 13:28:51 +0200 Subject: [PATCH] Update participant guide and interface instructions for clarity and consistency --- build/PARTICIPANT_README.md | 10 ++++------ cmd/pm/intro.go | 13 ++++++------- cmd/pm/tasks/base.go | 20 +++++++++++++------- cmd/pm/tasks/createIssue.go | 3 ++- pkg/task/questionnaire.go | 2 +- pkg/task/taskui.go | 22 ++++++++++++---------- pkg/tui/components/helpbar.go | 2 +- pkg/web/web.go | 4 ++-- 8 files changed, 41 insertions(+), 35 deletions(-) diff --git a/build/PARTICIPANT_README.md b/build/PARTICIPANT_README.md index fbc1c9b..2516103 100644 --- a/build/PARTICIPANT_README.md +++ b/build/PARTICIPANT_README.md @@ -4,7 +4,7 @@ Welcome! This survey evaluates how people use different project management inter ## Overview -**Duration**: 15-20 minutes +**Duration**: 15-25 minutes **Goal**: Complete 8 task-based exercises using different interfaces and provide feedback on your experience ## Data Collection Notice @@ -14,10 +14,9 @@ We do this to ensure no unwanted actors are interfering with our data collecting - Responses are anonymized before analysis - We collect task results, questionnaire answers, and interaction events during the survey -- We do not intentionally collect personally identifying information +- We do not collect personally identifying information - You may exit at any time by pressing Esc between tasks or closing the terminal - Data is collected continuously, so exiting early still contributes valuable insights -- Contact us if you want your data deleted. ## After Each Task @@ -45,7 +44,6 @@ You'll answer a short questionnaire about: - **Interface not responding**: Press Ctrl+C to exit, then restart the survey - ## Interfaces You'll Use You will complete tasks using different interfaces. Here's what to expect: @@ -71,8 +69,7 @@ You will complete tasks using different interfaces. Here's what to expect: - Mouse-driven interaction only - For task progress press the red button in the upper right corner. - Two views: Issues (list format) and Kanban (sprint tracking) -- Press `esc` or `q` in the terminal to skip the task - +- Press `q` in the server terminal to skip the task ## The Tasks @@ -102,6 +99,7 @@ Create a new issue with specific details: 3. Assign to: **"Me"** 4. Mark as: **"In Progress"** +**Note**: The test is not case sensitive. ### 3. Coding Task diff --git a/cmd/pm/intro.go b/cmd/pm/intro.go index 9353ebb..df92934 100644 --- a/cmd/pm/intro.go +++ b/cmd/pm/intro.go @@ -4,7 +4,7 @@ import ( "strings" "charm.land/bubbles/v2/key" - "charm.land/bubbletea/v2" + tea "charm.land/bubbletea/v2" "charm.land/lipgloss/v2" "github.com/LazyBachelor/LazyPM/internal/models" "github.com/LazyBachelor/LazyPM/internal/style" @@ -15,17 +15,16 @@ const stages = 2 const ( IntroTitle = "Project Management Interface Survey" IntroductionText = `This survey evaluates how people use different project management interfaces to complete common tasks. -You will complete a short set of task-based exercises and answer a few follow-up questions about the experience. -Your feedback helps us compare interface design and usability. +You will complete a short set of task-based exercises and answer a few follow-up questions about the experience. Your feedback helps us compare interface design and usability. -The survey takes around 15-20 minutes to complete.` +The survey takes around 15-25 minutes to complete.` Disclaimer = `Data Collection Notice • Responses are anonymized before analysis +• We do not collect personally identifying information +• You may exit at any time by pressing Ctrl+C between tasks or closing the terminal. • We collect task results, questionnaire answers, and interaction events during the survey -• We do not intentionally collect personally identifying information -• You may exit at any time by pressing Esc between tasks or closing the terminal. • Data is collected continuously during the survey, so exiting early will still contribute valuable insights.` ) @@ -58,7 +57,7 @@ func newIntroModel() introModel { key.WithHelp("b", "back"), ), Quit: key.NewBinding( - key.WithKeys("esc", "ctrl+c", "q"), + key.WithKeys("esc", "ctrl+c"), key.WithHelp("esc", "quit"), ), } diff --git a/cmd/pm/tasks/base.go b/cmd/pm/tasks/base.go index 04e1011..b016e73 100644 --- a/cmd/pm/tasks/base.go +++ b/cmd/pm/tasks/base.go @@ -59,14 +59,19 @@ func BaseDetails(interfaceType InterfaceType) TaskDetails { case InterfaceTypeREPL: interfaceDesc = `About our REPL Interface? -- REPL stands for Read-Eval-Print Loop. It is an interactive programming environment that takes single user inputs (reads), executes them (eval), and returns the result to the user (print), then waits for the next input (loop). +- REPL stands for Read-Eval-Print Loop. + It's an interactive programming environment that takes single user inputs (reads), + executes them (eval), and returns the result to the user (print), + then waits for the next input (loop). -- In a traditional CLI, you would use the help command to see available commands and their descriptions. - In this REPL interface, you can also type 'pm help' to get a list of available commands and their descriptions. +- In a traditional CLI, you would use the help command to see available commands. -- You can also run shell commands directly from the REPL, like "git" or "ls". +- You can type 'pm help' to get a list of available commands and their descriptions. -- When you type commands in this interface, suggestions will appear as you type, which you can select to auto-complete your command. +- You can run shell commands directly from the REPL, like "git" or "ls". + +- When you type commands in this interface, suggestions will appear as you type, + which you can select to auto-complete your command. - Write "exit" to skip task during the survey.` case InterfaceTypeTUI: @@ -87,7 +92,7 @@ func BaseDetails(interfaceType InterfaceType) TaskDetails { interfaceDesc = `About our Web Interface? - A Web Interface is a user interface that is accessed through a web browser. - It allows users to interact with the application using graphical elements such as buttons, forms, and menus. + Users to interact with the application using graphical elements such as buttons and forms. - We designed this interface to only be interactive through mouse clicks. @@ -95,7 +100,8 @@ func BaseDetails(interfaceType InterfaceType) TaskDetails { - Issues: This view shows the available issues in a list format. - Kanban: This view allows you to manage and track the progress of different issues. -- Press esc/q in the terminal to skip the task.` +- Press q in the server terminal to skip the task.` + default: interfaceDesc = "Unknown Interface" } diff --git a/cmd/pm/tasks/createIssue.go b/cmd/pm/tasks/createIssue.go index 9bd2bb9..eda065d 100644 --- a/cmd/pm/tasks/createIssue.go +++ b/cmd/pm/tasks/createIssue.go @@ -16,7 +16,8 @@ Your task: 3. Assign the issue to yourself as "Me" 4. Mark the issue as In Progress when you are done. -Make sure to fill out all the necessary details to help others understand the work item.` +Make sure to fill out all the necessary details to help others understand the work item. +Note: The test is not case sensitive, so you can use "me" instead of "Me".` type CreateIssueTask struct { done bool diff --git a/pkg/task/questionnaire.go b/pkg/task/questionnaire.go index ec0e21b..42977f5 100644 --- a/pkg/task/questionnaire.go +++ b/pkg/task/questionnaire.go @@ -43,7 +43,7 @@ func (q *QuestionnaireModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { q.form.WithWidth(msg.Width) case tea.KeyPressMsg: switch msg.String() { - case "q", "ctrl+c": + case "ctrl+c": q.userQuit = true return q, tea.Quit } diff --git a/pkg/task/taskui.go b/pkg/task/taskui.go index 190c7ce..e131912 100644 --- a/pkg/task/taskui.go +++ b/pkg/task/taskui.go @@ -28,16 +28,16 @@ type TaskHelpKeys struct { var DefaultTaskKeys = TaskHelpKeys{ Quit: key.NewBinding( - key.WithKeys("q", "ctrl+c"), - key.WithHelp("q", "Quit"), + key.WithKeys("ctrl+c"), + key.WithHelp("ctrl+c", "quit"), ), Start: key.NewBinding( key.WithKeys("enter"), - key.WithHelp("enter", "Start"), + key.WithHelp("enter", "start"), ), About: key.NewBinding( key.WithKeys("?"), - key.WithHelp("?", "Learn interface"), + key.WithHelp("?", "interface info"), ), } @@ -129,7 +129,7 @@ func (m TaskModel) View() tea.View { var body string if m.aboutVisible { about := style.TextStyle. - Width(textWidth). + Width(bodyWidth - 2). Align(lipgloss.Left). Render(m.InterfaceDescription) @@ -147,9 +147,9 @@ func (m TaskModel) View() tea.View { card := cardStyle.Render(body) - helpText := "Press " + m.keys.Start.Help().Key + " " + m.keys.Start.Help().Desc + - " • " + m.keys.Quit.Help().Key + " " + m.keys.Quit.Help().Desc + - " • " + m.keys.About.Help().Key + " " + m.keys.About.Help().Desc + helpText := "Press " + m.keys.Start.Help().Key + " to " + m.keys.Start.Help().Desc + + " • " + m.keys.Quit.Help().Key + " to " + m.keys.Quit.Help().Desc + + " • " + m.keys.About.Help().Key + " for " + m.keys.About.Help().Desc view := lipgloss.JoinVertical( lipgloss.Center, @@ -176,11 +176,13 @@ func (m TaskModel) View() tea.View { func (m TaskModel) getQuitHelpText() string { switch m.InterfaceType { case models.InterfaceTypeWeb: - return "Press esc/q in the terminal to skip the task" + return "Press 'q' in the server terminal to skip the task" case models.InterfaceTypeTUI: return "Press 'q' to skip task during the survey" case models.InterfaceTypeCLI, models.InterfaceTypeREPL: - return "Write 'exit' to skip task during the survey" + return `Write 'exit' to skip task during the survey + +Note: Use 'tab' to scroll through suggestions` default: return m.keys.Quit.Help().Key + " to quit" } diff --git a/pkg/tui/components/helpbar.go b/pkg/tui/components/helpbar.go index 730c907..6e77bec 100644 --- a/pkg/tui/components/helpbar.go +++ b/pkg/tui/components/helpbar.go @@ -180,7 +180,7 @@ func helpBarConfig(view ViewKind) HelpBarConfig { {Key: "/", Desc: "search"}, {Key: "a", Desc: "add"}, {Key: "c", Desc: "comment"}, - {Key: "e/d/s/p/t/A/D", Desc: "edit"}, + {Key: "e/d/s/p/t/A/D", Desc: `edit("?" for details)`}, {Key: "x", Desc: "delete"}, {Key: "q", Desc: "quit"}, {Key: "?", Desc: "help"}, diff --git a/pkg/web/web.go b/pkg/web/web.go index 6c2628a..a87042c 100644 --- a/pkg/web/web.go +++ b/pkg/web/web.go @@ -56,7 +56,7 @@ func (m tuiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, nil case tea.KeyPressMsg: switch msg.String() { - case "q", "esc", "ctrl+c": + case "q": select { case <-m.quitChan: default: @@ -71,7 +71,7 @@ func (m tuiModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { func (m tuiModel) View() tea.View { content := lipgloss.Place(m.width, m.height, lipgloss.Center, lipgloss.Center, fmt.Sprintf( - "Web server running at %s\n\nPress q, esc, or Ctrl+C to stop the task and server.\n", + "Web server running at %s\n\nPress q to stop the task and server.\n", m.address, )) v := tea.NewView(content)