Skip to content

chore(deps): remove the activitywatch overrides (peewee 3 pin + aw-qt wrapper args) once nixpkgs' activitywatch builds stock #4005

Open

Description

@dezren39

Context

Found via #2715 (the 2026-10-30 nixpkgs update). The update moves the nixpkgs-25 input from e7439b6b to 31ecbaca. nixos/environment/default.nix takes activitywatch from that input's raw legacyPackages segment. On the new pin, python3.14-aw-core-0.5.17 fails its pythonRuntimeDepsCheck:

Checking runtime dependencies for aw_core-0.5.17-py3-none-any.whl
  - peewee==3.* not satisfied by version 4.4.0

aw-core 0.5.17's wheel metadata pins peewee==3.*, but the tree now ships peewee 4.4.0. The identical aw-core derivation (and peewee 4.4.0) appears on the new master and unstable pins too, so no current pin offers a consistent set to source activitywatch from; the failure cascades aw-core -> aw-qt/aw-client -> activitywatch -> man-paths -> system-path and blocks the amd toplevel.

The temporary fix

nixos/environment/default.nix extends the nixpkgs-25 legacyPackages set (nixpkgs-25-fixed, next to nixpkgs-master-fixed) with a python3 packageOverride that adds pythonRelaxDeps = [ "peewee" ] to aw-core, and the activitywatch segment uses the extended set. This rewrites the stale metadata pin so the runtime-deps check accepts peewee 4.4.0. Caveat: it does not prove aw-core's peewee API usage is 4.x-compatible at runtime — it is the standard nixpkgs remedy for this skew class, and activitywatch is a local user application, not a system service.

Removal condition

Remove once stock activitywatch builds on the pin the segment consumes — i.e. upstream nixpkgs bumps aw-core for peewee 4 (or pins peewee 3 for the aw-* packages), so python3Packages.aw-core passes pythonRuntimeDepsCheck unmodified.

Removal test

Point the activitywatch segment back at inputs.nixpkgs-25.legacyPackages.${system} (deleting the nixpkgs-25-fixed binding) and build activitywatch plus config.system.build.toplevel for amd; both must succeed, and aw-core should still launch (aw-server --help or the activitywatch binaries present in the system profile).

Acceptance criteria

  • A current nixpkgs pin (25 / master / unstable, whichever first) ships an aw-core whose peewee requirement is consistent with the tree's peewee version — verified by evaluating the activitywatch derivation from that pin with no overrides.
  • The peewee 3 pin and aw-qt wrapper-args overrides in nixos/environment/default.nix are removed, and activitywatch still builds and launches from the unmodified pin.
  • If no pin qualifies yet, the blocking pin state is re-recorded on the issue with the date checked (the issue stays open as the waiting record).

Activity

  1. changed the title [-]chore(deps): remove the aw-core peewee relaxDeps override once nixpkgs' activitywatch builds stock[/-] [+]chore(deps): remove the activitywatch overrides (peewee 3 pin + aw-qt wrapper args) once nixpkgs' activitywatch builds stock[/+] on Nov 1, 2026
  2. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Final fix shape (commit d201b4e on chore/nixpkgs-update-2026-10-30) — supersedes the relaxDeps approach in the original body:

    1. peewee pin, not relaxDeps. A pythonRelaxDeps = [ "peewee" ] on aw-core was tried first: it passes pythonRuntimeDepsCheck, but aw-core's own test suite then fails at collection — aw_datastore/storages/peewee.py does from playhouse.sqlite_ext import SqliteExtDatabase, a name peewee 4 removed. The incompatibility is real at runtime, so relaxing the metadata would have shipped a broken aw-server. Instead the nixpkgs-25-fixed extension pins peewee 3.17.9 (last 3.x, satisfies aw-core's peewee==3.*) in the set's python314 packageOverrides, with cython dropped from its buildInputs (3.17.9's .pyx sources no longer compile under the tree's Cython 3.3; peewee builds from its pre-generated C sources without it). Evidence: with the pin, aw-core builds AND its full pytest suite passes against peewee 3.17.9.
    2. aw-qt wrapper args. A second, independent breakage hidden behind the first: aw-qt's makeWrapperArgs use the single-string form "--suffix PATH : ...", which the tree's C makeWrapper rejects (makeCWrapper: Unknown argument). The extension restates them in split form on the top-level aw-qt attribute (aw-qt is built by the office/activitywatch expression from the set's python3Packages, so the override must sit on the top-level attribute, not inside python3Packages — verified by derivation hash).

    Verified end-to-end: the extended activitywatch derivation realises cleanly, and the amd config's systemPackages reference exactly that derivation.

    Removal condition (updated): delete the nixpkgs-25-fixed binding and point the activitywatch segment back at the raw legacyPackages once stock activitywatch builds on the consuming pin — i.e. upstream bumps aw-core for peewee 4 (or pins peewee 3 for the aw-* packages) AND stock aw-qt wraps successfully. Removal test unchanged.

  3. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    Second site (commit bcea7dc): activitywatch has TWO consumers on two different raw sets. Besides the systemPackages segment (nixpkgs-25, fixed in d201b4e), home/common/default.nix runs a home-manager services.activitywatch whose package comes from inputs.nixpkgs-stable.legacyPackages — the stable pin (086873f3) carries the identical breakage, and the toplevel kept failing on the stock aw-core through that path.

    The home module now carries a mirrored nixpkgs-stable-fixed binding with the same overrides, and the service takes its package from it. Removal: delete BOTH bindings (this one and nixpkgs-25-fixed) and restore both raw references once stock activitywatch builds on both pins. Verified by derivation hash: the amd toplevel graph now contains zero stock aw-core/aw-qt/activitywatch derivations.

  4. added
    kind/infrastructureInfrastructure / host-portability work
    priority/lowNice to have; do when convenient
    effort/sSmall: expected under 2 hours of work
    area/nixNix expressions, flakes, and packaging
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Nov 2, 2026
  5. dezren39 commented on Nov 2, 2026

    @dezren39
    MemberAuthor

    Intake review

    • Related: issue chore(deps): nixpkgs update blocked 2026-10-30 #2715 (the 2026-10-30 nixpkgs update that surfaced the conflict).
    • Notes: This issue had no labels at all; normalized this pass. It is explicitly conditional — the overrides come out only once an upstream pin offers a consistent aw-core/peewee set, and the body shows none did at filing. Verified still live: the condition is upstream-dependent, so no merged PR in this repo could have resolved it at filing time.
    • Risks: Removing the overrides before a pin qualifies breaks the activitywatch build (pythonRuntimeDepsCheck failure quoted in the body).
    • Suggested approach: Re-check on each nixpkgs update sweep; the first pin where aw-core evaluates clean without overrides triggers the removal PR.

    — Fleet monitor intake, 2026-11-01 20:12 CST run.

  6. added
    queue/queuedHas a queued task in the Supabase agent queue
    source/creatorFiled by the new-issue-creator job
    on Nov 3, 2026
  7. 18 remaining items

  8. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 4, 2026
  9. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    {"kind":"handoff","task":8737,"lane":"code-v","execution_lane":"opencode","state":"parked","note":"task 8737 (triage) handed off to opencode claimant by lane code-v. Fresh revalidation: issue #4005 OPEN, no hard-stop labels (status/waiting-dependency present — the fix waits on nixpkgs activitywatch building stock). Warning: task 8737 attempts at 11/12, one below cap — if the claimant misses, the monitor needs to raise the cap."}

  10. added
    queue/claimedQueue worker lifecycle state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 4, 2026
  11. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: picked-up
    task: 8737
    worker: repo-worker-code
    lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
    at: 2026-11-04T14:44:00Z
    note: Claimed for fresh triage. Revalidating issue #4005, consuming pin, and open PR #4519; no code changes planned unless fresh evidence changes the route.

  12. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: triaged
    task: 8737
    worker: repo-worker-code
    lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
    at: 2026-11-04T14:52:00Z

    Fresh verification: issue #4005 remains OPEN. origin/main is a8aeb99; its nixpkgs-25 pin is 1d060086d60cb76a40cf37109f979d88a5bd6396. The main-tree ActivityWatch references have no peewee, aw-core, or aw-qt-specific override; the current nixpkgs-25-fixed set is for regex-pcre. PR #4519 remains OPEN and is authored/assigned to Drew; it carries the proposed ActivityWatch peewee/wrapper changes, so I did not alter or merge it.

    Route: keep #4005 open with status/waiting-dependency until #4519 lands and the stock ActivityWatch build/runtime condition is verified on the consumed pin. #4005 itself remains the existing follow-up issue; no duplicate task was enqueued.

  13. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: done
    task: 8737
    worker: repo-worker-code
    lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
    at: 2026-11-04T14:53:30Z
    result: triaged; #4005 remains OPEN with status/waiting-dependency. No change to Drew-owned PR #4519. Queue task completed; the issue remains the existing follow-up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area/nixNix expressions, flakes, and packagingeffort/sSmall: expected under 2 hours of workkind/infrastructureInfrastructure / host-portability workmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/lowNice to have; do when convenientsource/creatorFiled by the new-issue-creator jobstatus/waiting-dependencyWaiting on a dependencytask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions