Group cross-camera motion events into journeys #147

Manually merged
marvin8 merged 11 commits from feat/issue-146-cross-camera-journeys into main 2026-09-05 20:53:35 +00:00
Collaborator

Chains per-camera motion events into cross-camera journeys using a time-based join window ([events] journey_gap_seconds, default 180 s, inclusive, applied per hop). One real-world movement now appears as a single journey card in the day view, with a stitched viewer that plays it across cameras in order.

  • events.py: Snapshot protocol + Event/Journey type aliases; group_events_into_journeys greedy chronological chaining; journey helpers
  • config.py: new [events] section (journey_gap_seconds, default 180)
  • Day view: journey cards with segment chips; calendar badge counts journeys
  • New stitched viewer route /days/{day}/journeys/{anchor_id} (segment highlighting by snapshot id, time bar with segment markers)
  • Docs: config.md, web-ui.md, README, Release-Notes

Query-time derivation only — no schema changes, cangcang untouched.

Spec: .superpowers/specs/2026-09-05-cross-camera-journeys-design.md

Closes #146

Chains per-camera motion events into cross-camera journeys using a time-based join window (`[events] journey_gap_seconds`, default 180 s, inclusive, applied per hop). One real-world movement now appears as a single journey card in the day view, with a stitched viewer that plays it across cameras in order. - `events.py`: `Snapshot` protocol + `Event`/`Journey` type aliases; `group_events_into_journeys` greedy chronological chaining; journey helpers - `config.py`: new `[events]` section (`journey_gap_seconds`, default 180) - Day view: journey cards with segment chips; calendar badge counts journeys - New stitched viewer route `/days/{day}/journeys/{anchor_id}` (segment highlighting by snapshot id, time bar with segment markers) - Docs: config.md, web-ui.md, README, Release-Notes Query-time derivation only — no schema changes, cangcang untouched. Spec: `.superpowers/specs/2026-09-05-cross-camera-journeys-design.md` Closes #146
🐛 Highlight journey segment by snapshot id, not append order
All checks were successful
/ gitleaks (pull_request) Successful in 21s
/ checks (pull_request) Successful in 2m2s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
/ pr-review (pull_request) Successful in 5m24s
7dd09e56e2
marvin8 approved these changes 2026-09-05 09:42:28 +00:00
Dismissed
📝 Update docs for unified journey scrubber
All checks were successful
/ gitleaks (pull_request) Successful in 20s
/ checks (pull_request) Successful in 2m13s
/ publish (pull_request) Has been skipped
/ deploy-docs (pull_request) Has been skipped
/ publish-container (pull_request) Has been skipped
/ pr-review (pull_request) Successful in 4m56s
b22c7ff467
agent-pi dismissed marvin8's review 2026-09-05 10:40:50 +00:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

forgejo-actions left a comment

WuMing

Found 1 issue(s). See inline comments below.

## WuMing Found **1** issue(s). See inline comments below.
@ -32,3 +32,3 @@
- repo: https://github.com/rohaquinlop/complexipy-pre-commit
rev: v7.0.0
rev: v7.0.1

config [LOW]

complexipy-pre-commit is pinned to v7.0.1 while pyproject dev dependencies and pylock.toml now use complexipy~=8.0.0. This can make the pre-commit hook run a different complexipy version than the installed dev tooling. Update the hook rev to the matching 8.0.0 tag if available, or keep the complexipy dependency at 7.x for consistency.

**config** [LOW] complexipy-pre-commit is pinned to v7.0.1 while pyproject dev dependencies and pylock.toml now use complexipy~=8.0.0. This can make the pre-commit hook run a different complexipy version than the installed dev tooling. Update the hook rev to the matching 8.0.0 tag if available, or keep the complexipy dependency at 7.x for consistency. <!-- wuming:sha256:2f6f80deeb26005a6c141b3626a8fefcde75a5548f7cb2b36b8cfc5e82896671 -->
Author
Collaborator

.pre-commit-config.yaml line 34

config [LOW]

🔴 Not actioned — upstream has no v8 tag. git ls-remote --tags https://github.com/rohaquinlop/complexipy-pre-commit shows v7.0.1 is the newest tag, so the hook rev cannot be aligned to 8.0.0, and keeping the dependency at 7.x would revert a deliberate dependency bump. Pre-commit hook environments are isolated, so the rev does not need to match the installed dev tooling exactly — CI (which runs complexipy 8 via uv) is green. The rev moves to 8.x as soon as upstream tags it.

[.pre-commit-config.yaml line 34](https://forge.marvin8.zone/marvin8/cang/pulls/147#issuecomment-2146) > **config** [LOW] 🔴 Not actioned — upstream has no v8 tag. `git ls-remote --tags https://github.com/rohaquinlop/complexipy-pre-commit` shows v7.0.1 is the newest tag, so the hook rev cannot be aligned to 8.0.0, and keeping the dependency at 7.x would revert a deliberate dependency bump. Pre-commit hook environments are isolated, so the rev does not need to match the installed dev tooling exactly — CI (which runs complexipy 8 via uv) is green. The rev moves to 8.x as soon as upstream tags it.
marvin8 approved these changes 2026-09-05 20:52:23 +00:00
marvin8 manually merged commit 7470625617 into main 2026-09-05 20:53:35 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
marvin8/cang!147
No description provided.