Skip to content

Document the user-facing changes from the last few releases - #66

Merged
GenericJam merged 1 commit into
masterfrom
docs/document-recent-user-facing-changes
Sep 5, 2026
Merged

Document the user-facing changes from the last few releases#66
GenericJam merged 1 commit into
masterfrom
docs/document-recent-user-facing-changes

Conversation

@GenericJam

Copy link
Copy Markdown
Owner

Four things shipped without reaching any user-facing doc — each findable only by reading source or a CHANGELOG entry.

mix mob.mutate had no README entry at all. The new section says plainly that it rewrites source files in place, why it refuses to run on a dirty tree, and why roughly a third of Elixir line-deletions land in "did not build" rather than being real kills.

mix mob.deploy's exit status changed materially and was documented nowhere. It now fails on a failed device, on every device of a named platform being skipped, on a named --device that got nothing, and on --native building nothing for a platform you asked for — while a plain run with an unrelated phone attached still exits 0. Anyone with CI around this needs to know which of those apply to them.

Unknown options are now refused rather than ignored, which is breaking for anyone who had a typo in a script and never noticed, and -d now means --device where it previously meant nothing.

:ios_bundle_id existed only in AGENTS.md and a decision record, so the one audience who needs it — someone publishing to TestFlight whose Android applicationId contains an underscore Apple will reject — could not find it. It now sits in the TestFlight guide immediately after the section telling you to pick a real bundle id, which is where the problem is first met. A review flagged this gap on PR #44 and it went unaddressed until now.

Also adds Mob.Test.capabilities/1 to the agent section.

mix mob.attest is deliberately not here — its docs ride with PR #65, which adds the task.

@GenericJam

Copy link
Copy Markdown
OwnerAuthor

Rebased onto master and corrected: this branch was written before #67 landed, so it documented the old error wording and missed two things that shipped with it.

  • The message now distinguishes an unrecognised flag from a recognised one with a bad value, so "Unknown option(s)" was wrong.
  • Positional arguments are refused too — mix mob.deploy --native ABC123 used to parse cleanly and deploy everywhere.
  • Added the --beam-flags note: both the spaced and equals spellings work, and before Fix the deploy regression strict parsing shipped: --beam-flags no longer works #67 the spaced one silently dropped the flags.

A doc branch describing behaviour that changed under it is its own small version of the problem this whole thread has been about, so worth catching before merge rather than after.

@GenericJam
GenericJamforce-pushed the docs/document-recent-user-facing-changes branch from 894a65c to d64b089CompareSeptember 5, 2026 14:39
@GenericJam

Copy link
Copy Markdown
OwnerAuthor

Adversarial review done and acted on. It found two code defects behind the docs, not just doc errors — both mine, and both now fixed in #68:

  • mix mob.uninstall never honoured :ios_bundle_id. The task pre-resolved one id for both platforms, so the || in resolve_apps_for_device/3 short-circuited past the per-platform clause, making it dead code on every real invocation. My test passed an opts shape the task never sends, which is why the suite stayed green.
  • mix mob.deploy's error told users a dash-prefixed value needs the equals form — false since join_dashed_values/1 landed in the same commit as that advice. My README then repeated the false rule and contradicted its own example two lines below.

Doc fixes here:

  • --native bullet now says the failure only fires for a platform you named; a plain --native that skips one nobody asked for still exits 0, which is the case a first-time user hits.
  • Added the missing exit-1 case: you named a platform and no device of it was connected (also what --ios on Linux does).
  • --json: documented outcome and message, since outcome is what a script actually branches on.
  • Mutate: exit status, the per-run cost (mutations × suite), --base (defaults to origin/master, so it dies on a main repo), --max, that --file is repeatable and covers the whole file, and all three operators rather than just deletion.
  • The dirty-tree note now says the part that matters: in default mode it will essentially always refuse until you commit, because the lines it targets are the ones you just changed.
  • Sample survivor pointed at a comment line, which cannot produce a mutant. Replaced with a synthetic path.
  • TestFlight guide: it contradicted §1.2 immediately below it. The build stamps CFBundleIdentifier from :ios_bundle_id, so the plist edit is not needed — a reader would otherwise set both and not know which wins. Also dropped mix mob.uninstall from the "everywhere" list until Make mob.uninstall actually honour :ios_bundle_id, and stop the deploy error lying #68 makes it true.
  • Heading renamed to "Exit status and argument handling" (what it covers, and it will not go stale), and dropped the self-assessment about being "useless as a CI gate".

Blocked on #68 for the mob.uninstall line, which I will restore once that merges.

@GenericJam
GenericJamforce-pushed the docs/document-recent-user-facing-changes branch from d64b089 to d279f89CompareSeptember 5, 2026 15:00
Four things shipped without reaching any user-facing doc. Each was findable
only by reading source or a CHANGELOG entry.
`mix mob.mutate` had no README entry at all. It rewrites source files in
place, so the section says that plainly, along with why it refuses to run on a
dirty tree and why roughly a third of Elixir line-deletions land in "did not
build" rather than being real kills.
`mix mob.deploy`'s exit status changed materially and was documented nowhere.
It now fails on a failed device, on every device of a *named* platform being
skipped, on a named `--device` that got nothing, and on `--native` building
nothing for a platform you asked for — while a plain run with an unrelated
phone attached still exits 0. Anyone with CI around this needs to know which
of those apply to them.
Unknown options are refused rather than ignored, which is a breaking change
for anyone who had a typo in a script and never noticed, and `-d` now means
`--device` where it previously meant nothing at all.
`:ios_bundle_id` existed only in AGENTS.md and a decision record, so the one
audience who needs it — someone publishing to TestFlight whose Android
applicationId contains an underscore Apple will reject — could not find it. It
now sits in the TestFlight guide immediately after the section that tells you
to pick a real bundle id, which is where the problem is first met.
Also adds `Mob.Test.capabilities/1` to the agent section, since choosing a
driving strategy before discovering a probe is unavailable is the entire point
of it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@GenericJam
GenericJamforce-pushed the docs/document-recent-user-facing-changes branch from d279f89 to ae56a0aCompareSeptember 5, 2026 15:02
@GenericJam
GenericJam merged commit 6e1d1dc into masterSep 5, 2026
3 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@GenericJam