Context
#310 happened because firebase-functions@7.x changed the emitted wrapper shape (rest-param functions, run.length === 0) and nothing in CI noticed: devDeps pin firebase-functions: ^4.9.0, so the suite only ever runs against 4.9.0 while the peer range allows >=4.9.0.
The regression test added in #311 simulates the v7 shape with hand-built mocks. That's the right thing for a unit test, but mocks encode our belief about the dependency's shape; if a future major changes the shape again, the mocks stay green while wrap() breaks for users, same failure mode as #310.
Proposal
Add a CI matrix dimension installing multiple firebase-functions majors (at minimum: lowest supported 4.9.0 and latest 7.x) and run the unit + integration suites against each. Alternative: a second install step swapping in latest before a re-run.
Detection-focused: the goal is that the next arity/shape drift in firebase-functions fails a build here instead of shipping.
Context
#310 happened because firebase-functions@7.x changed the emitted wrapper shape (rest-param functions,
run.length === 0) and nothing in CI noticed: devDeps pinfirebase-functions: ^4.9.0, so the suite only ever runs against 4.9.0 while the peer range allows>=4.9.0.The regression test added in #311 simulates the v7 shape with hand-built mocks. That's the right thing for a unit test, but mocks encode our belief about the dependency's shape; if a future major changes the shape again, the mocks stay green while
wrap()breaks for users, same failure mode as #310.Proposal
Add a CI matrix dimension installing multiple firebase-functions majors (at minimum: lowest supported 4.9.0 and latest 7.x) and run the unit + integration suites against each. Alternative: a second install step swapping in latest before a re-run.
Detection-focused: the goal is that the next arity/shape drift in firebase-functions fails a build here instead of shipping.