Six clauses on the public site are written for "iPhone build not yet approved"
and need flipping the day it is:
Resources/Views/comparison.leaf — 5
Resources/Views/metadata.leaf — 1
$ grep -ic 'once apple approves\|comes to iPhone once\|not yet on iPhone' Resources/Views/*.leaf
comparison.leaf: 5
metadata.leaf: 1
Also flamenet-messenger-ios/SCOPING-v1.md carries a landing-page TODO waiting
on the TestFlight link.
⚠️ Do not flip these early. Each one is currently accurate.
Done when
Apple approves
All six reworded and deployed through the staging gate
SCOPING-v1.md TODO resolved
Six clauses on the public site are written for "iPhone build not yet approved"
and need flipping the day it is:
- `Resources/Views/comparison.leaf` — 5
- `Resources/Views/metadata.leaf` — 1
```
$ grep -ic 'once apple approves\|comes to iPhone once\|not yet on iPhone' Resources/Views/*.leaf
comparison.leaf: 5
metadata.leaf: 1
```
Also `flamenet-messenger-ios/SCOPING-v1.md` carries a landing-page TODO waiting
on the TestFlight link.
⚠️ Do not flip these early. Each one is currently accurate.
### Done when
- [ ] Apple approves
- [ ] All six reworded and deployed through the staging gate
- [ ] SCOPING-v1.md TODO resolved
Everything that can be done before Apple is done (!97, merged and deploying).
Approval day, in full
ssh ovh
sudo sed -i 's/^\(\s*\)FN_RELAY_AUDIENCE:/\1FN_IOS_LIVE: "true"\n\1FN_RELAY_AUDIENCE:/' \
/srv/prod/messenger/docker-compose.yaml # or add FN_IOS_LIVE by hand
cd /srv/prod/messenger && sudo docker compose up -d --no-deps relay
No code change, no deploy, no staging gate. Reversible by removing the variable.
What it flips
All seven clauses at once — six in comparison.leaf (the column marker plus the availability sentence) and one in metadata.leaf about group names. Measured on a running relay:
FN_IOS_LIVE unset
FN_IOS_LIVE=true
"Android now"
6
0
"Both apps"
0
6
"once Apple approves"
6
0
metadata.leaf claims
1
0
⚠️The issue said six clauses; there were seven. It drifted between filing and now, which is exactly why this is a flag rather than a list of line numbers — and why the test asserts every "once Apple approves" claim sits inside a gate rather than counting them. A partial flip is no longer possible.
Still to do, and not automatable
Apple approves
All clauses reworded — now one switch, deployed
flamenet-messenger-ios/SCOPING-v1.md TODO — needs the real TestFlight link, which does not exist yet
Leaving this open until Apple actually approves; the remaining work is the flip and the SCOPING link.
Everything that can be done before Apple is done (!97, merged and deploying).
## Approval day, in full
```
ssh ovh
sudo sed -i 's/^\(\s*\)FN_RELAY_AUDIENCE:/\1FN_IOS_LIVE: "true"\n\1FN_RELAY_AUDIENCE:/' \
/srv/prod/messenger/docker-compose.yaml # or add FN_IOS_LIVE by hand
cd /srv/prod/messenger && sudo docker compose up -d --no-deps relay
```
Then check it took:
```
curl -s https://flamenetmessenger.com/comparison | grep -c 'once Apple approves' # expect 0
curl -s https://flamenetmessenger.com/comparison | grep -c 'Both apps' # expect 6
```
No code change, no deploy, no staging gate. Reversible by removing the variable.
## What it flips
All **seven** clauses at once — six in `comparison.leaf` (the column marker plus the availability sentence) and one in `metadata.leaf` about group names. Measured on a running relay:
| | `FN_IOS_LIVE` unset | `FN_IOS_LIVE=true` |
|---|---|---|
| "Android now" | 6 | 0 |
| "Both apps" | 0 | 6 |
| "once Apple approves" | 6 | 0 |
| metadata.leaf claims | 1 | 0 |
⚠️ **The issue said six clauses; there were seven.** It drifted between filing and now, which is exactly why this is a flag rather than a list of line numbers — and why the test asserts every "once Apple approves" claim sits *inside* a gate rather than counting them. A partial flip is no longer possible.
## Still to do, and not automatable
- [ ] Apple approves
- [x] All clauses reworded — now one switch, deployed
- [ ] `flamenet-messenger-ios/SCOPING-v1.md` TODO — needs the real TestFlight link, which does not exist yet
Leaving this open until Apple actually approves; the remaining work is the flip and the SCOPING link.
The six clauses no longer say "once Apple approves", so the grep in the
description returns zero:
$ grep -ic 'once apple approves|comes to iPhone once|not yet on iPhone' \
Resources/Views/comparison.leaf Resources/Views/metadata.leaf
comparison.leaf: 0
metadata.leaf: 0
They were reworded on 2026-09-08 when the TestFlight beta opened, and now read
"Out now on Android, and on iPhone as a TestFlight beta". That is accurate
today and does not need flipping.
What is still waiting on Apple is the final state: FN_IOS_LIVE stays OFF,
because turning it on rewrites those clauses to "Both apps" and "On Android and
iPhone", which states general availability. The trigger for this ticket is now
App Store approval, not the beta.
The six clauses no longer say "once Apple approves", so the grep in the
description returns zero:
```
$ grep -ic 'once apple approves|comes to iPhone once|not yet on iPhone' \
Resources/Views/comparison.leaf Resources/Views/metadata.leaf
comparison.leaf: 0
metadata.leaf: 0
```
They were reworded on 2026-09-08 when the TestFlight beta opened, and now read
"Out now on Android, and on iPhone as a TestFlight beta". That is accurate
today and does not need flipping.
What is still waiting on Apple is the final state: `FN_IOS_LIVE` stays OFF,
because turning it on rewrites those clauses to "Both apps" and "On Android and
iPhone", which states general availability. The trigger for this ticket is now
App Store approval, not the beta.
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.
Six clauses on the public site are written for "iPhone build not yet approved"
and need flipping the day it is:
Resources/Views/comparison.leaf— 5Resources/Views/metadata.leaf— 1Also
flamenet-messenger-ios/SCOPING-v1.mdcarries a landing-page TODO waitingon the TestFlight link.
⚠️ Do not flip these early. Each one is currently accurate.
Done when
mentioned in issue #5
Everything that can be done before Apple is done (!97, merged and deploying).
Approval day, in full
Then check it took:
No code change, no deploy, no staging gate. Reversible by removing the variable.
What it flips
All seven clauses at once — six in
comparison.leaf(the column marker plus the availability sentence) and one inmetadata.leafabout group names. Measured on a running relay:FN_IOS_LIVEunsetFN_IOS_LIVE=true⚠️ The issue said six clauses; there were seven. It drifted between filing and now, which is exactly why this is a flag rather than a list of line numbers — and why the test asserts every "once Apple approves" claim sits inside a gate rather than counting them. A partial flip is no longer possible.
Still to do, and not automatable
flamenet-messenger-ios/SCOPING-v1.mdTODO — needs the real TestFlight link, which does not exist yetLeaving this open until Apple actually approves; the remaining work is the flip and the SCOPING link.
The six clauses no longer say "once Apple approves", so the grep in the
description returns zero:
They were reworded on 2026-09-08 when the TestFlight beta opened, and now read
"Out now on Android, and on iPhone as a TestFlight beta". That is accurate
today and does not need flipping.
What is still waiting on Apple is the final state:
FN_IOS_LIVEstays OFF,because turning it on rewrites those clauses to "Both apps" and "On Android and
iPhone", which states general availability. The trigger for this ticket is now
App Store approval, not the beta.