Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .agents/queues/parallel-e2e-lifecycle-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
type: WorkQueue
title: Parallel e2e lifecycle adversarial review
ephemeral: true
timestamp: 2026-07-19T18:34:00Z
---

# Parallel e2e lifecycle — adversarial review

**IN PROGRESS:** (none — item complete)
**Next pickup:** (none)
**Current snapshot:** P5-1..P5-4 closed; committing with subject below

## Gates

| Item | Status |
|------|--------|
| P5-1/2 ELI14 + lifecycle | closed |
| P5-3 3×3 validation | **pass** (android 1478 / ios 1448 / macos 1275) |
| P5-4 findings docs | closed |
| commit | closed |
| `commit_subject` | `docs(e2e): ELI14 parallel design + slot-scoped lifecycle` |
| `implementation_gate` | closed |
| `review_gate` | closed |
| `coverage_evidence_gate` | n/a (docs/scripts/harness config; no packages lib/native) |
| `commit_gate` | closed |

## Notes

- P5-3 evidence: 3× android / 3× ios / 3× macos parallel slotted runs green.
- P5-4 remediations: `--devices`/pods/first-use docs aligned with scripts.
- Untracked `mellifera/` and mellifera helper scripts left out of this commit (separate experiment).
47 changes: 47 additions & 0 deletions .agents/queues/pr-9099-russell-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
type: WorkQueue
title: PR 9099 adversarial findings remediation
ephemeral: true
---

# PR 9099 — adversarial findings (R3)

> **DONE:** R3 — all gates closed; review approved
> **Next pickup:** done

| Item | Scope | `commit_subject` (target amend) | `implementation_gate` | `review_gate` | `coverage_evidence_gate` | `commit_gate` | `next_work_type` | `validation_tier` | Notes |
|------|-------|----------------------------------|----------------------|---------------|--------------------------|---------------|------------------|-------------------|-------|
| R3-A | #1 #4 #8 helpers static env + jet/metro precedence | `test(e2e): make all contentious e2e resources configurable` | closed | closed | n/a* | closed | done | `area-focused` | *helpers are e2e JS under packages/app/e2e — not lib; coverage n/a unless review says otherwise |
| R3-B | #2 #3 #5 #7 check/release + preflight + stale JSON | `test(e2e): add env-aware host check and release scripts` | closed | closed | n/a | closed | done | `area-focused` | A/B fixed — SIGTERM-immune metro recheck evidence |
| R3-C | #6 ORG_GRADLE Android Metro wiring | `test(e2e): make all contentious e2e resources configurable` (scripts/docs as needed) | closed | closed | n/a | closed | done | `area-focused` | Wire into android test scripts + env docs |

## Findings status
### #1–#8 — fixed (implementation closed)
1–8 addressed in prior R3 implementation.

### Findings A/B — fixed (implementation closed)
- **Finding A:** release recheck without `--services` — fixed; SIGTERM-immune metro recheck evidence
- **Finding B:** `--mellifera` flag clobbered by child check — fixed; SIGTERM-immune metro recheck evidence

## Amend policy
Folded via fixup + autosquash onto `origin/main`. Final history remains exactly 3 commits with subjects:
1. `test(e2e): make all contentious e2e resources configurable`
2. `test(macos): e2e run completion detection fixes`
3. `test(e2e): add env-aware host check and release scripts`

## Current gates
- next_work_type: done
- validation_tier: area-focused
- implementation_gate: closed
- review_gate: closed (approved)
- commit_gate: closed
- coverage_evidence_gate: n/a

## Validation evidence (compact)
- lint: pass
- jest: 12/12 pass
- babel smoke: pass
- check default vs `--services`: pass (default ≠ Metro/emulator BUSY)
- macos / ios / android: exit 0
- A/B: SIGTERM-immune metro recheck evidence recorded
- independent review: approved
26 changes: 26 additions & 0 deletions .github/workflows/scripts/firebase.emulator.template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"name": "react-native-firebase-testing",
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"functions": {
"predeploy": ["cd functions && yarn", "cd functions && yarn --cwd \"$RESOURCE_DIR\" build"],
"source": "functions",
"ignore": [".yarn", "yarn.lock", "*.log", "node_modules"]
},
"database": {
"rules": "database.rules"
},
"storage": {
"rules": "storage.rules"
},
"emulators": {
"auth": { "port": 9099 },
"database": { "port": 9000 },
"firestore": { "port": 8080 },
"functions": { "port": 5001 },
"storage": { "port": 9199 },
"ui": { "enabled": false }
}
}
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,8 @@ google-services.json
GoogleService-Info.plist

tests/harness.overrides.js
tests/e2e-slots.env.json
.github/workflows/scripts/.e2e-emulator-*.json

# RNFB TurboModule codegen — misplaced iOS provider stubs under Android output paths
# (NewArch-AD-5: okf-bundle/new-architecture/architecture-decisions.md — commit generated
Expand Down
1 change: 1 addition & 0 deletions okf-bundle/ci-workflows/other.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ URL: http://localhost:8081/index.bundle?platform=macos&...&inlineSourceMap=false
```bash
rg 'Could not connect to development server|HTTP load failed|Jet client connected|macOS Metro bundle prefetched' detox-step.log syslog.log
log show --predicate 'process == "io.invertase.testing"' --last 10m --style compact | rg 'development server|HTTP load failed'
# Slotted concurrent macOS: substitute RNFB_MACOS_PRODUCT_NAME (e.g. io.invertase.testing.s1)
```

### CI failure: `tryDeserialize is not a function` (mocha-remote-server patch)
Expand Down
3 changes: 2 additions & 1 deletion okf-bundle/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ okf_version: '0.1'
- [Agent command policy](/testing/agent-command-policy.md) — allowlisted shell commands for agents (install, prepare, validation, e2e)
- [Change authoring workflow](/testing/change-authoring-workflow.md) — verified product change loop (unit-focused → area-focused review → commit); [§ validation evidence (blocking)](testing/change-authoring-workflow.md#validation-evidence-blocking); [coverage evidence package](testing/coverage-design.md#coverage-evidence-package)
- [Iteration vocabulary](/testing/iteration-vocabulary.md) — work type, tier, and queue field identifiers
- [Running e2e tests](/testing/running-e2e.md) — canonical e2e commands, narrowing, environment, diagnosis
- [Running e2e tests](/testing/running-e2e.md) — canonical e2e commands, narrowing, environment, diagnosis; [§ slot lifecycle](testing/running-e2e.md#slot-lifecycle)
- [E2e parallel design](/testing/e2e-parallel-design.md) — resources, why serialization, parameterization, coordinator rollout
- [Validation checklist](/testing/validation-checklist.md) — compile, Jest, lint, `compare:types`, e2e, coverage
- [Coverage design](/testing/coverage-design.md) — unit/e2e coverage policy, native gates, Codecov
- [Firebase testing project](/testing/firebase-testing-project.md) — cloud vs emulator, live FIS/RC, helper callables, rules/indexes, deploy
Expand Down
13 changes: 11 additions & 2 deletions okf-bundle/testing/agent-command-policy.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ Single source for **which shell commands agents may run** in this repo. E2e is a
| Docs lint (when docs in diff) | `yarn lint:markdown`, `yarn lint:spellcheck` | ad-hoc prettier/eslint on single files |
| E2e + coverage | [running e2e](running-e2e.md) — **only** `yarn tests:*` | `jet`, `npx jet`, `yarn jet`, `detox test`, `cd tests && …`, direct Metro/emulator starts |
| iOS Detox framework cache rebuild | `yarn tests:ios:detox-framework-cache:rebuild` | `cd tests && yarn detox clean-framework-cache`, `cd tests && yarn detox build-framework-cache`, bare `detox …` |
| Host pre-flight (before each `:test-cover`) | [running e2e § host-clear probes](running-e2e.md#host-clear-probes) | `pgrep`, polling `:8090`, spawn probes of Jet/Detox |
| Host pre-flight (before each `:test-cover`) | [running e2e § host-clear probes](running-e2e.md#host-clear-probes) — `bash scripts/e2e/check-e2e-resources.sh` / `bash scripts/e2e/release-e2e-resources.sh` | ad-hoc `pgrep` / hardcoded `:8090` only; improvised kill lists |
| Slotted parallel env / packager / `:test-cover` | [running e2e § slot lifecycle](running-e2e.md#slot-lifecycle) — `export-slot-env.sh`, `check-e2e-resources.sh` / `release-e2e-resources.sh` (with env loaded = slot-scoped), `start-emulator-slotted.sh`, `run-slotted-packager.sh`, `yarn tests:<platform>:build`, `run-slotted-test-cover.sh` (or yarn `tests:e2e:export-slot-env` / `tests:e2e:slotted-*`) | ad-hoc port math; `.r4-*` scratch launchers; hardcoding `io.invertase.testing` for concurrent macOS; unscoped release while another slot is running |

### Prepare / transpile (detail)

Expand Down Expand Up @@ -77,13 +78,21 @@ Single source for **which shell commands agents may run** in this repo. E2e is a
| `cd packages/<pkg> && yarn prepare` / `yarn run build` | Same trap; not the postinstall / lerna code path |
| `yarn jet`, `npx jet`, `cd tests && yarn jet …` | [E2e agent rule](running-e2e.md#agent-rule-read-first) |
| `detox test`, `cd tests && detox …` | E2e agent rule |
| Ad-hoc Metro / emulator start | Use `yarn tests:packager:jet`, `yarn tests:emulator:start` |
| Ad-hoc Metro / emulator start | Use `yarn tests:packager:jet`, `yarn tests:emulator:start`. Does **not** forbid allowlisted `run-slotted-packager.sh` / `start-emulator-slotted.sh` ([registry](#canonical-registry)) |
| Spawn / PATH probes to “test” Jet or genversion | Log triage only; fix product code and re-run canonical command |

## Known traps

<a id="known-traps"></a>

<a id="shell-sandbox-permissions"></a>

### Cursor Shell sandbox / permissions

When a Shell command returns with **no exit status** (e.g. "execution backend unavailable") under default sandbox permissions, retry the **same** canonical command with `required_permissions: ["all"]` — do **not** invent an alternate command because the sandboxed attempt failed to start.

Local e2e (`yarn tests:*:test-cover`), the packager, emulator start, native builds, and host pre-flight probes that need real devices/simulators typically need unrestricted permissions on this host. A "no exit status" result on those commands is a sandbox artifact, not evidence the run failed or is incomplete — see [running e2e § running one iteration](running-e2e.md#running-one-iteration) for checking the tee log footer before concluding anything from a missing exit code.

### genversion / prepare paths

- **`genversion` exists** at root `node_modules/.bin` after `yarn`.
Expand Down
2 changes: 1 addition & 1 deletion okf-bundle/testing/change-authoring-workflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ Keep **`implementation`** and **`independent-review`** in separate passes. E2e e

On a shared dev host during change authoring:

- One `:test-cover` at a time — never overlap **unit-focused**-tier and **area-focused**-tier runs.
- One unslotted `:test-cover` at a time — never overlap **unit-focused**-tier and **area-focused**-tier runs. Slotted cross-platform concurrency (distinct worktrees/ports/devices): [running e2e § parallel topology](running-e2e.md#parallel-e2e-topology).
- Every run starts from [running e2e § pre-flight](running-e2e.md#pre-flight-is-the-host-clear-to-start) (host-clear probes, services, harness tier).
- Use only [canonical e2e commands](running-e2e.md#rules). Stalled runs → [stalled run detection](running-e2e.md#stalled-run-detection).

Expand Down
Loading
Loading