Skip to content

docs: add a Research section with participant instructions - #181

Merged
ErikBjare merged 3 commits into
masterfrom
docs/research-section
Sep 17, 2026
Merged

ErikBjare merged 3 commits into
masterfrom
docs/research-section

Conversation

@ErikBjare

Copy link
Copy Markdown
Member

ActivityWatch is used as a data-collection instrument in academic studies. Until now the participant-facing instructions have been written per-study and circulated over email, which means they go stale between releases: the current round of review caught a study's instructions still describing pre-b5 autostart behaviour, pointing participants at the per-bucket export menu instead of "Export all buckets as JSON", and assuming an English-only UI.

This adds a canonical, versioned page that studies can link to instead of maintaining their own copy of the mechanics.

What's here

research/index — why the tool fits research use (local-first, auditable, category-only collection), the canonical validity citation for why self-reported computer use is a poor measure (IJmker et al. 2008: self-report agreed with registration for only 18% of participants), and how to cite ActivityWatch via the Zenodo DOI.

research/participant-instructions — install and permissions per platform, what is and isn't recorded, and the end-of-study export. Plus a "Notes for researchers" section covering the things that reliably generate support mail:

  • two buckets (window + AFK) is correct, not a double install
  • use Export all buckets as JSON, not the per-row three-dot menu, which exports a single bucket
  • JSON rather than CSV
  • the web UI auto-selects a locale from the browser language, so participant instructions should give button names in both languages
  • the exported filename is fixed and can't carry a participant number

Studies keep their own branding, upload location, ethics wording and translations. Only the mechanics live here, since those are what change between releases.

Notes

  • Builds clean; neither new page emits a warning.
  • Content verified against the v0.14.0b5-research build and the source at that tag.

ActivityWatch is used as a data-collection instrument in academic studies, but
the participant-facing instructions have been circulated over email and go stale
between releases. This adds a canonical, versioned page studies can link to.

- research/index: why the tool suits research (local-first, auditable,
  category-only collection), the IJmker 2008 validity citation, and how to cite
  ActivityWatch via the Zenodo DOI
- research/participant-instructions: install and permissions per platform, what
  is recorded, and the end-of-study export, plus a "Notes for researchers"
  section covering the mistakes that generate support mail (the per-row export
  menu instead of "Export all buckets as JSON", CSV vs JSON, two buckets being
  normal, and the UI auto-selecting a locale from the browser language)

Studies keep their own branding, upload location and translations; only the
mechanics live here.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 16, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-17T09:42:31.090140Z be65c9a New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

The PR appears safe to merge after considering a non-blocking correction to the bucket-count troubleshooting guidance.

Findings

  1. P2 Bucket count misidentifies dashboards

Summary

This PR adds a dedicated Research section and canonical participant instructions for installing the Research Edition, understanding its collection behavior, and exporting study data.

  • Adds the Research section to the main documentation navigation.
  • Documents ActivityWatch’s research rationale and citation information.
  • Provides participant-facing Windows and macOS setup and export guidance.
  • Adds researcher notes about bucket exports, localization, filenames, and live-versus-exported data.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    P[Participant] --> I[Install Research Edition]
    I --> W[Window and AFK watchers]
    W --> S[Local server on port 5667]
    S --> UI[Research Edition dashboard]
    UI --> E[Export all buckets as JSON]
    E --> F[aw-bucket-export.json]
    F --> U[Study-provided upload location]
Loading

Reviews (1) · Last reviewed commit: "docs: add a Research section with partic..."

Comment on lines +99 to +101
- **Two buckets is correct**, not a symptom of a double installation: one window watcher and
one AFK watcher. Four rows would mean the participant opened the standard dashboard on port
5600 instead.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Bucket count misidentifies dashboards

Port 5600 serves the standard installation’s separate bucket set; it does not add two rows to the Research Edition’s data. Optional watchers can also create four or more legitimate rows on either server. This fixed row-count test could therefore misidentify a valid Research Edition session or fail to recognize the standard dashboard. Diagnose the edition using the port and Research Edition badge instead.

Suggested change
- **Two buckets is correct**, not a symptom of a double installation: one window watcher and
one AFK watcher. Four rows would mean the participant opened the standard dashboard on port
5600 instead.
- **Two buckets is correct** for the default Research Edition setup: one window watcher and
one AFK watcher. Additional watchers may create more rows, so use the **Research Edition**
badge and port 5667—not the row count—to distinguish it from the standard dashboard.

Knowledge Base Used:

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in be65c9a — you, Codex and Bob all landed on this independently, and the suggestion was right.

Adopted with one addition: the row count is not just unreliable, it is not a discriminator at all. A standard install also shows exactly two buckets (window + AFK), so "two rows" is the expected default on either edition rather than a Research Edition signal. The page now says to diagnose by the Research Edition badge and port 5667, and notes that buckets are created per watcher and per host (linking the data model), so extra watchers or a hostname change can add rows on either server.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0254b612c9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +99 to +101
- **Two buckets is correct**, not a symptom of a double installation: one window watcher and
one AFK watcher. Four rows would mean the participant opened the standard dashboard on port
5600 instead.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid identifying the dashboard by bucket count

Opening port 5600 queries only the standard server; it does not merge the buckets served on port 5667. Bucket count is also not fixed: the documented data model creates one bucket per watcher and host (src/buckets-and-events.rst:7-13), so a hostname change or an additional watcher can produce four rows, while a standard installation may show only the two core buckets. This guidance can therefore misdiagnose the correct Research dashboard; use the port or Research Edition badge as the discriminator instead.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in be65c9a. Your reading of the data model was the decisive part: src/buckets-and-events.rst documents one bucket per watcher and host, so a hostname change alone can produce four rows on a perfectly correct Research Edition install. That is now stated on the page, with a :doc: link to the data model.

The separate-servers point is also now explicit — opening 5600 queries the standard server and does not merge anything into the 5667 view — and the discriminator is the Research Edition badge plus the port.

@TimeToBuildBob

Copy link
Copy Markdown
Contributor

Reviewed the Research section, with attention on "Notes for researchers" (that list came out of the Lund instruction reviews).

The notes are the right support-mail generators: Export-all vs per-row, JSON vs CSV, locale auto-select, fixed filename, live Raw Data unsanitised. Put the unsanitised-live-Raw-Data warning first. Researchers on a support call will open the dashboard, see real titles, and think the ethics filter is broken. The rewrite to research-participant happens only on export; that is the one that will generate a panicky email if it is buried.

One correction, same line Greptile/Codex flagged:

Four rows would mean the participant opened the standard dashboard on port 5600 instead.

That is wrong, and extra-watchers is the smaller reason. The standard dashboard on 5600 also has two buckets (window + AFK). Opening 5600 does not add two rows to the 5667 view — they are different servers. Row count does not distinguish editions at all. Diagnose by the Research Edition badge and port 5667. Two rows is the expected default for a participant; it is not a discriminator. Four rows is a different failure mode (hostname change, extra watcher, or they exported the wrong server and something else is also installed).

Suggested replacement:

  • Two buckets is the default, not a double install: one window watcher and one AFK watcher. Do not use row count to tell Research Edition from a standard install — the standard dashboard also has two buckets. Diagnose by the Research Edition badge and port 5667. Extra watchers or a hostname change can add rows on either server.

Otherwise this is the page studies should link to instead of emailing a copy. I would not block on Android: research/index mentions Android but the participant page is desktop-only, which matches the current Research Edition. The VR Android pilot (direct APK, ~40 people, deadline 2026-09-29) will need its own page before anyone sideloads; that is a follow-up, not this PR.

Windows unsigned / SmartScreen is documented. Keep it. That friction repeats on every study until the installer is signed.

ActivityWatch appears in methods sections rather than titles or abstracts, so it
is largely invisible to citation indexes - both Zenodo DOIs currently report zero
tracked citations despite real academic use, including a 2,000-participant Oxford
study and a multi-year ERC-funded deployment at Ghent.

A public list serves two purposes: it lets researchers choosing an instrument see
prior use, and it gives existing users a reason to tell us they exist.
@TimeToBuildBob

Copy link
Copy Markdown
Contributor

The studies list is the right addition — methods-section uses are invisible to indexes, and this is how they become visible.

One correction on 847f81a: Activity Frames (Iyamu, arXiv:2608.05784) does not use ActivityWatch as an instrument. It cites AW once as related work ("ActivityWatch is content-blind") and runs its own capture engine (aframes record). Listing it here overstates use. Drop it, or move it to a citing/related note if you want the citation.

The rest checks out: Ballou et al. Stage 1 RR is real; Parry & Klingelhoefer name AW as an exemplar desktop logger; Rivera/Booz/Hammerstein (CMU SEI, ECCWS 2025) actually instrument with AW.

The two notes-for-researchers edits from the previous comment are still outstanding on participant-instructions.rst (unsanitised live Raw Data first; row count is not an edition discriminator).

Optional miss, not blocking: Timár (Masaryk, 2025) is a thesis that actually builds on AW.

…s, and study classification

- Notes for researchers now lead with where filtering actually happens:
  transform_window runs before client.heartbeat, so titles/URLs are filtered
  at capture, not export. The research-participant rewrite is the hostname,
  which is export-only. Adds the fail-closed export refusal (pre-existing
  database) as the failure mode that actually generates mid-study support mail.
- Row count is not an edition discriminator: a standard install also shows two
  buckets, and the two editions are separate servers. Diagnose by the Research
  Edition badge and port 5667. Buckets are per watcher and per host.
- Split the studies list by actual relationship. Activity Frames (Iyamu 2026)
  cites ActivityWatch once as related work and runs its own capture pipeline;
  it is not an instrument use. Traces as Data and the student theses likewise
  move out of the instrument list.
@ErikBjare

Copy link
Copy Markdown
Member Author

All addressed in be65c9a. Two of your three points landed; the sanitisation one is inverted, and it matters.

Activity Frames — you were right, and I checked the source. Its only mention is in related work:

"Deployed capture leaves the same gap: ActivityWatch is content-blind [6], Recall exposes snapshots to the user but no agent API [7]"

and it provisions its own capture via aframes record. Citing, not instrumenting.

Rather than just drop it, I fixed the thing that let it in. The heading "Studies using ActivityWatch" was flattening three different relationships into one claim, so the list is now split: Used as a data-collection instrument (Oxford, On/Off, Sabermetrics), Discussed, compared or built upon (Traces as Data, Activity Frames, the student theses), and Unpublished or unlisted deployments. Traces as Data names AW as an exemplar and the theses build on it — neither is instrument use either, so the same correction applies to them. Worth noting my own source notes already drew this distinction correctly; it was lost in compressing them into the page, which is the failure mode to watch rather than the single entry.

The sanitisation note is backwards, so I did not write it as suggested. From aw-watcher-window/aw_watcher_window/main.py, transform_window (:183) runs before client.heartbeat (:194), and research_filter.py states URLs are "stripped from the output before the event is recorded". export_sanitize.rs says the same from the other side: "Research filtering only applies to newly captured events."

So filtering happens at capture. Live Raw Data already shows categories, not real titles — a researcher on a support call will not see raw titles on a clean Research Edition profile. research-participant is the hostname rewrite, and that one is export-only.

Your conclusion still holds for a different reason, so it is now the first bullet: the export fails closed. If the Research Edition was installed over an existing ActivityWatch database, the old unfiltered events are still there and the export refuses rather than shipping them. That is the panicky end-of-study email, and it arrives when there is no time left to re-collect. The page now tells researchers to require a clean profile up front.

Bucket count — fixed, and stronger than flagged: row count is not a weak discriminator, it is not one at all, since a standard install also shows two buckets. Badge and port 5667 instead, with the per-watcher-and-host data model linked.

Timár — left out, deliberately. The Masaryk IS PDF sits behind a meta-refresh wall and the landing page returns nothing, so I could not confirm the ActivityWatch relationship or which of the three categories it belongs in. Adding it unverified is precisely what produced the Activity Frames entry. If you can reach the full text and classify it, I will add it.

Android follow-up agreed — out of scope here, tracked separately for the VR pilot.

Builds clean; the one warning is the pre-existing theme deprecation on master.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: be65c9a61f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +74 to +75
Do this once, at the end of the study period, and keep the Research Edition running while you
do it. It takes a couple of minutes.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Validate export before beginning data collection

For participants whose machine contains a prior ActivityWatch database, the later note explicitly says the Research Edition will refuse to export, yet this workflow instructs them to try exporting only once at the end of the study. That delays discovery until there is no time to recollect the experiment data—particularly problematic because lines 17–18 also describe installation alongside normal ActivityWatch as safe. Add an export preflight during setup or prevent enrollment until a clean profile has been confirmed.

Useful? React with 👍 / 👎.

@ErikBjare
ErikBjare merged commit 9daf721 into master Sep 17, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants