agents/projects/code-health/lint-sync/SKILL.md
Identify enums in the codebase that are persisted to logs (e.g., recorded in
enums.xml) but are missing the LINT.IfChange(...) and LINT.ThenChange(...)
guards that enforce synchronization between the source code and the XML
metadata.
When developers modify an enum in C++ or Java but forget to update the
corresponding entry in enums.xml, it breaks downstream metrics pipelines.
Adding IfThisThenThat lint guards prevents this by generating Gerrit warnings
if one side is modified without the other. Act as an expert Chromium contributor
to add these missing guards.
Goal: Add LINT.IfChange/ThenChange sync guards to enums in C++/Java and XML files to enforce synchronization.
[!IMPORTANT] Execution Protocol: Execute all steps sequentially one by one. Do not skip any step. Do not use
edit-codeorgrep. Userg(ripgrep) for searches.
Follow the workspace preparation steps in workspace_preparation.md to ensure a clean and updated environment.
Follow the Discovery & Batch Selection workflow.
Process the candidates by handling them one file at a time, and applying modifications inside each file one enum at a time (rather than refactoring all files or enums at once). This ensures stability and allows for precise verification. Refer to patterns.md for sync guard syntax rules and examples before making replacements.
Process Enum: For each enum in the list:
generalist sub-agent with this
exact prompt:
"Compare the enum
<EnumName>in<SourcePath>with its metadata entry in<XMLPath>. Verify that all valid enum entries in the source have corresponding<int value="..." label="...">entries in the XML. IMPORTANT: Ignore/skip sentinel values likekMaxValue,kCount,COUNT, orNUM_ENTRIESin the comparison; they are not expected to be in the XML. Return 'SYNCED' or a concise list of missing entries that need to be added to the XML. Ensure any suggested labels reflect the enum constant name and any suggested <summary> tags are concise descriptions of the enum's purpose."
generalist returns missing entries, add them to
the XML file before proceeding with the guards. Only append missing entries
to the XML. Never modify existing names or values in either file. Do not
shift the numeric values of an enum. When adding new values to the XML
enum, check the format of the existing <int> entries and ensure new
entries match that format. Labels added to the XML MUST be concise
(matching the enum constant name) and any <summary> tags MUST be brief
descriptions of what the enum tracks.// Please keep in sync with... or
// Always keep this enum in sync with...). Remove ONLY the specific
sentence or line referencing the manual synchronization. Preserve all
other parts of the comment (e.g., descriptions of what the enum
represents, renumbering warnings, or usage instructions). If the entire
comment block only contains a sync reminder, the whole block may be
removed.// LINT.IfChange(<SourceName>) immediately before the enum
definition.// LINT.ThenChange(<XML Path>:<XmlName>) immediately after the
enum.<!-- LINT.IfChange(<XmlName>) --> immediately before the
<enum> tag.<!-- LINT.ThenChange(<Source Path>:<SourceName>) --> immediately
after the </enum> tag.SourceName) differs from the name in the XML file (XmlName), ensure
the correct name is used in each respective IfChange and ThenChange tag
as shown in the Syntax Rules.Iterate: Once the enum is fully synced and verified, move to the next one in the list and repeat. Do not attempt to batch multiple enums in a single file-write operation to ensure accuracy. Once all enums have been processed, proceed immediately to the Review & Validation phase.
python3 tools/metrics/histograms/validate_format.py to validate all
metadata changes. Address any errors that are reported.git cl format to format the modified source
code. Address any errors that are reported.generalist sub-agent. Proceed to the
Verification phase only after the review returns PASS.Follow the Verification workflow.
Invoke the Submission workflow. Pass the following context variables to the workflow:
lint-synclint-sync-<EnumName>lint-syncAdd missing LINT guards in <SourceFilePath>Adding IfThisThenThat lint guards to ensure synchronization between the following source code enums and their metadata representation in enums.xml: <EnumNamesList (comma-separated)>498775295