@@ -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
232232the 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