Rebecca Chen
90d · built 2026-09-08
Performance
What Rebecca Chen shipped in the selected window, measured in ETV, and how it compares with the 90 days before it.
Effective capacity
+0.5engineers
delivers like 1.5 (1.5x pre-AI)
Output (ETV)
28.5ETV
+11.0% vs 25.7 prior
Features share
11.2%
−2.8 pp vs prior window
Fixes share
31.6%
+4.1 pp vs prior window
Work mix
11.2% Features45.4% Maintenance9.9% Tests1.9% Docs31.6% Fixes
219 commits over 90 days, ending 2026-09-08.
Where this dev ranks
Percentile against the global top-100 leaderboard (all-time totals).
- By commits
- Top 1 %
- By Features share
- Top 90 %
Daily performance
Daily ETV, stacked by Features, Maintenance, Tests, Docs and Fixes.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 10 by ETV in the last 90 days.
- 1.9ETVMove tests to end of solver.rs Summary: Moves a `mod test {...}` that was sandwiched in the middle of a file. No other changes. Reviewed By: grievejia Differential Revision: D115827083 fbshipit-source-id: e1307a251debc80a27043ba6cbc7523d4faf6645github.com-facebook-pyrefly · f40c4dc9 · 2026-08-13
- 1.2ETVStop nested classes from using an outer class's scoped type parameters Summary: PEP 695-style type parameters declared by a class are not available inside a nested class, but Pyrefly allowed them in bases, defaults, and annotations. Record which names are class type parameters and stop lookup when it reaches one from an outer class, so the invalid use is reported. Reviewed By: grievejia Differential Revision: D115705194 fbshipit-source-id: f2657c711e7e9b25493d779954e9084c94f16172github.com-facebook-pyrefly · c10877fd · 2026-08-18
- 0.9ETVTake narrowed facets' new `present` bit into account in subscript inference Summary: When a dict key facet is known to be present due to an `in` check, suppress errors on key access about the key possibly being absent. Adds a regression test for a tricky corner case that an earlier draft got wrong: overwriting the value should not affect presence. Note that this updates subscripting to handle the `present` bit correctly but does not yet update `narrow.rs` to *set* the `present` bit, so user-facing behavior is not yet fixed. Reviewed By: yangdanny97 Differential Revision: D107801901 fbshipit-source-id: 2854cab22c0ec167edb48fca8111c0d8e2c8d8efgithub.com-facebook-pyrefly · e13a8135 · 2026-06-10
- 0.8ETVKeep inferred types from the selected overload Summary: When a higher-order call selected one overload, type information learned while checking that overload was discarded. This could leave internal placeholder types in results such as `list(map(list, rows))`. Recheck the selected overload after choosing it so the inferred nested types are kept, while multiple possible overloads remain separate. Reviewed By: grievejia Differential Revision: D115799014 fbshipit-source-id: 6e5b6de2a1cef832d866ea88f25d2437a69bfb19github.com-facebook-pyrefly · 4db7b0d2 · 2026-08-17
- 0.8ETVUpdate conformance sources Summary: Pyrefly's score goes down a bit because variance for TypeVarTuple and ParamSpec landed, which pyrefly does not yet support. Reviewed By: samwgoldman Differential Revision: D115950269 fbshipit-source-id: 4751524f7d637b01419226c773b81ac019289674github.com-facebook-pyrefly · cb5b3c77 · 2026-08-14
- 0.7ETVPrefer to insert `from` imports Summary: The previous diffs in this stack made it so that when we double-click on an inlay hint to import it, we also insert any required imports. However, the implementation defaulted to inserting `import foo` and `foo.X`, even though the hint shows `X` unless the module name is needed for disambiguation. This diff makes it so that we prefer to insert `from foo import X` and `X`. We still reuse `import foo` if it already exists in the file. Reviewed By: yangdanny97 Differential Revision: D114664767 fbshipit-source-id: 2c3ba897507b95750fb6fb7e31d5438a8ad16393github.com-facebook-pyrefly · 785a3d54 · 2026-08-05
- 0.7ETVSplit pyrefly_types/src/callable.rs into two files Summary: `callable.rs` was getting really long. This diff splits out a new `function.rs` (named so because it contains `FuncMetadata`, `FuncFacts`, etc.) and updates import paths accordingly, with no other changes. Reviewed By: maggiemoss Differential Revision: D114987156 fbshipit-source-id: 5dfec425605fbf2d7807f045bc50839c9446275egithub.com-facebook-pyrefly · fea518f9 · 2026-08-06
- 0.6ETVMake fields of `Tuple::Unpacked` private Summary: This is the second time (that I remember) that I've had to fix a subtle bug caused by direct construction of `Tuple::Unpacked`. Let's just make it impossible to construct directly. Note for reviewing: the only interesting parts of this change are in `crates/pyrefly_types/src/tuple.rs`, where I've added an `UnpackedTupleParts` struct with a few accessors. The rest is just mechanically rewriting code to use the accessors. Reviewed By: yangdanny97 Differential Revision: D115503925 fbshipit-source-id: c5a013b7f802d8cd2351df9200151c5ee9900086github.com-facebook-pyrefly · 477d0f94 · 2026-08-11
- 0.5ETVSeparate synthesized and non-synthesized functions in `FunctionKind` Summary: `FunctionKind::Def` represented both functions defined in the source code and callables synthesized by the type checker. The latter have no source definition, which forced `FuncId` to carry an optional definition index. This diff gives synthesized callables a separate `FunctionKind::Synthesized` identity and makes the definition index non-optional on non-synthesized functions. This makes source identity an invariant of the type rather than a convention. `FuncId` is renamed to `FuncDefId` to make it more obvious that we're dealing with source definitions and to match `FuncDefIndex`'s naming convention. This prepares `FuncDefId` to carry richer source information. Concretely: ```diff - pub struct FuncId { + pub struct FuncDefId { - pub def_index: Option<FuncDefIndex>, + pub def_index: FuncDefIndex>, ... } + pub struct FuncSymbol { + module: Module, + cls: Option<Class>, + name: Name, + } pub enum FunctionKind { Def(Arc<FuncDefId>), + Synthesized(Arc<FuncSymbol>), ... } impl FunctionKind { - fn definition_id(&self) -> Option<&FuncId> { ... } + fn to_func_symbol(&self) -> Option<FuncSymbol> { ... } + fn as_func_def_id(&self) -> Option<&FuncDefId> { ... } } ``` Context: This is part of a small stack whose goal is to make non-synthesized functions store `QName`. On its own, this is already a nice simplification that unifies how functions and classes store identity. It will also enable further refactors to make pyrefly use resolved source symbols rather than passing around strings everywhere, which will in turn make it easier to create clear code boundaries between the core type checker and third-party library support. Reviewed By: grievejia Differential Revision: D114987025 fbshipit-source-id: c6a952433f882f2979a8d87cbd902f2d756f5099github.com-facebook-pyrefly · e7eb8d2a · 2026-08-07
- 0.5ETVIdentify overload witnesses by arg index, not type hash Summary: Overload witnesses used a hash of an argument's type as its identity, which meant that arguments with the same type could not be told apart. Fixed by using argument index instead. Reviewed By: stroxler Differential Revision: D117467832 fbshipit-source-id: 8750e2a7722943eebc2b3ad070798fe6bea4d290github.com-facebook-pyrefly · cc57f151 · 2026-09-01