The content layer had no vectors. Everything from 6.6 onward was guarded by same-code round trips: this engine encodes and parses through its own codec and would pass unchanged if it and the iPhone disagreed about every key.
content-v1.json holds 15 envelopes generated by running the iPhone's encoders. This suite parses each and asserts field-by-field, because "it did not crash" is what the old tests already proved. One case pins something easy to get wrong twice: the iPhone writes fwd as the integer 1, not true, and optBoolean does not coerce a number, so a parser reading only the boolean answers false and the message quietly stops saying it was passed on.
Separately, and the reason any of this is trustworthy: the test task did not track the vector files at all. They arrive by environment variable, Gradle does not track one as an input, so a vector could change under a build directory that already had results and the task reported UP-TO-DATE without running. Not hypothetical - that is how twenty vector tests once passed in CI for weeks without executing, on this same runner, whose build directory survives between runs. All six vector files are now declared inputs.
Proven rather than asserted: with the inputs declared, flipping men to ment in one vector turns the suite red without--rerun-tasks. Before the fix the same change left it UP-TO-DATE and green.
Full suite: 1294 tests, 0 failures.ci/lint accepts the pipeline.
Closes the Android half of flamenet-e2e#4.
The content layer had no vectors. Everything from 6.6 onward was guarded by same-code round trips: this engine encodes and parses through its own codec and would pass unchanged if it and the iPhone disagreed about every key.
`content-v1.json` holds 15 envelopes generated by **running** the iPhone's encoders. This suite parses each and asserts field-by-field, because "it did not crash" is what the old tests already proved. One case pins something easy to get wrong twice: the iPhone writes `fwd` as the integer `1`, not `true`, and `optBoolean` does not coerce a number, so a parser reading only the boolean answers false and the message quietly stops saying it was passed on.
**Separately, and the reason any of this is trustworthy:** the test task did not track the vector files at all. They arrive by environment variable, Gradle does not track one as an input, so a vector could change under a build directory that already had results and the task reported `UP-TO-DATE` without running. Not hypothetical - that is how twenty vector tests once passed in CI for weeks without executing, on this same runner, whose build directory survives between runs. All six vector files are now declared inputs.
**Proven rather than asserted:** with the inputs declared, flipping `men` to `ment` in one vector turns the suite red *without* `--rerun-tasks`. Before the fix the same change left it `UP-TO-DATE` and green.
Full suite: **1294 tests, 0 failures.** `ci/lint` accepts the pipeline.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Closes the Android half of flamenet-e2e#4.
The content layer had no vectors. Everything from 6.6 onward was guarded by same-code round trips: this engine encodes and parses through its own codec and would pass unchanged if it and the iPhone disagreed about every key.
content-v1.jsonholds 15 envelopes generated by running the iPhone's encoders. This suite parses each and asserts field-by-field, because "it did not crash" is what the old tests already proved. One case pins something easy to get wrong twice: the iPhone writesfwdas the integer1, nottrue, andoptBooleandoes not coerce a number, so a parser reading only the boolean answers false and the message quietly stops saying it was passed on.Separately, and the reason any of this is trustworthy: the test task did not track the vector files at all. They arrive by environment variable, Gradle does not track one as an input, so a vector could change under a build directory that already had results and the task reported
UP-TO-DATEwithout running. Not hypothetical - that is how twenty vector tests once passed in CI for weeks without executing, on this same runner, whose build directory survives between runs. All six vector files are now declared inputs.Proven rather than asserted: with the inputs declared, flipping
mentomentin one vector turns the suite red without--rerun-tasks. Before the fix the same change left itUP-TO-DATEand green.Full suite: 1294 tests, 0 failures.
ci/lintaccepts the pipeline.Co-Authored-By: Claude Opus 5 noreply@anthropic.com
mentioned in commit
fcc81a678a