Repository navigation
Increment E: described in segments, ticketed, and scoped by outcome - #77
Merged
Merged
Conversation
CONTEXT.md rules bare "node" out for the fine vertices inside a tube map, and
increment E was written entirely in it: a per-node tabix loop, 65-79 ms per node,
whether the per-node fetch can be batched. Those are segments. A node is the
coarse vertex pgb draws in 3D and addresses as 141452+, one per tube map; the
loop reads S lines, hundreds per tube map. main.py calls the variable node_id
because GFA and vg spell it that way, and the spelling travelled from there into
four documents.
Eleven sites, and the .md and .html twins of the latency doc had drifted apart
because only one of them was swept the first time. Six other uses of "node" are
correct and untouched -- which nodes will work, large nodes fetchable, scientists
poke arbitrary nodes, 43% of catalogued nodes fail. All four are about clicking
things in the 3D view. Three more are quoted program output ("Subgraph contains
381 nodes and 464 paths") or another tool's flag name, and stay verbatim under
CONTEXT.md's own rule that a spelling stays correct inside the tool that uses it.
No measurement moved. The perf documents remain dated records of what was
measured on the day; a word was wrong in them, not a number.
The Still open bullet is reworded rather than respelled. It asked whether the
fetches *can* be batched, which is settled -- the v1 path at main.py:231-244
already groups ids into contiguous runs, and two of the five committed fixtures
are consecutive integers. What is open is whether batching *helps*, or whether
the cost is parsing 464 haplotypes' coordinates out of each row, and that is
what perf/walk-lookup-split.py measures.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2Fbzw5Nq18SKvfKhDfdxA
E was the only increment without an issue number, and the roadmap said so twice. It is now #74 and #75, with GitHub's native blocked-by edge between them, which is what the dependency graph claims its edges are. Scoped by outcome rather than by mechanism -- "stop reading the walk table one segment at a time", not "batch the fetches". The distinction is load-bearing: a measurement that says the cost is the parse would answer "can it be batched?" with no and leave the 30 seconds exactly where it is, which is not a finished increment. Every other increment here is named for a result. #74 is the measurement, ready-for-human because it needs the real derivative on the server. #75 is the change, ready-for-agent once #74 has said what shape it takes. #74 also decides whether E wants an ADR at all: batching behind a byte-identical oracle is local and reversible and wants none, but moving the parse out of the interpreter would add numpy or a C extension to a project with neither, and that wants one before the code is written. #75's acceptance is the W lines byte-identical across the five committed fixtures. That pins the duplicate-handling quirks in place deliberately -- they are #76, which cannot say whether it is a data defect or a code defect because the filter at main.py:373 drops entries silently and nobody has counted them. The Closed entry on haplotype collapsing is reworded to say what it protects. "The ~464 strands are fixed input, not a variable" reads as a ban on the input side, which would forbid parsing the same coordinates faster -- and that cannot have been the intent. It protects the picture: every strand appears, nothing merges, drops or samples them. The line is the output. E sits before D in the sequence. Disjoint code, neither blocks the other, but D is 0.63 s of a 38.9 s request and E is 30. seqtubemap-plan.md gets a dated amendment rather than an edit. It says E "has not been grilled", which was true of the phase it records, and the document declares it does not carry status. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J2Fbzw5Nq18SKvfKhDfdxA
E was recorded as ticketed but not as started. It now appears in Where this stands, in the status table as In progress, and as a second HERE marker in the dependency graph. Two frontiers rather than one, which the document had no shape for. #25 and #74 are independent and neither blocks the other: #25 closes C across the repository boundary, #74 opens E upstream of anything pgb can observe. The sentence that named a single frontier now names both and says why they do not queue. #74 is where the work is, and it measures before it changes anything -- so the status says "nothing has reported yet" rather than implying a number exists. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J2Fbzw5Nq18SKvfKhDfdxA
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.
Two commits out of a grilling session on increment E. No code changes — documents and tickets.
1. Increment E is described in segments, which is what it reads
CONTEXT.mdrules bare node out for the fine vertices inside a tube map, and increment E was written entirely in it: a per-node tabix loop, 65-79 ms per node, whether the per-node fetch can be batched. Those are segments. A node is the coarse vertexpgbdraws in 3D and addresses as141452+— one per tube map. The loop readsSlines, hundreds per tube map.main.pynames the variablenode_idbecause GFA andvgspell it that way, and the spelling travelled from there into four documents.Eleven sites, including four in
docs/perf/seqtubemap-latency.htmlthat had drifted from its.mdtwin because only one of the two was swept the first time.Six uses of "node" are correct and untouched — which nodes will work, makes large nodes fetchable, scientists poke arbitrary nodes, 43% of catalogued nodes fail. All four are about clicking things in the 3D view. Three more are quoted program output (
Subgraph contains 381 nodes and 464 paths) or another tool's flag name, and stay verbatim underCONTEXT.md's own rule that a spelling stays correct inside the tool that uses it.No measurement moved. The perf documents remain dated records; a word was wrong in them, not a number.
One reword rather than a respelling: the Still open bullet asked whether the fetches can be batched. They can — the v1 path at
main.py:231-244already groups ids into contiguous runs, and two of the five committed fixtures are consecutive integers. What is open is whether batching helps, or whether the cost is the parse.2. Increment E has tickets, a scope, and a line it must not cross
#74 — measure the lookup/parse split.
ready-for-human; needs the real derivative on the server.#75 — stop the per-segment reads.
ready-for-agent, blocked-by #74 through GitHub's native dependency, which is what the roadmap's graph claims its edges are.#76 — the duplicate-entry filter,
needs-info.Scoped by outcome, not mechanism. A measurement saying the cost is the parse would answer "can it be batched?" with no and leave the 30 seconds exactly where it is — which is not a finished increment. Every other increment here is named for a result.
#74 decides whether E wants an ADR. Batching behind a byte-identical oracle is local and reversible and wants none. Moving the parse out of the interpreter would add
numpyor a C extension to a project with neither, and that wants one before the code is written.#75's acceptance is the
Wlines byte-identical across the five committed fixtures — the oracle is why E can be small. It pins the duplicate-handling quirks in place deliberately; they are #76's business, and #76 cannot yet say whether it is a data defect or a code defect because the filter atmain.py:373drops entries silently and nobody has counted them.The Closed entry on haplotype collapsing is reworded to say what it protects. "The ~464 strands are fixed input, not a variable" reads as a ban on the input side, which would forbid parsing the same coordinates faster — and that cannot have been the intent. It protects the picture: every strand appears, nothing merges, drops or samples them. The line is the output.
E sits before D. Disjoint code, neither blocks the other, but D is 0.63 s of a 38.9 s request and E is 30.
seqtubemap-plan.mdgets a dated amendment rather than an edit — it says E "has not been grilled", which was true of the phase it records, and the document declares it does not carry status.🤖 Generated with Claude Code
https://claude.ai/code/session_01J2Fbzw5Nq18SKvfKhDfdxA