The other half of a change that was split so F6 could land on its own.
What happened, because it is the useful part
PollTallyVectorTest was written, passed locally, and failed in CI with three AssertionError at PollTallyVectorTest.kt:40 — which is "vectors not found".
The fixture lives in flamenet-e2e. CI clones that repo at the commit .e2e-ref pins, and the file only existed on an unmerged branch. It passed on a developer machine because there is a sibling flamenet-e2e checkout there and the runner has none.
That is not a defect in the test. It is this repo's cross-repo process working exactly as designed, and it is the "pushed is not green" lesson in its purest form: the machine that ran it green could not have caught it.
So, in one commit as .e2e-ref.md asks
.e2e-ref moves to e2e main
FLAMENET_POLL_VECTORS joins the export list and the existence check that runs before the suite
the test comes back
That existence check is why the loop above it exists in the first place: a path that silently does not exist puts the tests straight back where they were, and the failure then reads as a protocol bug rather than a missing file.
What the test is for
Both engines carry a comment saying the integer width is load-bearing — Int32 with &+/&- on iOS, JVM Int here — because the same shares add up to a different number at 64 bits and the two engines would disagree about the result of a vote. Both were unit-tested on their own side and nothing checked that they agree, while a mixed iPhone-and-Android group poll is the ordinary case. A disagreement surfaces as a wrong count rather than an error: no crash, the poll closes on the wrong answer and everybody believes it.
Two of the four cases come out differently if a reader widens to 64 bits and carry the wrong answer beside them; the other two agree by luck, which is the point of the wrapping cases.
Verified both ways it can be reached
With FLAMENET_POLL_VECTORS set, as CI sets it, and with it unset so the sibling-checkout fallback is what answers.
client 480, engine 723, app 652, no failures. The vector suite itself: 3 tests, 0 skipped, 0 failures.
The other half of a change that was split so F6 could land on its own.
## What happened, because it is the useful part
`PollTallyVectorTest` was written, passed locally, and failed in CI with three `AssertionError at PollTallyVectorTest.kt:40` — which is "vectors not found".
The fixture lives in flamenet-e2e. CI clones that repo **at the commit `.e2e-ref` pins**, and the file only existed on an unmerged branch. It passed on a developer machine because there is a sibling `flamenet-e2e` checkout there and the runner has none.
That is not a defect in the test. It is this repo's cross-repo process working exactly as designed, and it is the "pushed is not green" lesson in its purest form: the machine that ran it green could not have caught it.
## So, in one commit as `.e2e-ref.md` asks
- `.e2e-ref` moves to e2e `main`
- `FLAMENET_POLL_VECTORS` joins the export list **and the existence check that runs before the suite**
- the test comes back
That existence check is why the loop above it exists in the first place: a path that silently does not exist puts the tests straight back where they were, and the failure then reads as a protocol bug rather than a missing file.
## What the test is for
Both engines carry a comment saying the integer width is load-bearing — `Int32` with `&+`/`&-` on iOS, JVM `Int` here — because the same shares add up to a different number at 64 bits and the two engines would disagree about the result of a vote. Both were unit-tested on their own side and nothing checked that they agree, while a mixed iPhone-and-Android group poll is the ordinary case. A disagreement surfaces as a wrong count rather than an error: no crash, the poll closes on the wrong answer and everybody believes it.
Two of the four cases come out differently if a reader widens to 64 bits and carry the wrong answer beside them; the other two agree by luck, which is the point of the wrapping cases.
## Verified both ways it can be reached
With `FLAMENET_POLL_VECTORS` set, as CI sets it, and with it unset so the sibling-checkout fallback is what answers.
---
**client 480, engine 723, app 652, no failures.** The vector suite itself: 3 tests, 0 skipped, 0 failures.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The other half of a change that was split so F6 could land on its own.
What happened, because it is the useful part
PollTallyVectorTestwas written, passed locally, and failed in CI with threeAssertionError at PollTallyVectorTest.kt:40— which is "vectors not found".The fixture lives in flamenet-e2e. CI clones that repo at the commit
.e2e-refpins, and the file only existed on an unmerged branch. It passed on a developer machine because there is a siblingflamenet-e2echeckout there and the runner has none.That is not a defect in the test. It is this repo's cross-repo process working exactly as designed, and it is the "pushed is not green" lesson in its purest form: the machine that ran it green could not have caught it.
So, in one commit as
.e2e-ref.mdasks.e2e-refmoves to e2emainFLAMENET_POLL_VECTORSjoins the export list and the existence check that runs before the suiteThat existence check is why the loop above it exists in the first place: a path that silently does not exist puts the tests straight back where they were, and the failure then reads as a protocol bug rather than a missing file.
What the test is for
Both engines carry a comment saying the integer width is load-bearing —
Int32with&+/&-on iOS, JVMInthere — because the same shares add up to a different number at 64 bits and the two engines would disagree about the result of a vote. Both were unit-tested on their own side and nothing checked that they agree, while a mixed iPhone-and-Android group poll is the ordinary case. A disagreement surfaces as a wrong count rather than an error: no crash, the poll closes on the wrong answer and everybody believes it.Two of the four cases come out differently if a reader widens to 64 bits and carry the wrong answer beside them; the other two agree by luck, which is the point of the wrapping cases.
Verified both ways it can be reached
With
FLAMENET_POLL_VECTORSset, as CI sets it, and with it unset so the sibling-checkout fallback is what answers.client 480, engine 723, app 652, no failures. The vector suite itself: 3 tests, 0 skipped, 0 failures.
🤖 Generated with Claude Code
added 1 commit
f1cd145c- Export the poll vectors in vectors-head tooCompare with previous version
mentioned in commit
6ce2f59e0f