Skip to content

tae-conversion: add host-side toolchain for Fenix ui/efficiency conve… - #424

Open
jjSDET wants to merge 1 commit into
mainfrom
tae-conversion-toolchain
Open

tae-conversion: add host-side toolchain for Fenix ui/efficiency conve…#424
jjSDET wants to merge 1 commit into
mainfrom
tae-conversion-toolchain

Conversation

@jjSDET

@jjSDET jjSDET commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

tae-conversion: host-side toolchain for Fenix ui/efficiency conversions

Branch: tae-conversion-toolchainmain
Repo: mozilla-mobile/testops-tools

What

Adds tae-conversion/ — the eff* toolchain that closes the AI-assisted conversion
loop for Fenix UI tests moving onto the ui/efficiency framework:

pick a candidate → scaffold from the legacy test → static pre-flight → build/run on a
device → read a structured verdict → file, commit, submit.

tae-conversion/
├── tools/              11 tools + .eff.env.example + the done-ledger
├── docs/               CONVERSION-LOOP, CONVERSION-LESSONS, HARNESS-GOTCHAS
└── conversion-runs/    queue protocol + prioritized candidate pool

Why here

These tools run on the engineer's machine and talk to a device, Bugzilla, and
Phabricator. The agent's sandbox can reach none of that, so effwatch.sh bridges the
two: it polls a queue directory and runs only a fixed, whitelisted command — never
arbitrary text from a request file.

That makes this infra tooling, not something to ship inside an agent plugin. The
companion PR to mozilla/firefox-aidev-plugins adds the three tae skills that drive
these tools by name.

Deliberately excluded

  • effpretty and effview ship in-tree under ui/efficiency/devtools/. They're
    device-side dump tools, so in-tree is their single source of truth — duplicating them
    here would create a sync problem.
  • The end-of-day project-tracker runbook. It's specific to one team's Google Sheet,
    Slack channel, and Jira tree rather than to this toolchain, and it carried a live
    Sheet ID. This repo is public. The one genuinely reusable part — refreshing the
    done-ledger with reconcile_conversion.py — is documented in the README instead.

Scrubbed for publication

Was Now
effbug.py hardcoded a tracking epic in every filed bug's footer Reads EFF_EPIC; omits the note when unset
effbug.py example used a real assignee address Genericized
effsubmit.py hardcoded default reviewers Defaults to EFF_REVIEWERS, warns when unset
effloop.sh / effwatch.sh wrote to a personal scratch directory Default to tae-conversion/conversion-runs
Nothing ignored the Bugzilla API key file .gitignore covers tools/.eff.env plus disposable run artifacts

Confirmed no API keys, tokens, absolute home paths, Sheet IDs, or Slack channel IDs in
the committed tree.

Freshness

Sources were taken from the live working copies, not an earlier staging snapshot that
had drifted (effloop.sh by 129 lines, effbug.py by 20, effsubmit.py by 7;
HARNESS-GOTCHAS.md by 126 and CONVERSION-LESSONS.md by 99).

The done-ledger was regenerated against current mozilla-central: 72 of 174 smoke tests
converted
(67 annotated with @Converted, 5 in flight). The previously staged ledger
was four rows stale.

docs/HARNESS-GOTCHAS.md carries A1–A15 and B1–B11 and notes explicitly that the
in-tree docs/gotchas.md currently stops at A8/B8 — this copy runs ahead while entries
are still being confirmed.

Verification

  • All 9 Python tools byte-compile; both shell scripts pass bash -n.
  • effnext.py, effcheck.py, and reconcile_conversion.py were run from this layout
    against a real Fenix checkout. effcheck returns [PASS] statically clean on a landed
    converted test; effnext correctly reports 166 pooled / 89 done / 95 pending.
  • Not exercised: effloop/effwatch/effbug/effgit/effsubmit, which need a
    connected device, a Bugzilla key, or moz-phab.

…rsions

The eff* toolchain that closes the AI-assisted conversion loop for Fenix UI tests
moving onto the ui/efficiency framework: pick a candidate, scaffold from the legacy
test, static pre-flight, build and run on a device, read a structured verdict, then
file/commit/submit.

These run on the engineer's machine. The agent's sandbox cannot reach a device,
Bugzilla, or Phabricator, so effwatch.sh bridges the two by polling a queue
directory and running only a fixed, whitelisted command.

Layout:
- tools/          11 tools plus .eff.env.example and the done-ledger
- docs/           CONVERSION-LOOP, CONVERSION-LESSONS, HARNESS-GOTCHAS
- conversion-runs/  queue protocol and the prioritized candidate pool

Deliberately not included:
- effpretty and effview ship in-tree under ui/efficiency/devtools/ — they are
  device-side dump tools, so in-tree is their single source of truth.
- The end-of-day project-tracker runbook. It is specific to one team's Sheet,
  Slack channel, and Jira tree rather than to this toolchain, and this repo is
  public.

Scrubbed for publication:
- effbug.py took a hardcoded tracking epic; now reads EFF_EPIC and omits the note
  when unset. Example assignee genericized.
- effsubmit.py had hardcoded default reviewers; now defaults to EFF_REVIEWERS and
  warns when neither that nor --reviewers is set.
- effloop.sh and effwatch.sh defaulted their output root to a personal scratch
  directory; now default to tae-conversion/conversion-runs.
- .gitignore covers tools/.eff.env (holds a Bugzilla API key) and the disposable
  run artifacts.

The done-ledger was regenerated against current mozilla-central: 72 of 174 smoke
tests converted, 67 annotated with @converted and 5 in flight.

Verified: every tool byte-compiles, and effnext, effcheck, and reconcile_conversion
were run against a real Fenix checkout from this layout.
Sign up for free to 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