Skip to content

Commit ef64590

Browse files
alexarjeclaude
andcommitted
Handover: where this session stopped
The overnight extraction is in flight with its paths and its restart instructions. Repository state for all four toolboxes. tracks-wip is exact now but should not merge until ARJ decides whether MGT wants a second extractor at all, and its videogram pyramid has never been run. Ends on the tally of my own faults today, because three of them were one fault in different clothes: a test reaching for the convenient fixture rather than the one that reproduces the bug. Running it against the broken code is the step that caught all three. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xg1f739wddu5M4s3UwdNkn
1 parent 4199b03 commit ef64590

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

‎plans/2026-08-24-handover.md‎

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,3 +230,87 @@ is now byte-for-byte equal to `mg_motion` over 6,005 frames of 1080p.
230230
**The parallel path is still not exact**: one repeated frame at the last chunk seam, because
231231
`-ss` before `-i` lands on a keyframe and the frames decoded before the target are not always
232232
the single one the worker drops. Seven interior seams are exact. Do not use it until that is.
233+
234+
---
235+
236+
# Where this session stopped
237+
238+
## In flight: the overnight extraction
239+
240+
**Running now**, started 2026-08-24 late evening, expected about 1.4 h.
241+
242+
/tmp/claude-1000/run_qom.py the script, self-documenting
243+
/tmp/claude-1000/qom_night.log its output
244+
.../PanasonicDownsized/analysis/27CoLocated.Panasonic.A003C505_231127_DJ0B/
245+
qom.csv the motion envelope, one row per frame
246+
qom_run.json the command, the timings, and what QomRaw is
247+
248+
`mg_motion(motion_analysis='qom', save_motiongrams=False, normalize=False)` over the whole
249+
session at native 1920x1080. The **validated** path, not `_tracks.py`.
250+
251+
*If it is not there when you read this*, check the log first: this run already died once,
252+
silently, because MGT could not open the file at all (see the framecount fault above). The
253+
script is idempotent --- just run it again.
254+
255+
*What it gives you:* the envelope every later step needs --- the hierarchy, the
256+
action/phrase/part levels, and the audio-video timing. Not the videogram pyramid; that
257+
needs `_tracks`.
258+
259+
## Repository state
260+
261+
| repo | branch | state |
262+
|---|---|---|
263+
| ambiscape | main | clean, in sync, 0.45.0 |
264+
| musiscape | main | clean, in sync, 0.8.0 |
265+
| micromotion | main | clean, in sync, 1.15.0 released |
266+
| MGT-python | master | clean, in sync, **1.14.1 released and on PyPI** |
267+
| MGT-python | tracks-wip | clean, in sync, **not merged** |
268+
269+
`master` carries the quadratic fix (released) and the framecount fix (unreleased).
270+
271+
## `tracks-wip`: ready for review, not for merge
272+
273+
The extractor is now **exact** --- byte-identical to `mg_motion`'s QomRaw across 6,005
274+
frames of 1080p, serially and in parallel. 120 s of video in 60 s serial, 47 s over eight
275+
workers; the full session about 1.0--1.3 h against `mg_motion`'s 1.4.
276+
277+
Before it merges, three things:
278+
279+
1. **Decide whether MGT should have it at all.** It duplicates what `mg_motion` does, for
280+
the case `mg_motion` is not built for. The alternative is a `lean=True` path inside
281+
`mg_motion` rather than a second module.
282+
2. **It is not exported** from `__init__.py`, deliberately.
283+
3. **The videogram pyramid is written but unexercised.** `build_pyramid` and `read_columns`
284+
have no tests at all --- they were designed and coded, never run against real material.
285+
286+
## The honest tally of my own faults today
287+
288+
Written down because the pattern is worth more than the individual bugs, and because three
289+
of them were the same fault in different clothes.
290+
291+
- **Three tests that could not fail.** A timing test for the quadratic bug that passed
292+
against the unfixed code; a seam test written twice, with two different fixtures, that
293+
passed against the broken code both times; and a strict `xfail` that XPASSed. In every
294+
case I reached for the convenient fixture rather than the one that reproduces the fault,
295+
and only found out by running against the broken code. **That step is the one to keep.**
296+
- **A monitor that watched itself.** `pgrep -f "run_qom.py"` matches the watcher's own
297+
command line, so it waited forever on a process that had died 24 minutes earlier.
298+
- **A patch applied to the wrong function.** The `Popen`/`communicate` block appears several
299+
times in `_utils.py`; a single-occurrence replace landed in `ffprobe()`.
300+
- **A changelog entry that was never written**, while the script printed "changelog updated"
301+
unconditionally --- a success message not conditional on success.
302+
- **A blocker I asserted twice and was wrong about both times**, in the Sound Spaces sweep:
303+
claiming a report could not be re-measured because a deposit was unpublished, when the
304+
deposit tree was local and only a *reader* was blocked.
305+
306+
## What is waiting on you
307+
308+
**On the dance work**, in the design doc's own words: where the cached table lives, which
309+
level the student annotates first, and the round-trip question. Plus, new from the probe:
310+
whether MGT should carry `_tracks` at all.
311+
312+
**On MGT**, unchanged: #373's three Laban questions, #359's dependency, #312's 2023
313+
proposal, #311's author list, and 2.0 waiting one more release.
314+
315+
**On Sound Spaces**, unchanged: publish StillStanding365, the loudest-room rule, the audio
316+
crossing fraction, and where shared report code lives.

0 commit comments

Comments
 (0)