LiveFileTransferTest covers the one seam nothing else does: a document
leaving one vault, crossing a real relay, and arriving in another's with
its label intact. FileShareWireTest proves the envelope's shape and LocalVaultTest proves the vault at both ends; neither puts a byte on a
wire.
Written, compiles, UNRUN — the same state LiveSignUpFleetTest is
in, and the same caveat applies: an unrun test proves nothing. It creates
accounts, so it needs a throwaway relay and an explicit decision to point
it at one.
Writing it surfaced four published passwords and a guard that could
not see them.
TestSafetyTest exists to stop a credential being written into a suite
that creates real accounts. It matched val X = "…" only. So:
LiveConversationTest passed the literal straight as an ARGUMENT,
twice — invisible to the check.
LiveSignUpTest, LiveKeyLogTest and LiveSealedSenderTest wrote password = "…" on its own line inside a multi-line argument list, the
most ordinary Kotlin formatting there is — also invisible.
I copied the same literal into the new suite before noticing, which is
how I found it.
A guard that passes while the thing it guards against is present in the
tree is worse than no guard, because it is read as evidence. All five
call sites now read LiveTarget.passphrase() from the environment with no
fallback, and announce a SKIP when it is unset.
The check itself took two wrong turns worth recording:
Skipping every named argument, to avoid flagging product = "messenger" — which let the three password = "…" suites
through. Trading one blind spot for another is not a fix; a named
argument is now judged by its NAME.
Widening the sign-up match to a few lines around the call — which
flagged forty test tags, assertion messages and message bodies as
credentials. That is how a check stops being read, so it is same-line
only, and rule 1 covers the multi-line case properly.
"secret" was dropped from the credential names for the same reason: test
prose is full of it, and a marker string called secret is a fixture.
`LiveFileTransferTest` covers the one seam nothing else does: a document
leaving one vault, crossing a real relay, and arriving in another's with
its label intact. `FileShareWireTest` proves the envelope's shape and
`LocalVaultTest` proves the vault at both ends; neither puts a byte on a
wire.
**Written, compiles, UNRUN** — the same state `LiveSignUpFleetTest` is
in, and the same caveat applies: an unrun test proves nothing. It creates
accounts, so it needs a throwaway relay and an explicit decision to point
it at one.
**Writing it surfaced four published passwords and a guard that could
not see them.**
`TestSafetyTest` exists to stop a credential being written into a suite
that creates real accounts. It matched `val X = "…"` only. So:
- `LiveConversationTest` passed the literal straight as an ARGUMENT,
twice — invisible to the check.
- `LiveSignUpTest`, `LiveKeyLogTest` and `LiveSealedSenderTest` wrote
`password = "…"` on its own line inside a multi-line argument list, the
most ordinary Kotlin formatting there is — also invisible.
I copied the same literal into the new suite before noticing, which is
how I found it.
**A guard that passes while the thing it guards against is present in the
tree is worse than no guard, because it is read as evidence.** All five
call sites now read `LiveTarget.passphrase()` from the environment with no
fallback, and announce a SKIP when it is unset.
The check itself took two wrong turns worth recording:
- Skipping every named argument, to avoid flagging
`product = "messenger"` — which let the three `password = "…"` suites
through. Trading one blind spot for another is not a fix; a named
argument is now judged by its NAME.
- Widening the sign-up match to a few lines around the call — which
flagged forty test tags, assertion messages and message bodies as
credentials. That is how a check stops being read, so it is same-line
only, and rule 1 covers the multi-line case properly.
"secret" was dropped from the credential names for the same reason: test
prose is full of it, and a marker string called `secret` is a fixture.
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.
LiveFileTransferTestcovers the one seam nothing else does: a documentleaving one vault, crossing a real relay, and arriving in another's with
its label intact.
FileShareWireTestproves the envelope's shape andLocalVaultTestproves the vault at both ends; neither puts a byte on awire.
Written, compiles, UNRUN — the same state
LiveSignUpFleetTestisin, and the same caveat applies: an unrun test proves nothing. It creates
accounts, so it needs a throwaway relay and an explicit decision to point
it at one.
Writing it surfaced four published passwords and a guard that could
not see them.
TestSafetyTestexists to stop a credential being written into a suitethat creates real accounts. It matched
val X = "…"only. So:LiveConversationTestpassed the literal straight as an ARGUMENT,twice — invisible to the check.
LiveSignUpTest,LiveKeyLogTestandLiveSealedSenderTestwrotepassword = "…"on its own line inside a multi-line argument list, themost ordinary Kotlin formatting there is — also invisible.
I copied the same literal into the new suite before noticing, which is
how I found it.
A guard that passes while the thing it guards against is present in the
tree is worse than no guard, because it is read as evidence. All five
call sites now read
LiveTarget.passphrase()from the environment with nofallback, and announce a SKIP when it is unset.
The check itself took two wrong turns worth recording:
product = "messenger"— which let the threepassword = "…"suitesthrough. Trading one blind spot for another is not a fix; a named
argument is now judged by its NAME.
flagged forty test tags, assertion messages and message bodies as
credentials. That is how a check stops being read, so it is same-line
only, and rule 1 covers the multi-line case properly.
"secret" was dropped from the credential names for the same reason: test
prose is full of it, and a marker string called
secretis a fixture.Co-Authored-By: Claude Opus 5 noreply@anthropic.com
assigned to @paulhitt
mentioned in commit
e3d0c0c121changed the description