Sam Goldman
90d · built 2026-09-30
Performance
What Sam Goldman shipped in the selected window, measured in ETV, and how it compares with the 90 days before it.
Effective capacity
+1.1engineers
delivers like 2.1 (2.1x pre-AI)
Output (ETV)
30.2ETV
+110.4% vs 14.4 prior
Features share
21.8%
−11.0 pp vs prior window
Fixes share
12.2%
−2.5 pp vs prior window
Work mix
21.8% Features51% Maintenance14.2% Tests0.8% Docs12.2% Fixes
119 commits over 90 days, ending 2026-09-30.
Where this dev ranks
Percentile against the global top-100 leaderboard (all-time totals).
- By commits
- Top 53 %
- By Features share
- Top 82 %
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.
- 4.6ETVmigrate from lsp-types fork to gen-lsp-types 0.11.0 (#5032) Summary: Pull Request resolved: https://github.com/facebook/pyrefly/pull/5032 Mechanical conversion of `fbcode/pyrefly` off `lsp-types-yangdanny` onto vendored `gen-lsp-types 0.11.0` (`third-party/rust` update is a separate commit). `Cargo.toml`/`BUCK` deps use `lsp_types = { package = "gen-lsp-types", version = "0.11.0", features = ["url"] }` via `named_deps`. Notable API adaptations: `lsp_types::Url` -> `Uri`, flat request/notification types with `R::METHOD.as_str()`, PascalCase enum variants, flattened structs (`VersionedTextDocumentIdentifier`, `SymbolInformation`/`BaseSymbolInformation`), split response enums (`DefinitionResponse`/`TypeDefinitionResponse`/`ImplementationResponse`, single-item `CodeActionResponse`), `WorkspaceEdit.document_changes` as `Vec<DocumentChange>`, plus `SymbolInformation` Flat-golden key reorder (location now serializes first). Reviewed By: dtolnay, kinto0 Differential Revision: D122245430 fbshipit-source-id: ca62079b6315bcddbd49fc6cbb4c3e0affa4d589github.com-facebook-pyrefly · b3bfe98b · 2026-09-29
- 2.1ETVStore bindings in `Answers` Summary: `Step::Answers` had nested shared ownership for bindings and answers even though their lifetimes are identical. Make `Bindings` a direct field of `Answers` and retain `Arc<Answers>` wherever bindings must stay alive, leaving one shared allocation for the step data. Reviewed By: stroxler Differential Revision: D119811728 fbshipit-source-id: 207b3ae1501a276dd139162a8a4c87e47dbf12dbgithub.com-facebook-pyrefly · 3fa1b7e3 · 2026-09-14
- 1.9ETVBorrow calculated answers through solver scopes Summary: This stack eliminates per-answer `Arc` storage to reduce allocation and atomic refcount overhead and improve memory use. After giving provisional SCC answers stable storage, retaining cross-module answer providers, and preserving intentional `TParams` sharing, downstream solver APIs can borrow calculated results directly. This diff changes `AnswersSolver`, `LookupAnswer`, and exported-key solving to return references for completed and provisional calculations. Published results borrow from `Answers` or `Solutions`; provisional SCC results borrow from their retained generation. Truly synthesized shortcut and depth-limit answers are retained by `AnswerScope` so they can use the same scope lifetime. Solver consumers now accept the borrowed values directly. `TParams` consumers can clone the semantic `Arc<TParams>` when constructing shared `TArgs` without copying the underlying parameters. Forward-like producers temporarily use a narrow `get_idx_arc` compatibility API, preserving their existing cheap `Arc` clone without copying `TypeInfo`. A later diff makes these aliases explicit and removes that final owned-result API. Reviewed By: rchen152 Differential Revision: D117087359 fbshipit-source-id: c70410b108d41418a5389a8021ac0fea8e6c9089github.com-facebook-pyrefly · 1e656e20 · 2026-08-26
- 1.3ETVPublish calculation results with atomic status Summary: This stack eliminates per-answer `Arc` storage to reduce allocation and atomic refcount overhead and improve memory use. Its first phase removes the need to clone exported answers one by one when transitioning from Answers to Solutions. To share that storage efficiently, calculating answer cells must become pointer-sized and avoid calculation-only synchronization overhead once published. This diff replaces each calculation mutex and condition variable with atomic publication status. Ordinary results transition directly from unpublished to published, while SCC results use ordered reservations and a short busy-wait when another worker owns a slot. The intended correctness invariant is that workers computing the same recursive component converge on the same SCC. Because every worker reserves members in `CalcId` order and waits on pending reservations, one worker serializes identical contenders and publishes every answer. We retain a weaker fallback because this invariant is not guaranteed: the iteration limit can leave workers with different entrypoint-dependent partial SCCs, and dynamic answer-dependent discovery could theoretically produce different SCCs even after convergence. Each worker therefore attempts every member even if it loses the lowest member, publishes every slot it reserves, and skips results already published or evicted. If workers find disjoint SCCs for the same recursive computation, this can mix results from different workers, potentially producing strange typing behavior; the correctness of that fallback is not proven. The next diff can combine this status with the result pointer, moving answer cells toward the pointer-sized representation needed for shared solution storage. Reviewed By: grievejia Differential Revision: D115246286 fbshipit-source-id: 935a783068cb6199a0091a489ce5b4f8a20464cdgithub.com-facebook-pyrefly · eb3b23a1 · 2026-08-18
- 1.1ETVMake calculation stack pushes panic-safe Summary: Stable SCC answer storage will allow solver operations to return borrowed results, but calculation evaluation may still unwind while its `CalcId` is present on the thread-local stack. Leaving that entry behind also leaves the `position_of` reverse index inconsistent for any code that catches the panic. Represent each pushed calculation with a small RAII guard. Normal completion consumes the guard while taking a completed SCC; unwinding drops it and restores both stack indexes. The guard owns no answers and imposes no lifetime boundary on result references. Reviewed By: stroxler Differential Revision: D115772355 fbshipit-source-id: 5d9b300b5a50c5825723cf10a597ba03577d31d4github.com-facebook-pyrefly · 378c432b · 2026-08-19
- 0.9ETVStore calculation results in tagged box pointers Summary: The broader goal of this stack is to eliminate the `Arc` stored for every calculation result, reducing allocation, atomic refcount, and memory overhead. Earlier diffs made published and provisional answers borrowable and removed downstream dependencies on Arc ownership. This diff replaces permanent per-answer `Arc` storage with `Box` allocations. Each result slot is a single atomic pointer whose low bits independently record whether publication is pending and whether the pointer is a non-owning alias. Untagged pointers own their allocation, while alias slots point at an owning slot in the same result table. Because the table retains and drops all of its slots together, aliases can share an answer without refcount operations or double-freeing the allocation. An aligned wrapper guarantees the two tag bits for every answer type. The pointer directly addresses the answer, avoiding the arena lookup and metadata required by compact integer slots. SCC generations already own boxed answers, so final publication transfers those boxes into their result slots without copying the answer. Reviewed By: grievejia Differential Revision: D117087366 fbshipit-source-id: f857a696951a296cfd1ccd7bf8d202f991611399github.com-facebook-pyrefly · 9284873b · 2026-08-27
- 0.7ETVRetain provisional answer generations in solver scopes Summary: This stack eliminates per-answer `Arc` storage to reduce allocation and atomic refcount overhead. SCC provisional answers are one remaining source of per-answer ownership: borrowing them requires their generation storage to remain stable even when SCC stack mutations release the original owner. This diff introduces `AnswerScope`, an append-only owner that retains each borrowed generation at most once. Each top-level binding and SCC iteration gets a scope, and temporary cross-module solver views share it. Provisional answer references are tied to the scope lifetime, so they remain valid independently of SCC stack mutations without unsafe code or calculation-wide answer retention. The values remain `Arc`-backed for now; this establishes the ownership boundary needed to replace them with boxes later. Reviewed By: stroxler Differential Revision: D115789811 fbshipit-source-id: b15e1263cc1dfc5fa0fb397ba0743431821b3a58github.com-facebook-pyrefly · 5e1672f8 · 2026-08-26
- 0.7ETVEliminate project tree scans from venv discovery Summary: Pyrefly discovered project virtual environments by enumerating Python-looking executables below the project root and then checking whether they belonged to a virtual environment. Even with directory pruning, this performed unnecessary synchronous filesystem traversal before type checking began. Find `pyvenv.cfg` at bounded conventional locations in each project ancestor, then derive the interpreter from standard platform paths. A real config root or the inferred import root now consistently anchors virtualenv and `typings/` discovery across CLI and LSP workflows. Preserve `.venv`, `venv`, `env`, symlinked environments, and nearest-ancestor lookup while rejecting arbitrary nested environment names. This removes the generic walker and its `walkdir` dependency. Conda now probes standard interpreter locations from the environment prefix. Besides removing the walker, this fixes active `CONDA_PREFIX` discovery on macOS and Linux and named `--conda-environment` discovery on Windows. Reviewed By: grievejia Differential Revision: D115531084 fbshipit-source-id: 6c0a1216c374bf7a43179c176a2eeaa7018eacddgithub.com-facebook-pyrefly · ef9e9a0e · 2026-08-18
- 0.6ETVShare exported result storage with solutions Summary: This stack eliminates per-answer `Arc` storage to reduce allocation and atomic refcount overhead and improve memory use. The first phase addresses one reason every answer needed an Arc: transitioning from Answers to Solutions previously copied exported results one by one by cloning each result Arc. With pointer-sized answer slots available, this diff constructs exported `SolutionsData` during the Answers phase and routes exported keys directly into it. The transition to Solutions now clones one `Arc<SolutionsData>` instead of every exported answer individually. Results remain Arc-backed for now, but this removes the phase-transition dependency on per-answer Arc ownership. Reviewed By: grievejia Differential Revision: D115246289 fbshipit-source-id: 5e4f03304b2164b9d819e639a9a5e44a1440bad3github.com-facebook-pyrefly · 0b0f577e · 2026-08-19
- 0.6ETVReturn calculated answers by value Summary: This stack eliminates per-answer `Arc` storage to reduce allocation and atomic refcount overhead and improve memory use. Once consumers borrow calculated results, producer helpers should also stop encoding the temporary Arc-backed storage policy in their return types. This diff makes calculation helpers return plain values and leaves the result-storage boundary responsible for wrapping them in the current Arc owner. Behavior and storage remain unchanged, but calculation code is now independent of the wrapper that the final conversion will replace with `Box`. Reviewed By: grievejia Differential Revision: D117087365 fbshipit-source-id: 75ede7dc612f9fbff0bfbb522c8b2278f17a2c13github.com-facebook-pyrefly · d1bce59f · 2026-08-27