NavigaraNavigara
OrganizationsDistributionCompareResearch
NavigaraNavigara
OrganizationsDistributionCompareResearch
All developers

Dan Deng

Developer

Dan Deng

danieldeng@meta.com

29 commits~23 files/commit

Performance

YoY:+1800%
2026Previous year

Insights

Key patterns and highlights from this developer's activity.

Peak MonthJan'2660 performance
Growth Trend↑14%vs prior period
Avg Files/Commit23files per commit
Active Days25of 455 days
Top Repofbthrift29 commits

Effort Over Time

Breakdown of growth, maintenance, and fixes effort over time.

Bug Behavior

Beta

Bugs introduced vs. fixed over time.

Investment Quality

Beta

Reclassifies engineering effort based on bug attribution. Commits that introduced bugs are retrospectively counted as poor investments.

65%Productive TimeGrowth 93% + Fixes 7%
25%Maintenance Time
10%Wasted Time
How it works

Methodology

Investment Quality reclassifies engineering effort based on bug attribution data. Commits identified as buggy origins (those that introduced bugs later fixed by someone) have their grow and maintenance time moved into the Wasted Time category. Their waste (fix commits) remains counted as productive. All other commits retain their standard classification: grow is productive, maintenance is maintenance, and waste (fixes) is productive.

Relationship to Growth / Maintenance / Fixes

The standard model classifies commits as Growth, Maintenance, or Fixes. Investment Quality adds a quality lens: a commit that introduced a bug is retrospectively counted as a poor investment — the engineering time spent on it was wasted because it ultimately required additional fix work. Fix commits (Fixes in the standard model) are reframed as productive, because fixing bugs is valuable work.

Proposed API Endpoint

Currently computed client-side from commit and bug attribution data. Ideal server-side endpoint:

POST /v1/organizations/{orgId}/investment-quality
Content-Type: application/json

Request:
{
  "startTime": "2025-01-01T00:00:00Z",
  "endTime": "2025-12-31T23:59:59Z",
  "bucketSize": "BUCKET_SIZE_MONTH",
  "groupBy": ["repository_id" | "deliverer_email"]
}

Response:
{
  "productivePct": 74,
  "maintenancePct": 18,
  "wastedPct": 8,
  "buckets": [
    {
      "bucketStart": "2025-01-01T00:00:00Z",
      "productive": 4.2,
      "maintenance": 1.8,
      "wasted": 0.6
    }
  ]
}

Recent Activity

Latest analyzed commits from this developer.

HashMessageDateFilesEffort
3a89d2cThis commit **introduces a new logging capability** to monitor **Thrift union deserialization** within the `thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php` module. It adds logic to detect and log instances where Thrift unions are deserialized using PHP builtin methods. New methods, including `getFieldInfo` and modifications to `__wakeup`, are implemented to capture and send detailed field information and type data to a **SignalDynamicLoggerProject**, providing crucial insights into deserialization patterns.Mar 141grow
892c565This commit **migrates** the `signal dynamic logger`'s data storage from a deprecated shared Scuba table to a **dedicated Thrift Scuba table**. It **refactors** the `ThriftUnionSerializationTrait.php` within the **Thrift protocol library** for Hack, updating the internal dataset constant from `SHARED_DATASET_AVOID` to `THRIFT_SIGNAL_DYNAMIC_LOGGER`. This **maintenance** change ensures the continued functionality of signal logging by adapting to infrastructure deprecations, specifically impacting the serialization and access methods like `__read`, `__write`, and `__get` for signal data.Feb 51maint
81b3513This commit **introduces new functionality for processing Thrift sinks** within the `ThriftProcessorBase` in the Hack language. It implements the critical `genExecuteSink` method, along with private helpers `genSinkGenerator` and `copyProtocol`, which will be invoked by Thrift compiler-generated code to handle sink operations. This **new feature** enables the server to correctly process incoming sink payloads and includes comprehensive **exception handling** mechanisms for scenarios where client sink code throws exceptions or errors occur during server-side processing. The changes in `thrift/lib/hack/src/ThriftProcessorBase.php` are essential for supporting robust Thrift sink communication.Jan 291grow
0790570This commit performs a **revert** within the **Thrift compiler's Hack generator** (`t_hack_generator.cc`), specifically rolling back changes related to **default value rendering for empty maps** and the assignment logic in **struct constructors**. It restores the prior behavior of functions like `render_const_value_helper` and `generate_php_struct_constructor_field_assignment`, which handle the generation of default values in the output Hack code. This **temporary rollback** is a **diagnostic measure** to investigate if the original modification was contributing to **timeouts observed during the msdk bump process**, aiming to resolve potential performance regressions.Jan 28238waste
3859488This commit performs a **refactoring** within the **Thrift Hack generator** to standardize compiler options for server-side streaming. It **removes** the `server_sink_` option and its associated member variable from `t_hack_generator.cc`, consolidating its logic under the `server_stream_` flag, particularly affecting the `generate_function_helper` symbol. This **maintenance** change ensures consistency in how streaming capabilities are configured when generating Hack code. Consequently, the `hack` command option in the `thrift/compiler/test/fixtures/sink/cmd` test fixture is updated from `server_sink` to `server_stream` to align with this compiler modification, ensuring proper testing of the unified flag.Jan 242maint
58414e6This commit introduces the **`legacy_default_values` compiler option** to resolve a **Hack code generation** issue related to **default values for structured types**. Specifically, it addresses type mismatches that occur when nested Thrift structs with default collection values are defined across files with inconsistent `hack_collections` settings, leading to incorrect type instantiation (e.g., `vec` versus `Vector`). The new flag, implemented in `thrift/compiler/generate/t_hack_generator.cc`, allows users to retain the previous default value generation behavior, serving as a **compatibility workaround**. This **maintenance fix** ensures correct code generation and prevents runtime errors for existing codebases, validated by new test cases across multiple Thrift fixtures.Jan 7187grow
8c4d3baThis commit **introduces the `ServerSinkFactory` class** and **refactors** the Thrift C++2 codebase to utilize it for managing server-side sink replies. It **replaces `SinkConsumerImpl`** with `ServerSinkFactory` in critical components such as `ResponseChannel::sendSinkReply`, `HandlerCallbackBase::sendReply`, and the **compiler-generated service code** for async processors. This **refactoring** standardizes the mechanism for handling server-side sink operations, including setting interaction and context, across the **Thrift runtime** and **transport layers**. The new `ServerSinkFactory` centralizes the creation and management of server sinks, improving the robustness and clarity of sink-based RPC implementations. This change impacts **Thrift service implementation**, **compiler-generated code**, and **transport layers** for sink-based RPCs.Jan 530grow
389e758This commit introduces a **new capability** for **Thrift C++2 asynchronous server applications** by integrating a `ConsumerCallback` interface into the `ServerSinkFactory`. This callback provides a flexible mechanism for consumers to provision server sinks, allowing for more dynamic and potentially asynchronous management of these resources. Specifically, a new constructor for `ServerSinkFactory` is added to accept this callback, and the `ServerSinkBridge` is enhanced with a `getBufferSize` method to expose the consumer's buffer size, improving resource visibility and control.Jan 53grow
4e5dbc8This commit performs a **refactoring** by **renaming** the `ResponseAndClientSink` class and its associated type references to `ResponseAndSink` across the **Thrift Hack ecosystem**. The core change renames the class in `thrift/lib/hack/src/ResponseAndSink.php` and introduces a temporary type alias for the old name to maintain compatibility. This renaming is consistently applied to the **Thrift Hack compiler generator** (`t_hack_generator.cc`) and the **Thrift Hack client base** (`ThriftClientBase.php`) to update type hints and instantiations. This effort streamlines type naming and prepares for future compiler changes, with the type alias intended for removal once those changes land.Dec 117maint
947f0c5This commit introduces **server-side code generation** for **Thrift sink methods** within the **Hack language ecosystem**, marking a **new capability** for handling asynchronous operations. The `thrift/compiler/generate/t_hack_generator.cc` is updated to generate the necessary processing logic, while the `thrift/lib/hack/src/ThriftProcessorBase.php` runtime library gains a new `genExecuteSink` method to execute these sink handlers. This enables Hack services to define and efficiently process Thrift sink methods, expanding the framework's support for one-way, non-blocking communication patterns.Dec 104grow
b609aceThis commit introduces **new conformance testing capabilities** for **Thrift RPC sink methods**. It adds `sinkInitialDeclaredException` and `sinkServerDeclaredException` methods to the `thrift/conformance/if/rpc.thrift` service definition, enabling comprehensive testing of **exception handling** at various stages of a sink operation. The **Java reactive RPC server handler** is updated to implement these new methods, and the **Rust RPC client** is modified to recognize and handle them. This enhancement ensures more thorough validation of **exception propagation** within the **Thrift RPC framework**, covering scenarios where exceptions can be thrown in the initial handler, client generator, or server sink.Dec 43grow
fcdb88cThis commit **refactors** the `ServerSinkBridge` within the **Thrift C++2 asynchronous library** to enhance its flexibility. It modifies the `ServerSinkBridge` class and its `TwoWayBridge` template instantiation to utilize the more general `QueueConsumer` interface instead of the specific `CoroConsumer`. This **enables broader compatibility** for consumer implementations, particularly facilitating the integration of alternative consumer types required for a **Hack server sink implementation**. The change primarily affects `thrift/lib/cpp2/async/ServerSinkBridge.h` and `ServerSinkBridge.cpp`, making the `ServerSinkBridge` more adaptable to various consumer patterns.Dec 12maint
b308f9aThis commit introduces a significant **logging improvement** for **Thrift union serialization** within the Hack environment. It enhances the `write` method in `thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php` to provide more detailed error messages when an incorrect field is set in a union. Specifically, the updated logic now tracks all incorrect fields and explicitly includes both the **expected and actual field names** in the log output. This **observability enhancement** will greatly assist developers in debugging and diagnosing issues related to malformed Thrift union data.Oct 231grow
71be171This commit introduces a **new capability** to the **Thrift Hack compiler generator** by adding the `__union_logger_rollout` internal option. This flag enables **conditional generation of union logging code** within `t_hack_generator`, specifically affecting the `generate_php_union_methods` function. Accompanying test files in `thrift/compiler/test/fixtures/hack-strict-unions` have been updated to include new union definitions and a test command to validate the flag's functionality. This allows for a controlled and **gradual rollout of union logging changes** in Hack, ensuring stability and thorough testing before full deployment.Sep 2624grow
9aa1c97This commit **fixes incorrect logging** within the **Thrift Hack runtime** by introducing a null check to the `logIncorrectFieldAccessed` method. The **Thrift Hack code generator** (`thrift/compiler/generate/t_hack_generator.cc`) is updated to pass a null status to this function during the generation of union methods. Consequently, the `logIncorrectFieldAccessed` method in the **Thrift Hack library** (`thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php`) now accepts this status and **prevents logging if the accessed field is null**. This ensures that logs are only generated when a non-null value is incorrectly accessed, **reducing noise from spurious logs** for legitimately null fields in Hack Thrift unions.Sep 2521waste
6f5a7f8This commit introduces a **new capability** to the **Thrift/Hack library** by adding a **JustKnobs killswitch** for the `logIncorrectFieldAccessed` mechanism. This **maintenance feature** provides dynamic control over logging when an incorrect field of a Thrift union is accessed during serialization. Operators can now toggle this logging via the `log_incorrect_union_field_access` knob, allowing for flexible management of log verbosity and aiding in debugging **Thrift union serialization** issues.Sep 101grow
7664102This commit introduces a **new compiler flag**, `legacy_union_json_serialization`, within the **Thrift Hack code generator** to manage **JSON serialization behavior for Thrift unions**. This **new capability** provides explicit control over how unions are serialized, specifically unblocking the ongoing **Hack Union migration** by offering an alternative to problematic annotation-based methods. The flag is integrated into `t_hack_generator` and affects `_generate_php_struct_definition`, with accompanying **test infrastructure updates** to validate its functionality.Sep 97grow
1f976aeThis commit introduces a **behavior alignment** for the JSON serialization of **non-protected Thrift unions** when processed by `fb_json_encode`. It addresses a discrepancy where `fb_json_encode` previously included `null` values for unset union fields, unlike `JSONThriftSerializer`. To resolve this, a new `ThriftLegacyJSONSerializationTrait.php` is added, implementing the `JsonSerializable` trait to explicitly omit `null` fields during serialization. The **Thrift compiler** (`thrift/compiler/generate/t_hack_generator.cc`) is updated to conditionally generate this trait for relevant unions. This **maintenance** effort ensures existing JSON serialization remains consistent and prevents breakage when these unions are eventually migrated to strict-unions.Sep 94grow
fce80d8This commit introduces a **new logging capability** within the **Hack Thrift runtime** to monitor access patterns for unions constructed with multiple fields. It adds a `logIncorrectFieldAccessed()` method to `thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php` and modifies the **Hack Thrift compiler's generator** (`thrift/compiler/generate/t_hack_generator.cc`) to include calls to this method in generated union getter methods. This **instrumentation** is critical for identifying if "extra" fields are accessed, providing data to safely migrate existing unions to a strict-unions implementation. Additionally, it **refactors** existing `signal_log_in_psp` calls to use a more structured argument format.Sep 920grow
fc1bd32This commit introduces a **new codemod** within the **Thrift compiler** to automate the annotation of specific **Thrift unions**. Implemented in `annotate_hack_legacy_json_serialization.cc`, this **new capability** adds the `@hack.MigrationBlockingLegacyJSONSerialization` annotation to unions currently listed in `ThriftOptionsMigrationIgnoreList::PROTECTED_UNIONS_IGNORELIST`. This **maintenance task** is crucial for an ongoing migration effort, ensuring that these particular unions are correctly identified and handled during changes related to legacy JSON serialization. Python tests in `annotate_hack_legacy_json_serialization_test.py` validate the codemod's functionality across various scenarios.Aug 202grow
3a89d2cMar 14

This commit **introduces a new logging capability** to monitor **Thrift union deserialization** within the `thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php` module. It adds logic to detect and log instances where Thrift unions are deserialized using PHP builtin methods. New methods, including `getFieldInfo` and modifications to `__wakeup`, are implemented to capture and send detailed field information and type data to a **SignalDynamicLoggerProject**, providing crucial insights into deserialization patterns.

1 filesgrow
892c565Feb 5

This commit **migrates** the `signal dynamic logger`'s data storage from a deprecated shared Scuba table to a **dedicated Thrift Scuba table**. It **refactors** the `ThriftUnionSerializationTrait.php` within the **Thrift protocol library** for Hack, updating the internal dataset constant from `SHARED_DATASET_AVOID` to `THRIFT_SIGNAL_DYNAMIC_LOGGER`. This **maintenance** change ensures the continued functionality of signal logging by adapting to infrastructure deprecations, specifically impacting the serialization and access methods like `__read`, `__write`, and `__get` for signal data.

1 filesmaint
81b3513Jan 29

This commit **introduces new functionality for processing Thrift sinks** within the `ThriftProcessorBase` in the Hack language. It implements the critical `genExecuteSink` method, along with private helpers `genSinkGenerator` and `copyProtocol`, which will be invoked by Thrift compiler-generated code to handle sink operations. This **new feature** enables the server to correctly process incoming sink payloads and includes comprehensive **exception handling** mechanisms for scenarios where client sink code throws exceptions or errors occur during server-side processing. The changes in `thrift/lib/hack/src/ThriftProcessorBase.php` are essential for supporting robust Thrift sink communication.

1 filesgrow
0790570Jan 28

This commit performs a **revert** within the **Thrift compiler's Hack generator** (`t_hack_generator.cc`), specifically rolling back changes related to **default value rendering for empty maps** and the assignment logic in **struct constructors**. It restores the prior behavior of functions like `render_const_value_helper` and `generate_php_struct_constructor_field_assignment`, which handle the generation of default values in the output Hack code. This **temporary rollback** is a **diagnostic measure** to investigate if the original modification was contributing to **timeouts observed during the msdk bump process**, aiming to resolve potential performance regressions.

238 fileswaste
3859488Jan 24

This commit performs a **refactoring** within the **Thrift Hack generator** to standardize compiler options for server-side streaming. It **removes** the `server_sink_` option and its associated member variable from `t_hack_generator.cc`, consolidating its logic under the `server_stream_` flag, particularly affecting the `generate_function_helper` symbol. This **maintenance** change ensures consistency in how streaming capabilities are configured when generating Hack code. Consequently, the `hack` command option in the `thrift/compiler/test/fixtures/sink/cmd` test fixture is updated from `server_sink` to `server_stream` to align with this compiler modification, ensuring proper testing of the unified flag.

2 filesmaint
58414e6Jan 7

This commit introduces the **`legacy_default_values` compiler option** to resolve a **Hack code generation** issue related to **default values for structured types**. Specifically, it addresses type mismatches that occur when nested Thrift structs with default collection values are defined across files with inconsistent `hack_collections` settings, leading to incorrect type instantiation (e.g., `vec` versus `Vector`). The new flag, implemented in `thrift/compiler/generate/t_hack_generator.cc`, allows users to retain the previous default value generation behavior, serving as a **compatibility workaround**. This **maintenance fix** ensures correct code generation and prevents runtime errors for existing codebases, validated by new test cases across multiple Thrift fixtures.

187 filesgrow
8c4d3baJan 5

This commit **introduces the `ServerSinkFactory` class** and **refactors** the Thrift C++2 codebase to utilize it for managing server-side sink replies. It **replaces `SinkConsumerImpl`** with `ServerSinkFactory` in critical components such as `ResponseChannel::sendSinkReply`, `HandlerCallbackBase::sendReply`, and the **compiler-generated service code** for async processors. This **refactoring** standardizes the mechanism for handling server-side sink operations, including setting interaction and context, across the **Thrift runtime** and **transport layers**. The new `ServerSinkFactory` centralizes the creation and management of server sinks, improving the robustness and clarity of sink-based RPC implementations. This change impacts **Thrift service implementation**, **compiler-generated code**, and **transport layers** for sink-based RPCs.

30 filesgrow
389e758Jan 5

This commit introduces a **new capability** for **Thrift C++2 asynchronous server applications** by integrating a `ConsumerCallback` interface into the `ServerSinkFactory`. This callback provides a flexible mechanism for consumers to provision server sinks, allowing for more dynamic and potentially asynchronous management of these resources. Specifically, a new constructor for `ServerSinkFactory` is added to accept this callback, and the `ServerSinkBridge` is enhanced with a `getBufferSize` method to expose the consumer's buffer size, improving resource visibility and control.

3 filesgrow
4e5dbc8Dec 11

This commit performs a **refactoring** by **renaming** the `ResponseAndClientSink` class and its associated type references to `ResponseAndSink` across the **Thrift Hack ecosystem**. The core change renames the class in `thrift/lib/hack/src/ResponseAndSink.php` and introduces a temporary type alias for the old name to maintain compatibility. This renaming is consistently applied to the **Thrift Hack compiler generator** (`t_hack_generator.cc`) and the **Thrift Hack client base** (`ThriftClientBase.php`) to update type hints and instantiations. This effort streamlines type naming and prepares for future compiler changes, with the type alias intended for removal once those changes land.

7 filesmaint
947f0c5Dec 10

This commit introduces **server-side code generation** for **Thrift sink methods** within the **Hack language ecosystem**, marking a **new capability** for handling asynchronous operations. The `thrift/compiler/generate/t_hack_generator.cc` is updated to generate the necessary processing logic, while the `thrift/lib/hack/src/ThriftProcessorBase.php` runtime library gains a new `genExecuteSink` method to execute these sink handlers. This enables Hack services to define and efficiently process Thrift sink methods, expanding the framework's support for one-way, non-blocking communication patterns.

4 filesgrow
b609aceDec 4

This commit introduces **new conformance testing capabilities** for **Thrift RPC sink methods**. It adds `sinkInitialDeclaredException` and `sinkServerDeclaredException` methods to the `thrift/conformance/if/rpc.thrift` service definition, enabling comprehensive testing of **exception handling** at various stages of a sink operation. The **Java reactive RPC server handler** is updated to implement these new methods, and the **Rust RPC client** is modified to recognize and handle them. This enhancement ensures more thorough validation of **exception propagation** within the **Thrift RPC framework**, covering scenarios where exceptions can be thrown in the initial handler, client generator, or server sink.

3 filesgrow
fcdb88cDec 1

This commit **refactors** the `ServerSinkBridge` within the **Thrift C++2 asynchronous library** to enhance its flexibility. It modifies the `ServerSinkBridge` class and its `TwoWayBridge` template instantiation to utilize the more general `QueueConsumer` interface instead of the specific `CoroConsumer`. This **enables broader compatibility** for consumer implementations, particularly facilitating the integration of alternative consumer types required for a **Hack server sink implementation**. The change primarily affects `thrift/lib/cpp2/async/ServerSinkBridge.h` and `ServerSinkBridge.cpp`, making the `ServerSinkBridge` more adaptable to various consumer patterns.

2 filesmaint
b308f9aOct 23

This commit introduces a significant **logging improvement** for **Thrift union serialization** within the Hack environment. It enhances the `write` method in `thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php` to provide more detailed error messages when an incorrect field is set in a union. Specifically, the updated logic now tracks all incorrect fields and explicitly includes both the **expected and actual field names** in the log output. This **observability enhancement** will greatly assist developers in debugging and diagnosing issues related to malformed Thrift union data.

1 filesgrow
71be171Sep 26

This commit introduces a **new capability** to the **Thrift Hack compiler generator** by adding the `__union_logger_rollout` internal option. This flag enables **conditional generation of union logging code** within `t_hack_generator`, specifically affecting the `generate_php_union_methods` function. Accompanying test files in `thrift/compiler/test/fixtures/hack-strict-unions` have been updated to include new union definitions and a test command to validate the flag's functionality. This allows for a controlled and **gradual rollout of union logging changes** in Hack, ensuring stability and thorough testing before full deployment.

24 filesgrow
9aa1c97Sep 25

This commit **fixes incorrect logging** within the **Thrift Hack runtime** by introducing a null check to the `logIncorrectFieldAccessed` method. The **Thrift Hack code generator** (`thrift/compiler/generate/t_hack_generator.cc`) is updated to pass a null status to this function during the generation of union methods. Consequently, the `logIncorrectFieldAccessed` method in the **Thrift Hack library** (`thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php`) now accepts this status and **prevents logging if the accessed field is null**. This ensures that logs are only generated when a non-null value is incorrectly accessed, **reducing noise from spurious logs** for legitimately null fields in Hack Thrift unions.

21 fileswaste
6f5a7f8Sep 10

This commit introduces a **new capability** to the **Thrift/Hack library** by adding a **JustKnobs killswitch** for the `logIncorrectFieldAccessed` mechanism. This **maintenance feature** provides dynamic control over logging when an incorrect field of a Thrift union is accessed during serialization. Operators can now toggle this logging via the `log_incorrect_union_field_access` knob, allowing for flexible management of log verbosity and aiding in debugging **Thrift union serialization** issues.

1 filesgrow
7664102Sep 9

This commit introduces a **new compiler flag**, `legacy_union_json_serialization`, within the **Thrift Hack code generator** to manage **JSON serialization behavior for Thrift unions**. This **new capability** provides explicit control over how unions are serialized, specifically unblocking the ongoing **Hack Union migration** by offering an alternative to problematic annotation-based methods. The flag is integrated into `t_hack_generator` and affects `_generate_php_struct_definition`, with accompanying **test infrastructure updates** to validate its functionality.

7 filesgrow
1f976aeSep 9

This commit introduces a **behavior alignment** for the JSON serialization of **non-protected Thrift unions** when processed by `fb_json_encode`. It addresses a discrepancy where `fb_json_encode` previously included `null` values for unset union fields, unlike `JSONThriftSerializer`. To resolve this, a new `ThriftLegacyJSONSerializationTrait.php` is added, implementing the `JsonSerializable` trait to explicitly omit `null` fields during serialization. The **Thrift compiler** (`thrift/compiler/generate/t_hack_generator.cc`) is updated to conditionally generate this trait for relevant unions. This **maintenance** effort ensures existing JSON serialization remains consistent and prevents breakage when these unions are eventually migrated to strict-unions.

4 filesgrow
fce80d8Sep 9

This commit introduces a **new logging capability** within the **Hack Thrift runtime** to monitor access patterns for unions constructed with multiple fields. It adds a `logIncorrectFieldAccessed()` method to `thrift/lib/hack/src/protocol/ThriftUnionSerializationTrait.php` and modifies the **Hack Thrift compiler's generator** (`thrift/compiler/generate/t_hack_generator.cc`) to include calls to this method in generated union getter methods. This **instrumentation** is critical for identifying if "extra" fields are accessed, providing data to safely migrate existing unions to a strict-unions implementation. Additionally, it **refactors** existing `signal_log_in_psp` calls to use a more structured argument format.

20 filesgrow
fc1bd32Aug 20

This commit introduces a **new codemod** within the **Thrift compiler** to automate the annotation of specific **Thrift unions**. Implemented in `annotate_hack_legacy_json_serialization.cc`, this **new capability** adds the `@hack.MigrationBlockingLegacyJSONSerialization` annotation to unions currently listed in `ThriftOptionsMigrationIgnoreList::PROTECTED_UNIONS_IGNORELIST`. This **maintenance task** is crucial for an ongoing migration effort, ensuring that these particular unions are correctly identified and handled during changes related to legacy JSON serialization. Python tests in `annotate_hack_legacy_json_serialization_test.py` validate the codemod's functionality across various scenarios.

2 filesgrow

Work Patterns

Beta

Commit activity distribution by hour and day of week. Shows when this developer is most active.

Collaboration

Beta

Developers who frequently work on the same files and symbols. Higher score means stronger code collaboration.

NavigaraNavigara
OrganizationsDistributionCompareResearch