Repository navigation
Stack ceiling: the tallest stack circular shifting can build, with an animated page - #877
Merged
Merged
Conversation
…nd how much of it stands Tony, 2026-10-08, asking for something independent of the approaches stack shares with LoCo and count (sliding): what is the tallest stack of width w that circular shifting over a period p can build? The answer is a count. Any ROI with an onset in the period can be slid into the window, so the ceiling is the number of ROIs with an onset in the period, and the fill is the unshifted height divided by it. No tail probability, no calibration, no draws. stack_ceiling.py computes height, ceiling, fill and the growth curve (the tower's height against the shift each ROI is allowed), numpy only. make_stack_ceiling_demo.py builds an animated page on two of the bench's simulated recordings: a period shifting toward the window, the tower it builds and the curve it traces. The tool holds every number the page computes to the module before it writes the page. A prototype, not a detector: no calling rule, no bench run, no real recording. On this one seed the 10-ROI planted event stands clear on fill, the 3-ROI event sits below the busiest background moment, and a raised-rate stretch reaches 0.59 with nothing planted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rebuild elsewhere Tony, on the first page: fun to watch, but without calls it is only mesmerizing. The rule stays in the language of shifting and still computes no probability. A tower at a moment stands with no shift; the cost to rebuild it elsewhere is the shift per ROI it takes to build one as tall at a typical other moment of the same period, in seconds. A moment is called when that cost reaches a setting and at least 3 ROIs stand. The page now holds a calls lane above the whole recording, verdicts on the planted events, and a slider for the setting, with fill offered as the plainer rule to compare. On this seed both rules find the four planted events of 6 and 10 ROIs and miss both of 3; in the raised-rate stretch fill makes 22 calls and the rebuild cost makes 1. The settings were picked by eye on four seeds of these recordings, so that is a fit and not a test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tony's layout: the three figures at the top, each with its legend, the controls after them and the explanation last. The tool row keeps its place in the page after the figures and stays in view while they are on screen, so the shift can be played while watching it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tony's ruling of 2026-10-08, made on the stack ceiling page after he had it rearranged: the figures at the top, the controls stuck to the bottom of the window, the explanation at the bottom of the scroll, and each figure's legend kept with the figure. The record lands with the first page built that way, a line in CLAUDE.md's plot conventions, and a test that holds that page to the four points. It covers one page: checking every page builder needs a shared shell, and that request goes to the armory repository as the estate's half. Whether long written reports count as figure pages is left open for Tony. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… in place Tony's answer to the question the record left open. A written report opens with the one figure that carries its finding; every other figure sits where the text discusses it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e calls, and no more Tony: try it on the bench. The rule ran on all three streams with the bench's scorer and each recording's floor, at eleven thresholds, beside CoactDetect, LoCo, count (sliding) and stack (global). The threshold was picked on the even fresh seeds and everything reported is from the odd ones: 672 recordings, 183 s. It is not the breakout. On slow and combined the pick is the lowest threshold tried, where the rule is count (sliding) and scores the same to the third decimal. On fast it trades 0.027 F1 gained on the busy background for 0.017 lost on the quiet one, and LoCo stays ahead on both. It does make no call in the raised-rate stretch from 3 s up, but every detector is already far inside that limit. Raising the threshold cannot buy precision, because the false calls are on decoys, and a decoy is as costly to rebuild elsewhere as an event. The record leads with the bench figure, as ADR-0014 asks of a report. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dow, not the idea Tony, on the first bench run: was stack_ceiling not optimized? It was not. Only the threshold had been searched, beside detectors at fully searched operating points. search_stack_ceiling.py searches the window, the period, the merge gap and the threshold as one grid of 2,520 settings per stream, picks on the even fresh seeds inside count (sliding)'s three limits and reports on the odd ones. Searched, the rule gains 0.016 F1 over LoCo on fast (interval spans zero) and 0.021 on combined, and is level on slow, with no call on recordings with nothing planted or in the raised-rate stretch. The attribution is the finding. Against the best setting with the rebuild cost switched off, the cost adds 0.008 on fast, nothing on slow and 0.001 on combined. What moves the score is a 0.5 s window in place of count (sliding)'s shipped 2 s, with the floor still counted at 2 s. That is a question for count (sliding)'s own search, and the record says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e 0.5 s window was known Checked at Tony's prompting. Fast LoCo and CoactDetect ship binned at points from 2026-09-16; their sliding forms were searched on the realistic bench on 2026-09-26 and not adopted, and reach about what the searched stack ceiling does. count (sliding) was searched the same night and found the 0.5 s window, refused on its precision difference. The record now says both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…c bench cannot Tony, once every tuned detector had landed within a few hundredths of F1 on fast: we need the revised bench with short intervals. The realistic bench's gaps were measured from peaks of a count in a 2 s window, so its shortest fast gap is 2.1 s. measure_close_events.py is a controlled test that needs no real recording: on the fast bench's recording half the gaps between planted events are set to one value, from 0.3 s to 10 s. At 10 s the detectors sit within 0.09 F1 of each other; at 1 s they span 0.40 to 0.66. The merge gap decides it, then the window: the shipped 3 s merge gaps lose a third of the events until the gap passes 5 s, and a 0.5 s window with a 0.2 s merge gap recalls every scored event down to 1 s. Under 1 s nothing separates the pair. A revised bench itself needs the real gaps measured again in a narrower window, and the default folder is stopped (#858). The record says what that waits on. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed at all The 2026-09-25 measurement counted co-activity in a 2 s window and merged events under 2 s apart, so the realistic bench holds no gap shorter than 2.1 s on fast. --window-sec sets the count's window, the window the floor is counted in and the merge distance together. The default is unchanged, floor key included, so the first measurement reproduces exactly. Nothing is measured in this commit: the default folder is stopped (#858). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dow changes what an event is Measured on the stopped default folder on Tony's acknowledgment, run by him; measurement only. In a 0.5 s window 4 to 6 percent of gaps are under 2 s, where the 2 s measurement the bench plants from could see none. The narrower window also counts more events, nearly twice as many on fast, because the floor falls with it. A revised bench from that measurement would be a bigger change than adding short gaps, and the record says so. make_real_gaps_by_window.py reads the measurement's output files and reports every number with and without the four DI recordings the stop names. No share moves by more than 0.01. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tony reran the 2 s window, which had written nothing on its first attempt. Its gaps.csv is identical to the first measurement's, so --window-sec changes nothing at the default and the 1 s and 0.5 s results rest on a checked option. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…page, the index Tony: prepare to end the session, and make sure this detector does not get lost. The todo holds the detector's entry point, its searched settings per stream, the four findings, what waits on him (what the revised bench is, whether the stack ceiling goes further, the unadopted fast proposals) and what a session can do without a ruling. The goal page and the index point at it. The darkroom claim is released. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…w it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tony's question of 2026-10-08, asked to get away from what
stackshares with LoCo and count (sliding): what is the tallest stack of width w that circular shifting over a period p can build?The answer is a count. Any ROI with an onset in the period can be slid into the window, so the ceiling is the number of ROIs with an onset in the period, and the fill is the unshifted height divided by it. No tail probability, no calibration, no draws.
src/bugarach/detectors/stack_ceiling.py: height, ceiling, fill and the growth curve, numpy only. Tests intests/test_stack_ceiling.py.tools/make_stack_ceiling_demo.py: an animated page on two of the bench's simulated recordings. The tool checks every number the page computes against the module before writing it.docs/learned/runs/2026-10-08-stack-ceiling/: the page, one frame of it, and what one seed showed.A prototype, not a detector. No calling rule, no bench run, no real recording. On this seed the 10-ROI planted event stands clear on fill, the 3-ROI event sits below the busiest background moment, and a raised-rate stretch reaches 0.59 with nothing planted.
Not set to merge by itself: the page has not been through the murderboard, and the idea is still being worked with Tony.
🤖 Generated with Claude Code