Sam De Roeck
90d · built 2026-07-24
90-day totals
- Commits
- 80
- Grow
- 18.3
- Maintenance
- 9.1
- Fixes
- 1.7
- Total ETV
- 29.1
Where this dev ranks
Percentile against the global top-100 leaderboard (all-time totals).
- By commits
- Top 92 %
- By Growth share
- Top 3 %
30-day trajectory
Last 30 days vs. the 30 days before. Up arrows on Growth and ETV mean improvement; up arrow on Fixes share means more time on fixes (worse).
↑+244.4 %
vs 18 prior
↑+36.3 pp
recent vs prior
↓-20.6 pp
recent vs prior
Daily performance
Daily ETV, stacked by Growth, Maintenance and Fixes.
Work-mix over time
Share of Growth / Maintenance / Fixes over a rolling 7-day window. Reads as 'where is effort flowing right now'.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 20 by ETV in the 90-day window.
- 2.4ETVFix TypeSystem reference model to prevent leaks on recursive types Summary: The existing all-`Arc` model cannot represent recursive types (e.g. `struct Tree { children: list<Tree> }`) without leaking: every inter-node edge holds a strong reference, forming cycles that never reach refcount zero. This switches user-defined edges to `Weak` (while keeping `Arc` for held handles returned by `get()`), so the TypeSystem is the sole strong owner and cycles are broken. Structured fields use deferred initialization via `UnsafeCell<Option<_>>` to allow the builder to create all nodes before resolving cross-references. Also restructures nodes into per-file modules, adds `StructuredNode` trait, `BasicTypeSystem`, and `TypeSystem` trait with `TypeId` resolution. Reviewed By: praihan Differential Revision: D108476964 fbshipit-source-id: 09389ce6be3bed77e9fadf5d329c4938dbeadc2fgithub.com-facebook-fbthrift · 02c51b5b · 2026-06-15
- 1.6ETVServiceCatalogDigest Summary: Add deterministic `ServiceCatalog` and `ServiceDescriptor` digests, inspired by the `TypeSystemDigest` equivalents. Equivalent to `TypeSystemDigest`, the runtime representations (e.g. `ServiceCatalog` and its nodes) will provide an equivalent digest to the serialized representations (e.g. `SerializedServiceCatalog`). In addition, it is also fully platform independent, so the digest can be calculated deterministically in all supported languages & on all supported architectures. Rust port of D110799794. Differential Revision: D110917277 fbshipit-source-id: 3b182fe8f74a7eabcd9819b2772f1092a1885f6dgithub.com-facebook-fbthrift · ac89a996 · 2026-07-08
- 1.4ETVServiceCatalogDigest Summary: Add deterministic `ServiceCatalog` and `ServiceDescriptor` digests, inspired by the `TypeSystemDigest` equivalents. Equivalent to `TypeSystemDigest`, the runtime representations (e.g. `ServiceCatalog` and its nodes) will provide an equivalent digest to the serialized representations (e.g. `SerializedServiceCatalog`). In addition, it is also fully platform independent, so the digest can be calculated deterministically in all supported languages & on all supported architectures. Reviewed By: iahs Differential Revision: D110799794 fbshipit-source-id: bcbe31bbd7bb68bc65d32c7019921bad20d25443github.com-facebook-fbthrift · d63cf26f · 2026-07-08
- 1.2ETVImplement TypeSystemDigest for runtime type system nodes Summary: Implements the `TypeSystemDigest` trait for all runtime node types, producing an identical digests to the C++ `TypeSystemDigest` implementation. This enables cross-language cache invalidation, version compatibility checks, and deduplication between C++, Rust, and future Python/Hack runtimes. Reviewed By: praihan Differential Revision: D108641538 fbshipit-source-id: e6738ae28327f0c07e1f9a07b53024f01aceb4e5github.com-facebook-fbthrift · 3260a122 · 2026-06-16
- 1.1ETVExecute transcode plans on the interpreter Summary: Add `TranscodeInterpreter`, an interpreter-style execution engine that walks `TranscodePlan` tree and invokes the shared cursor/protocol intrinsics to read one encoding and write another. ___ Differential Revision: D110793295 fbshipit-source-id: 16b393b6587bdccb9a22f0a1380e06385e6523e6github.com-facebook-fbthrift · ed444d2a · 2026-07-18
- 1.0ETVRead JSON input on the interpreter Summary: Teaches the `interpreter` engine to consume JSON sources for structs, arrays, scalars, and maps, including default emission, union validation, unknown-field skipping, and map key coercion. ___ Differential Revision: D112926691 fbshipit-source-id: 8b1f3f47c75c8c188a2d790cea0572fbca4fd61dgithub.com-facebook-fbthrift · 39220678 · 2026-07-21
- 1.0ETVGolden test fixtures Summary: Adds golden protocol coverage for representative Thrift shapes so interpreter changes can be checked against Compact, Binary, and JSON serializer behavior. ___ Differential Revision: D112931048 fbshipit-source-id: cd5769cc3ae2483945826da1809e9bea67cb70e5github.com-facebook-fbthrift · fc89026d · 2026-07-21
- 1.0ETVParse and emit JSON scalar values Summary: The JSON leaf endpoint of the wire layer: - decimal number parse and format - escape-aware quoted-string parse and format - a strict true/false keyword reader - recursive value skipping JSON is the untrusted REST-facing edge, so the reader validates every byte it consumes rather than trusting a producer. The object and array framing around these leaves is handled higher up by the engines. ___ Reviewed By: iahs Differential Revision: D110531079 fbshipit-source-id: 4e0569a69dca995a2c97a835ed0df1e0d3ec8bdbgithub.com-facebook-fbthrift · 87a75fa7 · 2026-07-15
- 0.9ETVShare the byte primitives common to every wire format Summary: The base of the wire layer: the byte primitives every protocol reuses. - varints, plain and zigzag - fixed-width integers - length-prefixed byte ranges - the `WireType` guard over Thrift's `TType` These are the extern "C" symbols the JIT resolves and the interpreter calls, so both engines share one implementation of the hot primitives and every per-protocol framing layer builds on the same base. ___ Differential Revision: D110530595 fbshipit-source-id: f544f8f6d91eae2b2b1bd163bd24dfc40e9200b4github.com-facebook-fbthrift · 2edd1262 · 2026-07-14
- 0.9ETVDerive per-protocol codecs from a Thrift schema Summary: A codec captures how one protocol reads and writes a given Thrift type, expressed as a `Command` tree. A transcode plan fuses two of them, taking the source codec's read side and the target codec's write side, so this factory is what produces those codecs straight from a a runtime schema description (i.e. `TypeSystem` & co). Given a `TypeSystem` node for a struct or union, it walks the type and everything nested inside, translating each shape into the chosen protocol's building blocks: - scalars become that protocol's read/write intrinsics - lists, sets, and maps become its container framing plus the commands for their contents - structs and unions become field-by-field commands under its field framing It covers all four supported protocols: Thrift Compact, Thrift Binary, Protobuf, and JSON. Because every codec is derived from the runtime schema, a transcoder for any supported protocol pair falls out with no hand-written per-service code: derive the two codecs, fuse them into a plan, and run it. Reviewed By: iahs Differential Revision: D110534459 fbshipit-source-id: 359570d26307c2007c45c93996e43138c44b95a7github.com-facebook-fbthrift · 7212cf0b · 2026-07-17
- 0.9ETVAdd `TypeSystemBuilder` for programmatic type system construction Summary: Adds a builder for constructing live type systems, whether from a `SerializableTypeSystem`, ad-hoc definitions (tests, non-Thrift schemas), or a mix. Handles recursive and mutually recursive types via two-phase construction. Supports standalone builds and overlay-on-base layering for incremental composition. Reviewed By: slawlor, praihan Differential Revision: D108678713 fbshipit-source-id: 6447015c7b11f68a0a1d92fb04820cf8c49eda5agithub.com-facebook-fbthrift · 547911bd · 2026-06-16
- 0.9ETVCursor API Summary: The cursor is the I/O layer beneath the transcoding kernel, the byte stream that every wire intrinsic reads and writes through: - tracks the read and write positions - grows the output buffer through a caller-supplied reallocator - back-patches length and count headers via mark/skip/patch, for values whose size isn't known until a container is finished ___ Differential Revision: D110529893 fbshipit-source-id: 013dc447998a101cce4c44068cb4216c38806c1cgithub.com-facebook-fbthrift · b1b345d6 · 2026-07-14
- 0.9ETVAccumulatingTypeSystem Summary: `AccumulatingTypeSystem` is a `TypeSystem` implementation that can be grown over time via `addTypes()` without invalidating references handed out earlier, so a host can merge the overlapping schemas embedded across many packages into one consistent view. It deduplicates identical definitions using a configurable policy: - `Digest`: Using `TypeSystemDigest` as the equality marker - `Shape`: Ignoring metadata attributes, e.g. annotations With conflict resolution being configurable as well: - `Error`: Reject all conflicts - `TakeFirst`: Discard additional conflicting structures, keeping the original ones intact ## Devnote This does allow a single `base` layer for performance reasons, as the base layer can be shared between multiple instances, and is the most common case of starting a merged typesystem. Reviewed By: praihan Differential Revision: D107434924 fbshipit-source-id: 3004dce4088e7181142703fe495704594ce20df3github.com-facebook-fbthrift · 3a80101a · 2026-06-05
- 0.7ETVSerialize service descriptor interactions Summary: Preserve interaction constructors by carrying created interaction URIs, exposing interaction descriptors on ServiceDescriptor, and serializing referenced interaction interfaces in SerializableServiceCatalog. Reviewed By: iahs Differential Revision: D110793108 fbshipit-source-id: c3fa0765d53be6fe3cdc0ff179a229325b5f8ad3github.com-facebook-fbthrift · fbfd8654 · 2026-07-08
- 0.7ETVFrame Thrift Compact fields on the wire Summary: The Thrift Compact endpoint of the wire layer, built on the shared primitives: - field headers with delta or explicit zigzag field ids - the bool-in-type-nibble encoding - the STOP marker - type-directed skipping of unknown fields Compact is the default Thrift wire format, so this is the common hot path for gateway transcodes to and from Thrift services. ___ Reviewed By: iahs Differential Revision: D110531033 fbshipit-source-id: 758478bde75ab1a224565332572f78e1bfef19e2github.com-facebook-fbthrift · 060e87d0 · 2026-07-15
- 0.7ETVAdd ServiceDescriptor serialization via SerializableServiceCatalog Summary: Add `toSerializable`/`fromSerializable` conversion functions that bridge between the runtime `ServiceDescriptor` facade and the `SerializableServiceCatalog` Thrift wire format. The C++ layer provides: - `toSerializable(descriptor, serviceUri)`: collects the transitive type closure of all function signatures and serializes them alongside the function metadata - `fromSerializable(serialized, serviceUri)`: rebuilds a `ServiceDescriptor` with a self-contained `TypeSystem`, resolving all `TypeId` references back to live `TypeRef` handles All method kinds (unary, server streaming, client streaming, bidirectional), qualifiers, exceptions, and interaction flags round-trip correctly. Reviewed By: pranavtbhat Differential Revision: D109611434 fbshipit-source-id: 72f4ac9560ca60e6b2e2ee2772eb513d9c48ae25github.com-facebook-fbthrift · 6ac7e384 · 2026-07-03
- 0.6ETVAssemble a transcode pipeline into a single runnable plan Summary: A `TranscodePlan` is the complete, engine-agnostic description of one transcode pipeline. It is the unit a consumer builds once and runs, unchanged whether it is interpreted or JIT-compiled. Most plans are assembled by fusing two codecs, a source's read side and a target's write side, into that single tree: - matches struct fields by id/name - skips source-only fields - infered/forced value coercions, e.g. i32 --> i64 Reviewed By: iahs Differential Revision: D110533544 fbshipit-source-id: e77be20c8e56a383d4804e7b5aa3d42cba4ac9dcgithub.com-facebook-fbthrift · 5a606ba1 · 2026-07-17
- 0.5ETVSplit thrift_service_catalog from service_catalog_digest Summary: Move the ServiceCatalog node types and runtime digest implementations into a new `thrift_service_catalog` crate. Keep `service_catalog_digest` focused on digest support. Reviewed By: cjlongoria Differential Revision: D113410884 fbshipit-source-id: e2e46e59e94018cc2d686527bbef0677d2d06eefgithub.com-facebook-fbthrift · f3ef52c7 · 2026-07-23
- 0.5ETVJSON interpreter helpers Summary: Moves reusable JSON token/scanner helpers into the JSON intrinsics layer ___ Differential Revision: D112895168 fbshipit-source-id: b3e9da166f2bf3727c3b4551fc485f306b51ed2egithub.com-facebook-fbthrift · 79d32103 · 2026-07-21
- 0.5ETVAuto-embed ThriftCatalogService for C++ thrift servers Summary: Adds the default C++ server-side `ThriftCatalogService` implementation so `ThriftServer` exposes catalog endpoints for services with embedded schema. The handler filters the process schema registry to the service URIs served by the server and returns merged catalog data or per-service descriptors with stable digests. Reviewed By: praihan Differential Revision: D112405376 fbshipit-source-id: fa06c8cfec6245ab253c31e7d2e6b26c9ac1909egithub.com-facebook-fbthrift · 9007232d · 2026-07-21