{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"codehealth","informationUri":"https://codehealth.canine.dev","rules":[{"id":"D1","name":"Cyclomatic Complexity","shortDescription":{"text":"Cyclomatic Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D1"},{"id":"D2","name":"Cognitive Complexity","shortDescription":{"text":"Cognitive Complexity"},"helpUri":"https://codehealth.canine.dev/dimensions/D2"},{"id":"D3","name":"God Classes","shortDescription":{"text":"God Classes"},"helpUri":"https://codehealth.canine.dev/dimensions/D3"},{"id":"D4","name":"Code Duplication","shortDescription":{"text":"Code Duplication"},"helpUri":"https://codehealth.canine.dev/dimensions/D4"},{"id":"D5","name":"Coupling","shortDescription":{"text":"Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D5"},{"id":"D7","name":"Architectural Integrity","shortDescription":{"text":"Architectural Integrity"},"helpUri":"https://codehealth.canine.dev/dimensions/D7"},{"id":"D8","name":"Code Coverage","shortDescription":{"text":"Code Coverage"},"helpUri":"https://codehealth.canine.dev/dimensions/D8"},{"id":"D9","name":"Test Distribution","shortDescription":{"text":"Test Distribution"},"helpUri":"https://codehealth.canine.dev/dimensions/D9"},{"id":"D12","name":"Dependency Hygiene","shortDescription":{"text":"Dependency Hygiene"},"helpUri":"https://codehealth.canine.dev/dimensions/D12"},{"id":"D13","name":"Secret Scanning","shortDescription":{"text":"Secret Scanning"},"helpUri":"https://codehealth.canine.dev/dimensions/D13","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D15","name":"Churn \u00D7 Complexity Hotspots","shortDescription":{"text":"Churn \u00D7 Complexity Hotspots"},"helpUri":"https://codehealth.canine.dev/dimensions/D15"},{"id":"D16","name":"Bus Factor","shortDescription":{"text":"Bus Factor"},"helpUri":"https://codehealth.canine.dev/dimensions/D16"},{"id":"D20","name":"ADR Quality","shortDescription":{"text":"ADR Quality"},"helpUri":"https://codehealth.canine.dev/dimensions/D20"},{"id":"D21","name":"Naming Consistency","shortDescription":{"text":"Naming Consistency"},"helpUri":"https://codehealth.canine.dev/dimensions/D21"},{"id":"D25","name":"ADR Conformance","shortDescription":{"text":"ADR Conformance"},"helpUri":"https://codehealth.canine.dev/dimensions/D25"},{"id":"D26","name":"Project Cohesion","shortDescription":{"text":"Project Cohesion"},"helpUri":"https://codehealth.canine.dev/dimensions/D26"},{"id":"D27","name":"Navigability","shortDescription":{"text":"Navigability"},"helpUri":"https://codehealth.canine.dev/dimensions/D27"},{"id":"D28","name":"Secrets (history)","shortDescription":{"text":"Secrets (history)"},"helpUri":"https://codehealth.canine.dev/dimensions/D28","relationships":[{"target":{"id":"CWE-798","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-259","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-798","CWE-259"]}},{"id":"D29","name":"Static Analysis (SAST)","shortDescription":{"text":"Static Analysis (SAST)"},"helpUri":"https://codehealth.canine.dev/dimensions/D29","relationships":[{"target":{"id":"CWE-79","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-89","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-94","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-77","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-79","CWE-89","CWE-78","CWE-94","CWE-77"]}},{"id":"D31","name":"IaC \u0026 Container Security","shortDescription":{"text":"IaC \u0026 Container Security"},"helpUri":"https://codehealth.canine.dev/dimensions/D31","relationships":[{"target":{"id":"CWE-1032","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-732","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-16","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1032","CWE-732","CWE-16"]}},{"id":"D34","name":"Knowledge Freshness","shortDescription":{"text":"Knowledge Freshness"},"helpUri":"https://codehealth.canine.dev/dimensions/D34"},{"id":"D35","name":"Change Coupling","shortDescription":{"text":"Change Coupling"},"helpUri":"https://codehealth.canine.dev/dimensions/D35"},{"id":"D36","name":"Supply-chain Provenance \u0026 Signing","shortDescription":{"text":"Supply-chain Provenance \u0026 Signing"},"helpUri":"https://codehealth.canine.dev/dimensions/D36","relationships":[{"target":{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]},{"target":{"id":"CWE-494","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},"kinds":["relevant"]}],"properties":{"cwe":["CWE-1357","CWE-494"]}}]}},"results":[{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (48 lines \u00D7 3): core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:701-748 | core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:877-920 | core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:1016-1055"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt"},"region":{"startLine":701}}}],"partialFingerprints":{"codehealthFindingId/v1":"2729efe558e21fd27a31bf346a1dbf6cdc5a13a288648f79c6819ceebc7bd95f"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (22 lines \u00D7 2): core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:255-276 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:343-364"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt"},"region":{"startLine":255}}}],"partialFingerprints":{"codehealthFindingId/v1":"939a7bf37b5dca8613c1121985ed1aad056bc4996202610858a104f2576cbd9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (21 lines \u00D7 2): core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditSubTabs.kt:142-162 | core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditSubTabs.kt:196-216"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditSubTabs.kt"},"region":{"startLine":142}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea5c4642f04fa2688ea8e3932e9b7fc04d014308c929d27a8fef77f62eec6390"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (18 lines \u00D7 2): core/src/com/unciv/logic/map/MapPathing.kt:89-105 | core/src/com/unciv/logic/map/MapPathing.kt:123-140"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/map/MapPathing.kt"},"region":{"startLine":89}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec00c2e3b4d0a09670a98b43db0f2a02e70226b413eebf469d4338e0ceb56b7e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (17 lines \u00D7 2): core/src/com/unciv/logic/map/PathingMap.kt:448-460 | core/src/com/unciv/logic/map/PathingMap.kt:464-480"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/map/PathingMap.kt"},"region":{"startLine":448}}}],"partialFingerprints":{"codehealthFindingId/v1":"ed74ed07a87b23acd4d7c6117e977c4ba2c9a538870754875e361b3dd5281a56"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (15 lines \u00D7 2): core/src/com/unciv/ui/screens/mainmenuscreen/EasterEggRulesets.kt:85-99 | core/src/com/unciv/ui/screens/mainmenuscreen/EasterEggRulesets.kt:102-116"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/ui/screens/mainmenuscreen/EasterEggRulesets.kt"},"region":{"startLine":85}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ff3e6311bfe16c8b6f5c79254a694148d409be7b567443880bbebc35bd94b4c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (14 lines \u00D7 2): core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:862-874 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:881-894"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt"},"region":{"startLine":862}}}],"partialFingerprints":{"codehealthFindingId/v1":"2918cc2c21f87fa1b27f0f26e220e6479fa3cd152f1924219ecfae441e814730"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (13 lines \u00D7 2): core/src/com/unciv/logic/automation/civilization/DeclareWarTargetAutomation.kt:42-54 | core/src/com/unciv/logic/automation/civilization/DeclareWarTargetAutomation.kt:71-82"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/automation/civilization/DeclareWarTargetAutomation.kt"},"region":{"startLine":42}}}],"partialFingerprints":{"codehealthFindingId/v1":"b449d00d187d443dfe358442103b84ef2393510519496d1430349039c5680db4"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (12 lines \u00D7 2): core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:96-107 | core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:144-155"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt"},"region":{"startLine":96}}}],"partialFingerprints":{"codehealthFindingId/v1":"b333aab96a701698eaeaa4ea08043de8abb4920bdedc7ad666a8fc9a3a1af022"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt:292-301 | core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt:310-319"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt"},"region":{"startLine":292}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3b45157d8b37fc1e6ecd2eb3701010b9e46082f61daf25a92e0d11c0e69b20e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (10 lines \u00D7 2): core/src/com/unciv/models/ruleset/nation/Difficulty.kt:68-77 | core/src/com/unciv/models/ruleset/nation/Difficulty.kt:106-114"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/models/ruleset/nation/Difficulty.kt"},"region":{"startLine":68}}}],"partialFingerprints":{"codehealthFindingId/v1":"606d4f47c1da8861709a97221572f2748baf6a672ec6d2e3169a1b36f7f5a5d6"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 3): core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:181-188 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:222-229 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:313-321"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt"},"region":{"startLine":181}}}],"partialFingerprints":{"codehealthFindingId/v1":"e17c9d65eda4d1f8c88cc2c65af83e24b0e0b196966c5fbfad8a4e8c29a76681"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/src/com/unciv/logic/map/PathingMap.kt:278-286 | core/src/com/unciv/logic/map/PathingMap.kt:288-294"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/map/PathingMap.kt"},"region":{"startLine":278}}}],"partialFingerprints":{"codehealthFindingId/v1":"24081056aa8aa67242c73b41c4d5e6b24448d79719e700509eb3847283f290ab"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (9 lines \u00D7 2): core/src/com/unciv/logic/map/TileMap.kt:337-345 | core/src/com/unciv/logic/map/TileMap.kt:347-352"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/map/TileMap.kt"},"region":{"startLine":337}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb071b9e6b3cd29cd93a8d03700bf3d8daa378a11278b25f902cc8cc09ae204c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 3): core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt:101-108 | core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt:162-169 | core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt:189-195"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt"},"region":{"startLine":101}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a95543af9c2307df938bbf0327b161898743ca21a314f77d2b15bf8d9d5844c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/src/com/unciv/logic/civilization/Civilization.kt:647-653 | core/src/com/unciv/logic/civilization/Civilization.kt:672-679"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/civilization/Civilization.kt"},"region":{"startLine":647}}}],"partialFingerprints":{"codehealthFindingId/v1":"0cc0516d95a99c3eb28652bb87f4be8e8c9adb793cb668d402f0a46e0f7236c0"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/src/com/unciv/models/ruleset/nation/Difficulty.kt:58-65 | core/src/com/unciv/models/ruleset/nation/Difficulty.kt:80-87"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/models/ruleset/nation/Difficulty.kt"},"region":{"startLine":58}}}],"partialFingerprints":{"codehealthFindingId/v1":"1b94de825010f147214ecbfff5cb76107e32dca7e2febaca38eb211e9e57bfc2"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (8 lines \u00D7 2): core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:640-647 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:660-667"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt"},"region":{"startLine":640}}}],"partialFingerprints":{"codehealthFindingId/v1":"2e4a109248e9653549869de9b5515c068a9baa446ab890c163e5a16006bc800c"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/src/com/unciv/logic/civilization/Civilization.kt:1040-1046 | core/src/com/unciv/logic/civilization/Civilization.kt:1055-1061"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/civilization/Civilization.kt"},"region":{"startLine":1040}}}],"partialFingerprints":{"codehealthFindingId/v1":"c58fe5fc54b5a4e88960050e1b6f4ae762fe3dda6257bb69e2bec607cf7b6f9a"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/src/com/unciv/logic/map/mapgenerator/MapLandmassGenerator.kt:289-295 | core/src/com/unciv/logic/map/mapgenerator/MapLandmassGenerator.kt:304-310"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/map/mapgenerator/MapLandmassGenerator.kt"},"region":{"startLine":289}}}],"partialFingerprints":{"codehealthFindingId/v1":"d54f6843a5c8732e650cb1f2461ae4eeae95a8beb32a0e571d3dfa0dcd10afd9"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (7 lines \u00D7 2): core/src/com/unciv/logic/simulation/Simulation.kt:262-268 | core/src/com/unciv/logic/simulation/Simulation.kt:272-278"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/simulation/Simulation.kt"},"region":{"startLine":262}}}],"partialFingerprints":{"codehealthFindingId/v1":"933a8e78982939551ee973e27b7e1b1f9e8b72a1a80d6624e55ab2e3d2f27c41"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/src/com/unciv/logic/trade/TradeEvaluation.kt:226-230 | core/src/com/unciv/logic/trade/TradeEvaluation.kt:440-445"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/logic/trade/TradeEvaluation.kt"},"region":{"startLine":226}}}],"partialFingerprints":{"codehealthFindingId/v1":"24f6f41ae302cf078de96ab756f9a93ff7014ac9d9fa923138ac16b443fca22e"}},{"ruleId":"D4","level":"warning","message":{"text":"Duplicated block (6 lines \u00D7 2): core/src/com/unciv/ui/components/widgets/BorderedTable.kt:43-48 | core/src/com/unciv/ui/components/widgets/BorderedTable.kt:50-55"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"core/src/com/unciv/ui/components/widgets/BorderedTable.kt"},"region":{"startLine":43}}}],"partialFingerprints":{"codehealthFindingId/v1":"f39eb65ec681770865c6a2e1a7291c34715bba275c64171b0e1de80b65168a70"}},{"ruleId":"D8","level":"warning","message":{"text":"Coverage not measured \u2014 test suite did not build: Coverage NOT MEASURED: the repo\u0027s own test suite did not build (a C#/MSBuild compiler error in the test code), so no coverage could be collected. It is excluded from the score rather than counted as a near-zero defect. Fix the test build, or commit the Cobertura/OpenCover/lcov report your CI already produces, and real coverage will be measured."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"8beb176c604706486df63d2215f767f50520c8d949b1d464345de14ded442c69"}},{"ruleId":"D9","level":"note","message":{"text":"No tests found: No test projects found in the repository."},"locations":[],"partialFingerprints":{"codehealthFindingId/v1":"c9bf64cbb5a4ae13d6bcd01fa3bc8d2879d860c73bc67f176ee3c2cecb8adce3"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague \u0027for every [countable]\u0027 unique modifier and links to base ruleset template; consequences/trade-offs are absent: State the exact rule (e.g. modifiers must be distinct per type) and document trade-offs such as increased complexity for modders"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1000.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1fd43b44a2684fd8e7d9e288b36c6530396e035c9525aee6307ada722408ca09"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one sentence) with no consequences; the decision (\u0027Allow mod sounds to be selected as multiplayer notification sound\u0027) and its trade-offs are each only a single bullet in a two-person authoring team: Expand the Context section to describe why resource trades must not be cut short, and add Consequences for both allowing and restricting the listed features"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1001.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"664001cd70a2f43f56183f584e128aaa4eff0829bc256161f3e288d9a7554715"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of features added by contributors but no context/problem and consequences/trade-offs are present: State the problem (e.g. tech picker screen needs only uniques) and document trade-offs such as modOptions complexity or firework cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1002.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7e4bb7d021178de923d52d7a059b34f47e6cc2e8c7b861170292829ffa9445f2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only a crash fix and vague UX/plan notes are present: Add the original problem (e.g. \u0027Spies cannot be promoted by [amount] time(s) without crashing\u0027) and document trade-offs such as how the modifier affects AI evaluation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1003.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b9eecf53ff489e280e01d83c97c880d3a053ef219c083c667bca7b22a60cda6a"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing the cost of allowing floating tutorials or EmpireOverview persistence: Add a Consequences section covering trade-offs such as tutorial spam, EmpireOverview becoming a persistent moddable blob, and how to manage optional persistence"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1005.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c5762eb77425b7d539add6796d78edd2d32338377a351b5a9e067a1b134bdbd2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only implementation notes and a patch list: Add a Context section explaining what spy automation crash was observed and why it matters, then a Consequences section covering the trade-offs of the fixes (e.g. credit storage limits, election-signing security)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1007.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0089d57267d8309f80c91d6ce1a3551b245603d1a6ed8f25900fcb1a86aaa4fd"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of war/automation fixes with no framing: Add a Context section explaining why these changes are needed (e.g. disband spam, spy behavior) and a Consequences section noting any negative impacts such as loss of automated unit replacement or promotion re-evaluation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1009.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d1e01e4b9e01a6ed9750e111eb054133ec8659ca4c6cfd0b0f978eab0e10d784"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of arbitrary game design notes with no decision statement: State what problem the uniques-multiplied-with-modifiers rule addresses (e.g. balancing resource usage) and document the trade-offs of multiplied vs fixed uniques, plus why teleportation and center-outflow decisions are warranted"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1010.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ee16c3b47211ff66d847bf0f9534468b9214e1b7873c6ef0d198d945839d49fe"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of turn-format rules and a tenuous fix for one performance problem plus an unrelated \u0027edit existing trade\u0027 exploit: State the original problem (air-unit display performance) and the two concrete exploits fixed (\u0027edit existing trade\u0027, console add/remove format), then document the consequences/trade-offs such as how the modding queue cleanup affects future mods"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1012.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc523955ef82c900d20da3f7a747fc0d5b49a4d1f4004bf162bed61032e15a48"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of unimplemented unique/visual changes with no context/problem and no consequences; the title \u0027Modding version!\u0027 gives nothing away: State what problem each change addresses (e.g. \u0027Fixes the \u0022Withdraws before melee combat\u0022 unique so it triggers correctly\u0027) and document trade-offs like added complexity of counting filters"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1013.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"723c5ad801abfc7cef659123042f191cab3d15ae822a9f001e0f5061292fff4e"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is narrow and consequences are unstated: the body names only two proposals (passive strength bonuses for force value, civ-building on tiles) and no trade-offs: Add a Consequences section covering trade-offs such as increased complexity of passing civ to build units versus the benefit of being able to upgrade unavailable units"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1014.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"249b62ade1a90df02812274fd876347262553718376323f73f3bb5667c115e1d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of vaguely phrased entries (e.g. \u0027Support for languages using Diacritics\u0027) with author names and one AI-behaviour change entry are present: State the problem each listed item addresses (diacritic support, defending-city automation, warmongering against angry civs) and document consequences such as cost of diacritic handling or how anger penalties scale"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1016.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"13e150176a1123a72375d7cb1b58be157223dcfd65055c6d7ed9162df7f6e19b"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin; only the decision and one minor fix are stated with no consequences/trade-offs: Add a Context section explaining why each change matters (e.g. city focus reset causes confusion when annexed, multiplication adds flexibility) and a Consequences section covering trade-offs like resource consumption or new bugs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1018.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b0509981abd7295b995168e817cafae7d7a15b37d73d5ec4148dc68988a0997"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single one-line commit note (\u0022Added missing deprecation validation for unit uniques\u0022) with no context/problem and no consequences; the body clips mid-sentence: State what problem the decision addresses (e.g. failed deprecation check) and its trade-offs (re-testing, lost data). Add a Consequences section."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1019.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a36984a53b0c5a2c5bdaf488ea41334ee06da74e2d87d1631c1f3f95c6f8fccf"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only a \u0027Fixed X\u0027 list of fixes with no rationale or trade-offs appear: Add the problem each fix addresses (e.g. hidden conditionals causing bugs) and its consequences (rework needed to expose them), plus any new trade-offs for the changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1020.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3dd75c9557e63622e6887f5b921f75f8a567d25c37264ee78f7309669e1f4b"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin (\u0022AI no longer declares war against defeated civs\u0022): Add a Context section explaining why this decision was needed (e.g. prevent unfair advantage from surrendering to an enemy AI) and note any trade-offs such as how it interacts with existing war rules"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1021.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58ed97d093f92a9e71944fd5e6f49d42bfdb86cafa606ef011cc4ee62e841606"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; all entries are fixes with only a by-line noting what was fixed: State the problem each fix addresses (e.g. workboat automation ignoring existing workboats, escort icon visibility) and document trade-offs such as added complexity of the builder screen or renamed cities"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1023.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"feefae86ef453918aba5d3852f4d13a1f42f5bf00a75dd9ed8b149baf9025c2d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact statement: Add a Context section explaining why each fix matters (e.g. \u0027paradrops must avoid movement-range overlap\u0027 for fixed paradrop) and a Consequences section noting any negative side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1025.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fffd45f15c0c1a4f0c8fb46e461a4a34b23abda5f2238380d42e71c47a04b659"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; the only content is a decision list with no rationale or consequences for each change: Add a Context section explaining why nuke animation and randomization matter (e.g. pacing, player immersion) and a Consequences section on trade-offs like increased runtime or complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1028.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00afd060450eef27878704d3449caed89800d58ff1ba0bdc6336b2fac80a364a"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision (add CLI data-dir argument) and one spelling fix are stated; context/problem and consequences/trade-offs are absent: Add Context: explain why a native Windows install is needed and what modding pain this addresses. Add Consequences: mention any runtime cost of adding a new CLI flag, and the spelling fix\u0027s trade-off (a single patch to every project file)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1029.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ed167fe14b697f7b596aed4deb3d7a4468089a9a4de9cd436c714ede9e2e475"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact: Add a Context section explaining why each fix matters (e.g. misspelled mod names breaking gameplay) and a Consequences section noting any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1030.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"878aea06627354167c0564b831f961d2b9659e1eaf9f3651a2f8995b03003d6a"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022gain control over tiles\u0022 trigger leaves your tiles alone\u0022) with no consequences; the two fixes are listed but not tied to a motivating problem: Add why the \u0022gain control over tiles\u0022 trigger matters (e.g. prevents cheating) and document the trade-offs of each fix, such as added complexity or loss of intended behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1033.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a499928f00743aaacb00b1e49afb7ce020ed45db7ed0f5235033a42a8dd2b011"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of unmet modding features with no context (why these changes are needed) and no consequences/trade-offs: Add Context: explain what each change addresses (e.g. global unit uniqueness for strategy variety, recognizing Tutorials.json in validation)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1034.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"870dac7bc739b0d66d4e1bcec43ca76d1c9c2f1ebad6c6c3cce325e8d9f4a63a"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only the size gain and four bullet multiplayer features are stated: Add why save file compression matters (player experience, storage) and document the trade-offs of each feature (e.g. forced resign on inactive player is a new admin burden)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1035.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ed7b09a5df9c8c1ab2cd840b9e696e7ca745db849728f01f46121d0913eaffd"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one short bullet) and consequences/trade-offs are absent; no decision statement: Expand the problem section to explain why a skip button after 24h inactivity matters for gameplay pacing, and add a Consequences section covering how it breaks existing behavior and whether an alternative exists"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1037.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd1bc40d71e2d036a94fbbd7d0199b0587848dced4e444e282947a6dab26bf1f"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of fixes with no decision statement: State what \u0027compute missing from minimum stats only when necessary\u0027 actually changed (e.g. why not compute them always) and document the trade-offs of doing so"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1038.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e50cc18735b7dd7ac959f9dfabd5a80fade7cb85f628bf5101b67dcc8674d9d6"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section (e.g. why override-able continuous rendering is removed and whether it breaks existing animation code): Add a Consequences section noting the removal of \u0027continuous rendering\u0027 as an override setting that no longer applies to Actions, and any impact on existing render-loop logic"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1041.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0a71cbff857fc67e47d65284e4d74f35e0072eaf43bc3a51f84ec1c74c7a83da"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes (crash, memory perf, generalized uniques, prep work) with no rationale: Add the problem each fix addresses (e.g. \u0027conquer city automation fails under load\u0027) and note any trade-offs such as breaking existing terrain-feature interactions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1042.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0e9ec82a92e42dbccb55a39e7178c0bd3be8dd340afaa763139cfa6464e65a88"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one decision and two non-constructive rules are stated; no consequences/trade-offs): Add a Context section explaining why stockpiled-resource-requiring constructions must not be constructed without resources and why purchasing them should consume the stockpile"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1043.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"988057c9e5f394a16b0fe7c66df4cf62260c99200112797b5c5af7b43e86ba1f"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing the impact of moving screen orientation to display and the cost of keeping event-choice rulesets as mutable objects: Add a Consequences section noting that changing the setting\u0027s tab may break existing workflows relying on the advanced-orientation config, and note why mutable rulesets are needed despite the trade-off"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1044.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c71a6d1fe941ccc6e1b8a95d29b8b223234fe24cfa4c33a4c6106984afc00e8"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague one-line rule with no context and no consequences; the body clips mid-sentence \u0022AI prioritizes unit upgrades over purchasing new constructions\u0022 before any rationale or trade-offs: Add Context: why prioritize units over purchases (economy/strategic balance) and Consequences: what happens when this rule is broken (inflation, resource hoarding). Then the one-line decision in a numbered bullet list."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1045.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"601268cad441d886ad757834cea1dad787bb259af26c3d2b6278e360282ab613"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are both present but the context/problem is non-existent; no rationale for adding Barbarian variants or kick/skip-multiplayer rules: Add a Context section explaining why AbsoluteUnits image variants matter (visibility, player experience) and a Consequences section on how variants break existing ally-relationship logic"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1046.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"55b16c5d7fa1a19bc68e8f9b524484e7149c62356b54b4e6c196524a87a39033"}},{"ruleId":"D20","level":"warning","message":{"text":"Informative title but no context/problem and no consequences; the body is a list of features/fixes with no decision statement: Give each listed item its own Context line (why this change matters) and a Consequences section on trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1048.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"47bc83e0dfaa9a3b1eb3435c6bbc6c5f4e786a7125eb26357258ef966bff4141"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a vague title \u0027Significant memory improvements - should allow for much larger maps on memory-constrained devices!\u0027 plus two unrelated filler lines: Replace the empty body with a clear problem statement (e.g. current map size limits growth on constrained hardware) and an explicit decision (e.g. increase max map size to 256x256 tiles), then document consequences such as texture/batch-count trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1050.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3c7e9c62124f6e4bd2e114da152e4e407607d8fca1158f80f0e2496c22f83bee"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are absent; the body is a list of arbitrary tileset/MP-game/modding fixes with no framing: Add an Context section explaining why each fix matters (e.g. WLTK day, incorrect warning for great prophets) and a Consequences section noting trade-offs like added mod validation work or new join-fail behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1052.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78471509510cf80b3622341bb73a49d3ee8226ffdf67a3c5792e7ed77f4130dd"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin: only the modding list (\u0027Trigger uniques from religious beliefs activate correctly\u0027, \u0027Allow comment/unite timed uniques in event choices\u0027) plus a vague re-activation note for Thai with diacritics are recorded; no problem statement or consequences: Add a Context section explaining why win-the-game buildings require better AI evaluation (e.g. preventing gamedev from exploiting weak triggers) and a Consequences section on trade-offs like increased modding complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1053.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f9bdd7147dbad97c415b05f49011442b953b472a5da53f37ef2f16c5ca490ba"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single sentence (\u0027Cannot have 2 research agreements at once due to counteroffers\u0027) with no context/problem and no consequences; the rest are unrelated notes (mod trigger, URL parsing, Top tiles): State the problem (research agreement concurrency) and its trade-offs (counteroffer handling), then document each of the three listed fixes as separate decisions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1054.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a84dde20e09f6981ac7a2c15997bc266a2f595cc5d183be9fd842928a971b762"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; the body lists only resolved ANR fixes and a protection against incorrectly configured mods: Add context (why update IO matters, why ignoring older games is needed) and consequences (build time cost of skipping non-2-week-old games, false-positive risk for new/mods)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1055.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb64f6abf3bdbe2249346045844c8968679af3c28727e3210566269c335537f5"}},{"ruleId":"D20","level":"warning","message":{"text":"Only four short bullet rules; no context/problem statement, no explicit decision (which rule is the real one), and no consequences/trade-offs: State what problem each rule addresses (e.g. \u0027Fixes a bug where victory-type uniques fail when a required victory type appears\u0027) and document trade-offs for each change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1056.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b24b75ed9f0fec1f659d4ec0ee8e55c3f2bd27ceb1b985e1180d32ce72f42b52"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin (only one sentence on why spies steal tech in one turn) and trade-offs are absent: Add a Context section explaining the problem (spies stealing multiple tech steals per turn is exploitable) and a Consequences section covering how it breaks alternate play or exploits"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1057.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"901861451376f7b7d37d466c937f6b29a3dbf099645c88142dfe5a234cc5a192"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section describing why escorting civilian units should not allow unit-carrying withdrawal: Add a Consequences section noting that this rule prevents an escort from being used to carry civilians while the escort itself is carrying cargo, which could be a gameplay trade-off"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1058.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"03218253f004197f730acad2c8a1f5230cb12e93a70ee42ab39be0d9fe8c77a0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of features with no rationale: Add a Context section explaining why each decision matters (e.g. mod removal pain, ANR from resumed unplayable music) and a Consequences section noting trade-offs like cache size or holy-site replacement risk"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1059.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38eaa39e73cc30149fffd4ff928a98ccf578b1de747710fc8449591e916fa69c"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is present but the explicit decision and consequences/trade-offs are both clipped by the scanner before any trade-off section appears: "},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1060.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f205908379611aa5a38b47965262fd139ccdd1f7cf2766e794aea42908080b9"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body lists only decisions (unit icon fallback, tile cost, tutorial, conditional) without any rationale or impact: Add a Context section explaining why each decision is needed (e.g. unit icon consistency, movement efficiency on terrain, tutorial guidance, explicit purchase control) and a Consequences section noting trade-offs like increased complexity or unintended side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1061.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64197cf7c079ea0533c9626bbf53fa4af1df1573bb2d29a5a06ca0702a9d3aa3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only two vague bullet fixes with no rationale: State the problem (e.g. players want to quickly select next units without seeing them) and document the trade-offs of each fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1062.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fa937fc91b50189ab988affca8db47707acbdad35f5fd1fec63452eca838590"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single sentence with no context/problem and no consequences; the body is cut by the scanner clip marker mid-action list (Guard action plus Civilopedia alignment) before any trade-offs: State what promotion/gain/loss triggers were broken or misbehaved so players can understand why this fix matters, then note the consequences/trade-offs such as increased modding complexity and the cost of keeping the version number visible"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1063.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4ca8ebe1f847c55d58081f6941347abc4f7ad972b4a808eb83f2044a646fdf73"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of unrelated patch notes (DoF popup, JRE version, revert, resource uniques, memory/perf fixes) with no context/problem and no explicit decision; the title \u00271064\u0027 gives no signal: Convert this to an ADR by stating what problem each fix addresses, documenting the explicit decision (e.g. which DoF option is selected), and noting any consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1064.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a6bda9639f301d2d14c2068c3b3056c0567c61ac117d215768e6f9a6fad99901"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is narrow and only one of the four elements (auto unit cycle wait action) is named; context/problem and consequences are not present: Expand the body to state the problem (e.g. auto-unit-cycle disabled causes a fixed Wait action to be triggered erroneously) and document trade-offs such as how it interacts with other game mechanics"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1066.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3adbb9e0ca7d53d098bda9845ba40e42af16bc79ba5b6e623805936787882855"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the title is a joke (AI: Use Great Artists for Golden Ages) with only one non-joke decision (\u0027Avoid Growth and Food Ranking Improvements\u0027) cut by clip marker: Replace the absurd title with an informative problem statement. Add context (why growth/food ranking matters), the explicit decision, and consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1067.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cab31cb3951ffd4a08cddbcb661568dbc7252fd489eecc5551837671e1d5138e"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are both present but the context/problem (why place edge images where terrains/improvements) is uninformative and there is no trade-off on placing them under improvements: Add a Context section explaining why edge images sit over terrain/improvements rather than beneath civ buildings, and a Consequences section noting that this restricts placement to those cases"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1068.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea580c452980cabe1c6f40c976b5064571e685bd8d630e8dd321f34390084004"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are both present but the context/problem (why negative-resource trading should not be allowed) and trade-off/consequences sections are thin or non-existent: Expand each decision with a clear problem statement: why allow only positive resource trades? Add a Consequences section on how this restricts diplomacy, e.g. preventing one side from giving up gold to another."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1070.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dce3518887e3d9b20899685a61882c7f2479bf58b07c3e3a1324accb7482d24a"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one mod change listed) and consequences/trade-offs are absent; the decision \u0027allow filter uniques to have conditionals\u0027 is stated but not justified with a problem statement: Add context for each listed change (e.g. why rivers-on-water tiles matter, why scenarios nullify starvation matters) and document trade-offs such as increased mod complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1072.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5a6515f2c30321ebecf8917e98b742e1b6f3383404b687a9fa3233baffdb70bb"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a boilerplate title list with no decision or rationale: State what problem each rule addresses (e.g. \u0027Avoid application not responding on Android multiplayer startup\u0027) plus why it matters and any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1073.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec368acee31368ddfd0073a778a1d6c27a6cbebe7ee7374fe31499fc4d4eb17d"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a one-line rule with no context and consequences; the body lists only two related patches without explaining why they were added or what trade-offs they carry: Add a Context section on why hidden uniques should not show icons (user experience) and a Consequences section covering trade-offs such as increased tech tree clutter for non-hidden uniques"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1074.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"150f42444e1d34bdc52f9ae55d46b0f10c1da6497f9debeda1ca6e74b982ca7b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the list is a patch of fixes with no rationale: State what each fix addresses (e.g. \u0022crashes when swapping while retreating\u0022, \u0022incorrect music state\u0022) and document any trade-offs or why they were chosen over alternatives"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1075.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc43c3435db9ba764f86e3307a4ec6151d2073a027960045d6a7c40c92f69b1f"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of mod changes plus an unexplained decision (move capital function) with no rationale: State why city progress resets on puppeting vs annexing and the trade-off of losing annexation bonuses for puppeted cities. For each listed mod, explain what it fixes or prevents."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1076.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f20238da02e3d85a95b3b7df8b33379af2b9a2f348fa26031cfebe16f9eecf0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of fixes with no decision statement or rationale: State what unit triggers are being used where (e.g. in unit-triggered events) and why they were removed/replaced, plus any consequences such as backwards compatibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1077.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"463f902bdda06cdf43b23cc06000b531ffdd90263f396c82f1d779d563a2f7f6"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision and a single patch note are present; no context/problem and consequences/trade-offs: Add a Context section explaining why large maps require memory performance improvements (e.g. frame-rate drops under load) and a Consequences section on trade-offs such as increased memory usage or reduced tile quality"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1080.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5626eb09c7c8b2264fb9037c7d60a80af3b9a8bb341a49cd68a4f9a1b446850"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; most entries are resolved/fix/test tags with no rationale: State the problem each resolution addresses (e.g. ANR in new game screen, \u0027Unit built\u0027 notification selects wrong unit) and document trade-offs (e.g. decreased base Fort value limits improvements, crop images removes aesthetic detail)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1082.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dcbb3c42c0188131dbde6ba59a63526e133f5b948f47287ed6afcd14b618c672"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are absent; the body is a list of UI fixes with no context/problem and no trade-offs: State what problem each fix addresses (e.g. red pillage-road coloring, scroll indicator) and document any consequences such as increased load or new work for reviewers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1083.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1195e75c63665032b42316504bf9ec8065ac8d3170eb69d4b0deff9802a2baa3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs sections; the body is a list of features with by-lines only: Add a Context section explaining what problem each feature addresses (e.g. sluggish close-unit-table flow, music resuming on resume) and a Consequences section noting any trade-offs such as performance cost or complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1084.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"736abd5b9ec5c6db6f2aaf5404b015ff30696f2d7eac502172d16452d96ab3c8"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin; the body lists fixes but gives no rationale for each decision (e.g. why URL checking matters) and no consequences/trade-offs: Add a Context section explaining what ANRs each fix addresses and any trade-offs of the alternatives considered"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1085.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe4ba7a2d8cf94857d0160236d9ff8a3e5079903928000b1b5805dc64c902a62"}},{"ruleId":"D20","level":"warning","message":{"text":"Only decisions are present; context/problem and consequences/trade-offs are absent: Add a Context section explaining why the \u0027faster map update on click\u0027 is needed (e.g. player frustration from delayed unit actions) and a Consequences section noting trade-offs like reduced responsiveness or unintended side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1086.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"94a2a67fa1481e2e5acd944b5b7dd0c102fa5ed8a04e185a5833ebd74dd92042"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is a single sentence (\u0027City-state stat percent bonuses apply correctly\u0027) with no rationale and the decisions are listed as bullet points (\u0022Terrain images in fonts no longer flipped\u0022, \u0022Pathfinding...\u0022), giving no decision order or trade-offs: Add a Context section explaining why each change matters (e.g. \u0027Percent bonus calculations fail when applied to uniques\u0027 for stat bonuses) and a Consequences section covering the cost of flipping terrain images, loss of flip symmetry, and promotion selection fairness"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1087.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3d62561ddf0821cd04eb0ddebbd383f9f650844e6bdc145f8c38af3cec64892a"}},{"ruleId":"D20","level":"warning","message":{"text":"No explicit decision and no consequences/trade-offs; context/problem is only a one-line rule list with no rationale: State the problem (e.g. modding cost limits improvements) and the explicit decision (e.g. allow stockpiled resource costs for upgrades), plus trade-offs such as increased build-time or reduced flexibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1088.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"21f9194359edeb9baf36051151f1850f6e5ec6dc9b1aa1026bd47bbb757bfddd"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague \u0022Show total number of cities in city table\u0022 with no context and no consequences; the listed fixes (GoogleMaps-like pinching, tweak UI, correct alignment) are unrelated design features rather than an architecture decision: Replace the vague title with something like \u0022Expose the total number of cities as a read-only column\u0022 so it is informative. State the problem (ANRs when loading games, corrupted settings crash) and document trade-offs such as how the read-only column will be queried"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1089.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0dc2d2405c487469a983faa9b0269aa280d972693a2d2847e39b5930cc4a4d4c"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of fixes plus author/patch notes with no decision statement: State what problem each fix addresses (e.g. enemy religion spread converting cities, trade denial notification) and document any consequences (added complexity, new bugs)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1090.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"79ca2bd65dc896234bfc8e927d4b3107b1a7fc60b24be7707b9c99d7d514d9c5"}},{"ruleId":"D20","level":"warning","message":{"text":"Only a short list of fixes and no context/problem or consequences; title is vague: State the problem each fix addresses (e.g. buildings not showing before vs after removal) and document trade-offs such as performance cost for Big Button units due text"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1092.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d90d3c68c7cf2b9519e605890462e2b4cdfb843fb9a925051b215ad050c22f4"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for the four listed fixes; only a decision list with author names is present: State what each fix addresses (e.g. \u0027fixes incorrect mod-download error handling in multiplayer\u0027) and note any consequences such as increased build complexity or reduced flexibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1093.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"deb4ab3efb5a4d3f60e9f9b4708fe7206f948b3fa48428c83a6dd139db784add"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of cosmetic/automation fixes with no rationale: Add why modded rendering performance matters (e.g. load times) and document trade-offs like texture quality for unmodified content"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1094.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"06f6d285c05cd9f0d104cf6d1993bcd8a54ddc0e42547e886ba1b8bcf06afb89"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; all four elements are present only as bare bullet points (white blocks fixed, stat categories added, spy randomness different per city, drag-resize gesture) with author names: State the problem each change fixes (e.g. white blocks appearing on new game screen, inconsistent building stats, unplayable spies in same city), and document consequences such as performance cost or breaking existing behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1096.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5eaf7a3f264c00313f73cba886c33685db51ddaaa876f1861f3bdb1bd8e2294f"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is an empty one-line title with no context and no consequences; the body lists only a modding change (\u0027modding:\u0027) plus a vague \u0027Fixed Unciv not starting on MacOS\u0027 and nothing about trade-offs: Add Context: why texture packing was reverted (which bugs were fixed) and Consequences: loss of faster rendering, breakage of mods requiring it."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1098.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e83e6f0757ebdf609f78cc5277ce8d6256e5d45720e007a6589b58685b0ff284"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a one-line decision (\u0027Triggers a global alert upon build start\u0027) with no rationale or impact: Add the problem (e.g. \u0027Builders are alerted too early to avoid false positives\u0027) and document trade-offs such as alert fatigue or false-positive handling"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1099.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5b20c5366d06d7a3db37ffd0a5bb8b37ba4daf2f5939ac578900150faf36dc0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with no rationale: State the rendering-performance problem being addressed (e.g. frame-rate drops under load) and document the trade-offs of each fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1100.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"36a9eade543b2262a116e988ac01c8978994ec3de62f14314ac9686a8c92550e"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of features/fixes with no rationale or negative impact: State what problem each fix addresses (e.g. \u0027ensure unexplored tiles are visible\u0027) and document any trade-offs (e.g. \u0027Shuffle Civ may reduce replayability for casual players\u0027)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1102.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce487f40c871911290b90a6eaa17529ffb349ac19b1d25afd9e36869b31582d7"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the four elements are all present in the title but the body is a list of fixes with no narrative describing what each addresses or why it matters: Add a Context section explaining which maps/units were failing (e.g. automated road connections through impassable tiles, stockpile names not being human-readable) and a Consequences section noting trade-offs like pillaged units still healing and the save-feature delay"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1103.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4a72699208e84f2391cff8fec23bdbea4aa86649bb879d6c302b3c1ab19199f"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single vague sentence (\u0027AI: choose policy branch at random between those with the least remaining policies\u0027) plus two unrelated cosmetic patches; no context/problem and no consequences: State what problem each decision addresses (e.g. crash on resource exhaustion) for clarity, then document trade-offs of the random-branch policy (long-term predictability vs. deterministic failure modes), and give a rationale for the XP naming change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1105.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"adc790ce4ab1d5d9da10251c29abf4a065c91bd31c6560f5d382d6f2ce7ae6b0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of unrelated patch notes (add .ico, add tile setpillaged, fix duplicate units, activate free promotion upon promotion gain, add statuses to promotion screen, hide hidden-in-world resources from overview tab, solve duplicate resource bug, fix settlement-population buildings): Replace with an architecture decision stating the design goal (e.g. \u0027decouple world-screen and overview tabs so hidden-in-world resources are not shown in the public overview\u0027) plus its rationale and consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1106.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7f29152ada1f522022730ffe606d396f51e71d1c59808eabd6b815e26d156cdc"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are absent; the body is a list of patches with no rationale or trade-offs: Add a Context section explaining why these filters were needed (e.g. preventing mod-difficulty leaks) and a Consequences section noting any downsides such as increased complexity for new mods"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1107.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"432c1eb5fb70eb8f69327fa1d66a248b3ccb7ca6e406a8707c418867befad854"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of patch notes (bug fixes, new features) with no decision or trade-offs: State what problem this ADR addresses (e.g. making AI value resources at set prices, allowing fair stockpiling) and its consequences (e.g. resource scarcity risk, XP cost inflation)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1108.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1fed28dae29e452388023a378ec884aeb8fc01a523e4a7129f6293bd33e6142"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague one-line statement (\u0027Sort city religion overview by number of followers\u0027) with no context and no consequences; the listed modding changes are also not fully explained: State why sorting by follower count matters (e.g. balancing gameplay) and enumerate each mod change with its rationale and trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1109.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3669e1f88ba77f7db296fb9de9ffc43e16ad4b7c640e6929feb89681910c1e29"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only a bare decision statement plus chore-fix entries: Add a Context section explaining why science overflow rebonusing was removed (e.g. balance concerns) and a Consequences section on the trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1110.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7289d853ef0061224b4a8ca4b94589b7ee61482d81bd3f483b8f8aad5be68129"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; no consequences/trade-offs: Add the game problem (e.g. bomb shelter placement conflicts with disabled nuclear weapons) and a Consequences section covering trade-offs like false-positive shelters"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1111.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"58e44cab272f597e335087fde0011426a40b6e4e27209009287164bf69df9c6f"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a vague placeholder (\u0022Modding: Warn against Resource uniques cannot use countables that depend on citywide resources\u0022) and the two cited examples are not real mods but placeholders; no context/problem and no explicit decision/consequences: Replace the placeholder title with an informative name (e.g. \u0022Resource Uniqueness Modding: Prevent Citywide-Dependent Countable Usage\u0022), replace the placeholder mod names with actual named mods, and flesh out a real problem statement, the rule it enforces, and its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1112.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78dcfe00b33366d757995e11c083acd4e35e1a6da812c5f9906246ea2c329d2a"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of modding patches with no decision or rationale: State what autosave crashes are occurring on which Android devices (vendor/OS versions) and why they matter, then document the fix (change save policy to countable \u002B Unavailable for those devices), plus any consequences such as reduced mod compatibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1113.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c6dbfae7439f3b26f602de82a53f124baa6a5c297a54660936686569d75deae"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of patch notes (tiles/circles, conditional settlers, fadein/fadeout visibility, sleep/defend notification, faster listing, pillage moddability) with author names: Replace with an ADR describing the problem each change addresses and its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1115.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"797123d097c4e4deeb976b311881def65d230055738b22b44a8e08e525dac096"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; only a list of modding fixes is present: Add the problem motivating this ADR (e.g. inconsistent circle/hexagon tile placement for movable tiles) and its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1116.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bd8ab25c6789284808367d2a81da57064e9ffc46f58c4027f00d43f1ebc74c96"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of modding fixes with no framing: Add a Context section explaining why tile-swapping checks who transports units (gameplay fairness) and a Consequences section on trade-offs such as increased complexity for verifying ownership"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1118.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a32ebc5716bd6f89005449ff9a8d675fd4037ddf401a864926c621c3cacdb5b5"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section and the decision (e.g. \u0022uniques are never sorted alphabetically\u0022) is stated only as a one-line rule with no rationale or negative impact: Add a Consequences section covering trade-offs of unsorted uniques (user frustration) and the validation fix\u0027s own cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1120.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ab175644495273339ffb2f0eafe31552202d58f2fb3356403d97777522b5dcd2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; no consequences/trade-offs: State what problem the decision addresses (e.g. allowing conditional settlers with uniques) and document any trade-offs such as increased complexity or new bugs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1122.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"45536a9df046897981a4ebcb853bc1210c20f079c13909054284834a76cf6a7b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of arbitrary decisions with no framing: Add a Context section explaining what unit triggerables are (e.g. triggers on new units) and why they should not fire again, plus a Consequences section noting any trade-offs such as breaking existing gameplay or requiring re-validation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1124.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"71c40a6005fc150a2d0d16a3ad95c2040271dc4eda75fe5ef27f899ceb36b413"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one-line \u0022Don\u0027t choose one-time-action promotions\u0022 title and no rationale) while the body is mostly implementation notes with no consequences: Add a Context section explaining why one-time-action bonuses are objectionable (e.g. they feel arbitrary or break existing logic), then document the trade-offs of the alternative approach"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1125.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ffbf159da6d394eb6e20680ac0541a9de99ea70c6116b0f6a4e620dc8a09830f"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a one-line emoji-driven bug note (\u0027Disabled android-specific behaviour of text fields since it\u0027s broken currently :|\u0027) plus \u0027Fixed city screen buildings panel not fully scrollable\u0027 and \u0027Only add mod search textboxes if there are at least 10 mods (cleaner UI)\u0027 - all are feature tickets, but no Context/Decision/consequences section explaining the problem, the explicit decision being implemented, or its consequences: Add a Context section describing why android-specific text-field behavior is problematic and why scrollability matters for the buildings panel. State the exact decision (e.g., disable the behaviour) with rationale, then document trade-offs such as loss of cross-platform consistency"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1126.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a9ed02119df9942cae6dcb7edd939d12033770aac31d24cb4ed02763be48ae0f"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only \u0027Don\u0027t spawn prophet in holy city if it\u0027s been taken over\u0027) with no rationale and consequences are only hints (\u0027Avoid crashes from ...\u0027); the ranking/modding stats table scrollability claims are also present but not tied to the decision: Add a Context section explaining why holy cities should not spawn prophets after occupation (theft, player intent) and a Consequences section on trade-offs like false prophet presence or mod crash coverage"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1127.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6c63cb12520a046877513c4214dfca10996ea08d2286eb99dcf70a70570d3d56"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for the four listed policies; only a policy-filter countable is named with author: Add a Context section explaining why each policy matters (e.g. \u0027split atlases can cause frame-rate drops under load\u0027) and a Consequences section noting trade-offs like added work or runtime cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1128.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad83056d39ee03250af4a8bbf36a76190d78e413fdeb407f427c5ee06730eb1"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of unexplained fixes with author names: State what each fix addresses (e.g. \u0027fixes false positives where cities show \u00220 turns\u0022 without researching the resource\u0027) and document trade-offs like added complexity or new bugs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1129.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"95e00a649278dc30b92ff76a44d1068a1f4b443f6c2c0d8b94c8f03ae17b705b"}},{"ruleId":"D20","level":"warning","message":{"text":"The title \u0027Mod checking: Catch unexpected validation exceptions\u0027 is informative but the body is a list of unrelated patch notes (Ending Golden Age unique, Fix Civilopedia) with no context/problem and no explicit decision/consequences: Convert each entry into an ADR: one contextualizing why mod-checking matters, another stating the explicit decision (e.g. add a ModCheck registry to detect uniques), and a third covering consequences like false-positive tolerance and how it interacts with existing validation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1131.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"81ea528f11a0afcf6e702b96131051a560f324d9300bc4a04d9cd8e2d03246b7"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only three unrelated patch/fix titles with no decision or rationale: Add the problem (e.g. trade offer peace treaties fail because Gold is mistranslated) and its consequences (e.g. diplomacy broken, player distrust), then document the explicit decision and any new trade rules"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1132.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f4e8764493d41997fca9e89e249d72e268906344969cb65233b81f9e835f2f2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of tasks is visible: Add the problem each task addresses (e.g. missing diplomacy screen image annotation, broken translations) and its consequences (e.g. rework needed for new units to auto upgrade, Civilopedia link fix)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1133.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2ca87966f25f9df50536ade1a57fddab5f5a5d3518131029bb514b66f17b2485"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only arbitrary slogans (\u0027connect road works when railroads don\u0027t exist\u0027) and a requirements-simplification list appear: State the problem (e.g. \u0027connect road fails under railroad presence\u0027) and its consequence (e.g. \u0027railroad networks must still be traversable by roads\u0027), then document the explicit decisions and trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1134.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c4392b208f974eac19019e736388763fda85020bdbd179a76582db8fab106def"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision is clearly stated and the body is a list of unrelated patches (sprites changing color, barbarian workers constructing improvements, modding stat reserve, console turn setting) with no context/problem or consequences: State one architecture decision per line (e.g. \u0022Sprites change to base color on movement\u0022 as an explicit rule), describe the problem each fix addresses, and note any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1136.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"27c391e63fe167cf79e24c140e61fe6032c1eefcdb92fcf7fe846525f1ab710b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for any of the listed fixes; only task/authoring metadata is present: Add a Context section explaining why each fix matters (e.g. number formatting bug, tile-control usability) and a Consequences section noting trade-offs like increased code complexity or loss of readability"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1137.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d466f016b72545594b3d6ed7f11cb6ab69a859e5017e4d6dcfedf9711184946"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague \u0027better handling of improvement-buildings\u0027 with no context/problem and no consequences; the title is uninformative: State what tile damage AI currently ignores (e.g. only heals on ruins) and why it matters for maintenance, then document the explicit decision (which tiles to heal when) and its trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1138.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e3444903dafadf9628dd91636c1fba2e3bcc7cc1489a43dc20e3e54f17efedca"}},{"ruleId":"D20","level":"warning","message":{"text":"The title \u0027CPU performance improvements\u0027 is vague; the body lists only three fixes (console scrolling, quoted input find, auto-update Uniques) and a non-Natural Wonder mountain requirement with no context/problem or consequences: Rephrase the title to reflect real subject matter (e.g. fix console scrolling on small UI settings). Add Context/Problem for each listed change and Consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1139.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"410ae2c4b832c97e5e8571119f8716dfcda0c9f70d1421051e9ab6d4251da420"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a thin list of fixes (localized numbers, nation color validation, settler capture) with no context/problem and no consequences/trade-offs: State the problem each fix addresses (e.g. localized number parsing for non-English regions, invalid nation color detection), explain why it matters, and document any trade-offs or workarounds"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1140.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5052af83b5247fbc99d6779385d08e6a0c3b58bffdc83b07cea966d3d3e16117"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only the two patches listed) and consequences/trade-offs are absent: Add a Context section explaining what tiles countable by the patch means for game balance or economy, then a Consequences section covering trade-off risks such as overcounting or breaking existing systems"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1141.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"57227ee772bb699ae883c0a660dca221713267628df99a3ea033ae42d204ddd0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for any of the four elements; only titles and a translation-translation filler are present: Add a Context section explaining what each ADR addresses (e.g. why swapping spaceship parts is needed) and a Consequences section noting trade-offs such as balancing difficulty or game-breaking risks"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1142.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"428b66a916967cfb0b6570e04df16517e097cc9414cc1ce72f945b05da57f39e"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only the decision statements plus a \u0027By...\u0027 note appear: Add context (why line-of-sight matters for nukes) and consequences (false-positive tolerance, environment-check cost) under each decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1143.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d19c065539b2d166380a3bb735e8df3227e77c00b2e9679958314497a103bab"}},{"ruleId":"D20","level":"warning","message":{"text":"Title \u0027Better way to brighten colors\u0027 is a non-sequitur; no context/problem and no decision in the visible text. The body lists unrelated bug fixes (\u0027Fix AI civilian unit not escaping enemy\u0027, \u0027Fix translation for an unknown civilization\u0027) with no consequences.: Rename to something like \u0027Bug fix: Civilian units do not escape enemies\u0027 or \u0027Translation of unknown civilizations\u0027. Then state the problem (AI/unit behavior, translation gaps) and the explicit decision (fix each listed bug). Add a Consequences section on trade-offs such as minor gameplay balance shifts from escaping."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1144.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"77484419ec24249c19d03baee4d9f2baa1bfdf37ff115433fbefbe062e1737ae"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of unrelated patches with no decision statement: State what problem each entry addresses (e.g. embassy-building workflow, AI escape bug, mod-name translation failure) and document trade-offs such as false-negative diplomacy or image-download reliability"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1145.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cd3eca62b229708620797838514324633bcca4d28d0e16f504c8794380b8950"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the entries are all single-paragraph decisions with no framing: Add a Context section explaining why each decision matters (e.g. city-building fairness, worker escape mechanics) and a Consequences section noting trade-offs like new bugs from WLTK fireworks or alert fatigue"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1146.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"10312e49193e8a2ab35be8db8f60e4d6138ce86a6a1435b4bdc849b0b153288c"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are both thin; the body lists only AI features with no narrative explaining why counteroffer notifications should be removed for invalid trades: Add a Context section describing when trade requests become invalid (e.g. empty or unowned slots) and a Consequences section on how this prevents abuse, plus an explicit Decision statement"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1148.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7271dbc2aba93161e1ee2c9ac3742a68723903812d5f79c399e2ea41de53d60b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of patch-level fixes with no decision statement or trade-offs: State what the ADR addresses (e.g. crash on first turn, missing misspelling corrections) and document the consequences for each fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1150.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7c5ce08aae4654c525920a3a26526b2f9eaba9f5842d5c94ad4ad651e198aa87"}},{"ruleId":"D20","level":"warning","message":{"text":"All three ADRs are single-paragraph decisions with no context/problem and no consequences; the title is uninformative: Each should state the problem (e.g. Ancient Ruin appearing on higher difficulties) in one sentence, explain why it matters, and note any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1151.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"369b086c9e80c120b017c6044324a1d9d43526693ef5675f2aaadcd519c03174"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of unrelated bugfix titles with author names: Replace the title with an informative problem statement (e.g. \u0027Allow spy surveillance to proceed without active tech stealing\u0027) and add a Context section explaining why this decision matters, plus Consequences covering trade-offs like increased risk of tech exposure or false positives"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1153.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7a33f2978077e9567cb9952b598a807f525ee46f29cc6c6a4965c37fca9a21d"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a single vague prompt (\u0027Fix combat conditionals not working correctly\u0027) and the body records only two arbitrary AI worker-automation goals with no context/problem or consequences: Give each AI goal its own Context/Problem section explaining why settler automation needs to be fixed and what trade-offs come from adding more workers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1154.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6995711fd75130c475f4a50a0558cebd2a90cd06d7f1401376cf02a8f9d1e8e0"}},{"ruleId":"D20","level":"warning","message":{"text":"Only two fixes; no context/problem and no consequences/trade-offs are stated: Describe the problem (map editor tile click does not show stats) and its impact, then document each fix\u0027s rationale and any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1155.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fe3b83a71fd53bc1b14c7717e5d17d6a995823e248fddfd7a10700bc22065603"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only vague decision statements (\u0027Allow AI to move-and-settle\u0027) with arbitrary task lists (Victory Type for Brave New World) under By names: Replace the empty body with a clear problem statement (e.g. \u0027AI struggles to adapt on high-difficulty maps, so it should settle more easily\u0027) and an explicit decision plus trade-offs such as reduced challenge or fairness"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1156.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8baf5825aaaad692b8e61c0af4d3b052ab90a2e63b50ed2ea3643022d4ea494d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of decisions (city-state icons removed, healing-on-dangerous-tiles fixed) are present: Add the problem motivating each decision (e.g. \u0027multiple images on last mod is distracting\u0027) and document trade-offs such as loss of city-state icon guidance or the cost of heal-on-dangerous-tile"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1157.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"96cf623537cb2af3082a84a2467ef6b61143cf2ea939304db6c6eff7172c3db4"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only \u0022Handle mods removing techs, adding/removing eras\u0022 and \u0022Post-battle movement doesn\u0027t occur if during the battle the unit lost movement points\u0022 are stated) with no decision or consequences; the AI updates context is a placeholder tag: Add a Context section explaining why these conditional failures matter (e.g. modded tech selection, post-battle mobility integrity), state the explicit decision fixing them, and document trade-offs like increased code complexity for re-evaluating conditionals"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1158.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"442ea29044fbf0d1f55067f1095b66a69e8537bee866740cc4ef8665523037dc"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are both present but the context/problem is non-existent (no problem statement) and trade-offs are absent: Add a Context section explaining why peace trade ends notification matters (e.g. it feels unfair when you lose a war without warning) and a Consequences section on how to handle the new behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1160.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ddbd0d195e54f0d7adca30abd30d99b84b881e053f6dcd7dff8ecb18c9ff8f"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision \u0022Added map autosave\u0022 and a list of fixes are present; no context/problem and no consequences/trade-offs: Add a Context section explaining why autosaving is needed (gameplay/bug fix) and a Consequences section on trade-offs such as memory usage or corruption risk"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1161.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b05bf6d078b479310aea10e78d02d03ec6630dacee7b8461db9ea6cbaee6243c"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single mod constant (Add cityAirUnitCapacity ModConstant) with no context/problem and no consequences; the remaining entries are feature names or vague notes: State the problem each decision addresses (e.g. rare crash on map editor close, non-visible tile rendering), give an explicit Decision line for each fix, and document trade-offs such as mod compatibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1162.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d87683310f8450ac2f86cd746c314d368bd26ad00c9603bafeeaadac720b43f2"}},{"ruleId":"D20","level":"warning","message":{"text":"Only two entries in the list are named; the title and body give no context/problem and no consequences: Give each listed change a descriptive problem statement (e.g. \u0027Civilopedia lacks global uniqueness for policy/belief\u0027) and its trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1163.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f143d3f8a9d527fc81bbd3f8a2ba0eff225be99e4bdd81da65fd5fcfb5a53084"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Fixed crash on declare war with triggers\u0022) and consequences/trade-offs are absent; the decision \u0022can no longer repair improvements in neutral territory (exploit)\u0022 is restated as a title but not expanded: Expand the context to explain why this change was triggered by the crash, and document the trade-offs of limiting repairs/replacements in neutral territory"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1164.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ca4ce8634e77a4dec287a63d8c2d3e3b3b0d0111ab26388492d9cb8119922b6b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a decision (allow weighted AI decisions) with patch notes and change lists: State the problem (weighted choices for AI reasoning) and its trade-offs (game balance/decision weight bias), plus any consequences of allowing this feature"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1165.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f81bf4fec050f96b80271302f54179daa2d761884689ff179b7455bea8ae1ede"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of commit messages with no context/problem and no explicit decision; the title \u0027Unique validation: Find possible misspellings for incorrect modifier parameters\u0027 is informative but the content is pure authoring notes: Convert this to an actual ADR by writing Context (why unique/modifier parameter validation matters), Decision (the rule/generator/algorithm used), and Consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1166.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3a28f2e0c69a5f0572e37c68bac7ff331c6dfc6fa9e4b74b67927e98781ef08"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a two-line policy with no context and no consequences; the body is cut by the scanner mid-pairing: Add Context (why siege units cannot attack cities without health) and Consequences (e.g. how to defend against this new rule). The remaining pairings are weak and clipped."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1167.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"303e9dc822edce4cd33e2a95034050193038e27fe59afaedd189089f367c3126"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a vague title \u0022Avoid rare crash concurrent modification when calculating construction costs\u0022 plus two modding examples with no rationale or impact: Add the problem (concurrency bug causing crashes during cost calculation) and its consequences (reduced reliability, lost players), then document trade-offs of the fix (e.g. slower cost recalculation)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1168.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b555c42a44e2d6b654b99e92ff3ecccc6b2ab4a1a5fddcad0bf8b16ec3654b48"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for any decision; the three entries are feature tickets with no narrative: Add a Context section explaining why each ticket matters (e.g. Ancient Ruins breaking under conditionals, Leader Titles being non-unique) and a Consequences section noting trade-offs like new bugs from unit-city destruction"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1169.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"87ac6a658ed298c99874f643c4b31f36a536910d4d49799d3ad0a38f0dd6bce7"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a conditional rule (\u0027Remove building-improvement if the building is no longer buildable\u0027) with addenda but no context/problem and no consequences/trade-offs: Add why this decision matters (e.g. prevents clutter from abandoned buildings) and list consequences such as how to handle existing improvements or whether new ones are allowed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1170.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1ef82269680d7fc57370b74b083fccf81fe721d68e404baf28ff8a181f4f88ea"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision and a partial list of fixes are present; no context/problem and consequences/trade-offs: Add a Context section explaining why Libgdx was upgraded to 1.14.0 (e.g., resolved Wayand/Android bugs) and a Consequences section noting any new trade-offs such as breaking existing mods or requiring rework"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1171.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"16a8c1be306193885d2309b088c5be9f5587a347e179d02feffafbe005a908a4"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for any of the listed changes; only a \u0027Fix X\u0027 list with no rationale: For each change in the list (e.g. add/change port ability, fix translation bugs) explain what problem it solves or why parallelization matters"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1172.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2b63e5170f7fc69cef0b15faae5bd9e8715006660b8e48ee33e9e608cb026940"}},{"ruleId":"D20","level":"warning","message":{"text":"Only four short fixes listed; no context/problem and no consequences/trade-offs: Add a Context section explaining why each fix matters (e.g. parse errors after download are disruptive) and a Consequences section noting any downsides of the proposed changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1173.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f937751bc8fff8fc7b1c946490457b105f35f1aa9689bb208b864f64108092e6"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of cosmetic fixes with no rationale: Add the motivation (e.g. buttons are misaligned/clickable regions overflow) for each fix and document any trade-offs such as background map scaling distortion or resource stats accuracy"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1174.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"26abfc5b1a1a34e9dcfcb5cd00d3690187c12488434045f76ecbaf73db1f9a9f"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of patch-level tasks with author names: State the problem each change addresses (e.g. broken minimap state after maximising, compatibility with rounded corners) and document any consequences such as rework needed for relocated buttons or new MP display logic"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1175.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8b84ce5e4ba0f430d2147cc15d7e8201464634e277f816043df882507703cf4b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of feature/bug fixes with no rationale or impact: State what map generation speed was previously unacceptable (e.g. long load times for large maps) and why this change addresses it, plus any trade-offs such as increased complexity from new widgets"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1177.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"232f8f19aca55f5dd51adb4afafc8c3b8fa89f56e0707375e86303c0d5f0757f"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of unrelated modding fixes plus a civilopedia link with no decision: State what problem road per-turn costs solve (e.g. players misinterpret movement/attack range) and its consequences (computational cost vs readability trade-off). Then document each listed fix\u0027s rationale, consequences, and any new problems it introduces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1179.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"885327dd37b1ecfdb1355b6e4264098fd465768da46e39c59e4613916f709185"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is an empty list of fixes with no context/problem and no consequences; the title \u0027Units that upgrade continue escorting Nation colors unchanged by multiplayer chat\u0027 names a design change but does not explain why it was chosen or what trade-offs it carries: Add a Context section explaining the problem (e.g. escort behavior conflicting with color changes) and a Consequences section covering trade-offs like escort mechanics breaking when players change their nation color"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1180.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bef0fb5896bf180b1574419b9088389cb54f1b0eb60198e4d48ffb65b3fbb611"}},{"ruleId":"D20","level":"warning","message":{"text":"Every entry is a short patch/feature bullet with no context/problem and no consequences; the title \u0027Memory \u002B CPU performance improvements\u0027 is vague and the body is entirely feature lists: Add a Context section explaining why memory/CPU performance matters for Civ6 (e.g. long campaigns, AI load) and a Consequences section on trade-offs like increased frame-rate stutter or new bugs from name changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1181.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d6a863e409839e5736516a9d56eb90133e19722fac8df8169e810db900e86cab"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin; only three AI fixes are listed with no rationale or consequences. No decision and no trade-offs.: Add a Context section explaining why each fix matters (e.g., encampment-finding timing for ambush success) and a Consequences section on risks like over-splitting or worse target selection."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1182.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb0e3d7d3a6b64f64bd5bed4b8201a05d9a7e7617b2df1816267183cc64f963f"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision list appears; context/problem and consequences are absent: Add a Context section explaining why map width matters for distance checks (e.g. pathfinding/attack range) and a Consequences section noting trade-offs like reduced performance from fewer tiles or alternative workarounds"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1184.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fd7ddfc0e660b98ff9c503446a3c572cc074ea14aff6d201568d23320d2b7a7a"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only bare bullet lists of features appear: Add the Context section (why tile-to-work picking matters, why VictoryScreen crashes matter) and a Consequences section covering trade-offs such as false-positive AI behavior or added complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1185.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6b215e5ae72f5f98afa10e385411d431215d59d26f4a5d470d48206cc4f97a0"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only \u0022Fix City button problems\u0022 listed) with no rationale; consequences/trade-offs are absent: Add a Context section explaining why the fixes matter and a Consequences section noting any new trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1188.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6a0acc03882fe801911c3dab52e1ab13a3f2b84eb7cbc7fcc3482c8a91546617"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only the incompatible improvements listed and a vague modding note) with no consequences; decision is a list of fixes but each fix\u0027s rationale and trade-offs are missing: Add a Context section explaining why terrain-incompatible mods should be phased out (e.g. consistency, backward compatibility), then for each listed improvement state its impact and any real-world cost it imposes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1189.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ff80da97c495be635a3409284d1ec0a793944d5c39d6d44543351ad1daae7ef"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of change tickets with authors: State the problem each ticket addresses (e.g. first-turn time in MP games, AI not sending workers to foreign territory) and document the trade-offs for each decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1190.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"edf84e9d498ed0f0f4267a98c229965c677c471b5da5739c6a57e23a1cff894e"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of patch-level change tickets with no context/problem and no explicit decision; each entry is a one-line task plus author but there is no overarching ADR framing: Convert the body into an ADR describing the problem (e.g. MP first-turn time, terrain-change order) and the decision (correct ordering, restore tutorials), then list the tickets as rationale/proof points"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1191.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64e4729fa8987f6c716a6da7796d3e4c34785c938b875d7d66b22eba3b7a56a1"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision is framed as a coherent architectural choice; the entries are mostly feature/bug fixes with no overarching context or consequences: State the problem (e.g. \u0027unit promotion notifications fail to appear when promoting a non-countable civilization\u0027) and the explicit decision (e.g. \u0027make [resource] of [civ] Civilizations counts so promotions trigger only on actual resources\u0027) along with its trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1192.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9b14e2f190d33887cc401490a34559342eadf1af93a0f16626f237d9b1f5a4ff"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Fixed crash on unit wander\u0022) with no rationale; the decision \u0022Units unset sleep/automation on manual repair commands\u0022 is a one-line rule with no consequences and no author context: Add why units should not sleep/automate manually: e.g. prevent infinite loops, ensure deterministic behavior under repair. Document the trade-offs (e.g. players may need to re-apply sleep/automation after fixing it) and link the original crash thread"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1193.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c33fd36708dbcad46b1ac72231e20eae310b6a7dbc9cefd0296cd278911a2004"}},{"ruleId":"D20","level":"warning","message":{"text":"All four entries are feature/bug fixes tagged to a modding author but the context/problem and consequences/trade-offs sections are missing (only titles appear): Add a Context section for each entry stating what was broken and why it matters, then a Consequences section noting any unintended side effects or alternative trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1195.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bfc2f7526f3ba518ca2dd6386acf7b4a85dcc93a4cd5d0f48ed20d8737a9d580"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a vague placeholder (\u0027Fixed map generation on world wrap and 3 continents\u0027) with no problem statement; body contains only the decision (use default tileset if configured one exists but cannot be loaded) and an unrelated game-speed adjustment note. No consequences.: Rephrase the title to state what it fixes (e.g. \u0027Fix map generation on world wrap so 3 continents are generated\u0027) and add a Context section explaining why world-wrap map generation matters, plus Consequences covering tileset loading failure behavior."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1196.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64999fe40756ec976a3c2b6c2a1f6b99062746c925d6b9ec461dd63f6d416511"}},{"ruleId":"D20","level":"warning","message":{"text":"No Context/Problem statement; no Decision body; consequences/trade-offs not present: State the specific modding problem (e.g. divide-by-zero in expressions) and the explicit decision (default to zero instead of crashing), plus a Consequences section on how this affects existing code and whether it breaks new features"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1197.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aec528a83ed99dbc220fa064946cde62e279a75fd0c820db9521622e673185b"}},{"ruleId":"D20","level":"warning","message":{"text":"All four entries are feature/behavior titles with no context/problem statement, no explicit decision, and no consequences/trade-offs; the visible text is a list of unqualified labels: Each entry must name the problem it solves (e.g. \u0027unique food consumption by population across civilizations\u0027) and its rationale plus any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1198.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"78aa483196b69576c46bdc4872a72527b682611909ad2b655851d220286f4c73"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is non-existent; only a list of fixes and one vague compatibility note (\u0027compatible with resource - By chenxing61\u0027) appears: Add the problem each fix addresses (e.g. \u0027unit promotion notification shows wrong name\u0027, \u0027negative modifiers accumulate beyond limit\u0027, \u0027quests are inconsistent random\u0027) so readers understand why they matter, and document consequences like how new fixes break existing behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1199.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5ca8b9bdea5e42e971d57a9764ed76aa24f1b8aeeac6bc3a44355767efc7127d"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin and the consequences/trade-offs are absent; only resolved policy changes are listed: Add a Context section explaining when overridden branches should not \u0027stick around\u0027 and why the missing-mod detection is needed. Add Consequences noting trade-offs like increased download load vs the crash-risk fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1200.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42f76809a9ec0a8e65f09d1e54b55ce02d8a0d63800195942f49afa7f83e6342"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one bullet about resurrected civs and one about puppeted cities) with no consequences; the decision list is a modding feature set plus an unciv-loof note that is not itself a decision: Add context for each listed change (e.g. why gold purchase cost overrides default, what the failed behavior was for puppeted cities) and document trade-offs such as increased complexity or new bugs from overriding triggers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1201.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"471d0d60879f0b114d8a0ceb10a5ede2eac98c5c23eeece88fa6ef09bfcfd9d5"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; the only visible content is a list of unrelated game/XP-change patches plus an unidentifiable title \u0027AI denounce automation - By unciv-loof\u0027, with no decision or consequences: Add a Context section explaining why the resource-star icon matters (visibility, consistency) and a Decision section stating what it does; each change in the patch list must also be placed under its own dedicated context/decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1202.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"01c75f0119acd1f2b17a504a6eaa097964a4e12128944992a670c3ede56515dd"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Catch base terrains with occursOn in ruleset validation\u0022 and \u0022Removing improvement-creating buildings where the no city tile has the improvement, no longer crashes\u0022) but the explicit decision and consequences/trade-offs are cut by a clip marker mid-sentence; the remaining content is unreviewable: Add a Context section explaining why large maps cause memory crashes (e.g. terrain size limits) and a Consequences section on trade-offs such as increased build-time for map generation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1204.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc14761965f4101ef2f0418dc34a3d482a374b65f7ebc9178f5cd9633b443727"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a bare \u0027changed default max RAM from 1GB to 4GB\u0027 with no context or consequences; the remaining entries are feature/spy restrictions and a NaturalWonders change without any contextual problem statement: Replace each entry with an explicit Context (why this change, what it addresses), Decision (the exact value changed and why it is set that way), and Consequences section for each one"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1205.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b576e0a19c9ddb5240be28c4b30d957c38625e37894b107b5dde9a0cc3e2567f"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not present in the visible text: Add a Consequences section covering how new players will no longer be able to offer negative gold and what happens when existing \u0027-50\u0027 buttons break"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1206.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"070832b34039146894466ae562b766500333e4a98df5bf34afec205552992670"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Ignore free promotions for promotion path costs\u0022) and the decision \u0022Allow gaining free promotions before gaining XP\u0022 contradicts the cost-first rationale; consequences/trade-offs are absent: Add a Context section explaining why promotion costs matter (economy/leveling balance) and why allowing free promotions would break them, then document the trade-off of weakening the cost discipline"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1209.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2918869b26fc3b7550cd27b19b998080865d45e469916493be26afb6f7e61acb"}},{"ruleId":"D20","level":"warning","message":{"text":"Only two bugfix decisions; context/problem and consequences/trade-offs are absent: Add a Context section explaining the problem (AIs ignore dead civs) and a Consequences section on trade-offs such as how river multi-turn treatment now behaves"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1210.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ff27563dd09329b09bb98c87c2a605779538d893db14468babf67025b2da54cb"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no explicit decision; only task lists with no rubric for prioritization: State the problem each entry addresses (e.g. \u0027Fix embassy trade logic bug so a civ cannot be forced to accept an unreasonable demand\u0027) and document the decision (e.g. \u0027Add a peace treaty sign-off check that rejects demands after signing\u0027) along with its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1211.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c6f360d599d6dbfc42517689712792586c966ea5a1e352df7e5feaf392097b94"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Barbarian encampments removed when tile enters civ territory\u0022) but the explicit decision \u0022Desktop executables: Max JVM RAM *actually* increased to 4GB\u0022 and consequences/trade-offs are present; the remaining items in the list (peace/war gift trade, rare crash on purchase, buildings not destroyed on city capture) appear as design notes rather than a formal ADR: Clarify each of the listed fixes with context/problem and consequences so they all fall under one decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1212.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ca44168b611df4b0bfaf663d28b8c4d74290b0e648409256bd04949ad69e8ae"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the two decisions are recorded; the context/problem and consequences sections are missing (and the body is clipped mid-decision) while titles are generic (\u0027Add back option...\u0027): State the problem each decision addresses (e.g. \u0027unitset rendering is disabled by default but should be optional\u0027 or \u0027mod selections reset after warning closes\u0027) and document trade-offs such as why forcing resets would break existing behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1213.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ecbb030a5ca7a9d1450190fbb5664e9d0769d3b8b618e7602a1d3bda153c4020"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Custom maps are retained when starting a new game from an old one\u0022) and the decision \u0022Spectators can see the building list again\u0022 is stated but no consequences/trade-offs; only unciv-loof and Ambeco fixes appear in body: Add context for why retaining custom maps matters (e.g. player progression) and a consequence of losing saved progress when starting fresh, plus trade-offs for spectators seeing the full building list"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1214.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0d5c700a21ce93158c19b3f00aa5e3e1b781cdce552804730e4bdc8cca186556"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of ruleset-specific error-ignoring benefits with no rationale or negative side effects: Add the problem (e.g. unique errors distract from gameplay) and document the trade-offs of ignoring those errors"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1215.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d41904962b166425c0640eff3ced41a33168d8eab24f8f15c4882382c33364b"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of vaguely related tasks with no context/problem statement and no consequences/trade-offs: State the problem each task addresses (e.g. ruleset-disabled uniques being flagged as valid, AI getting stuck in infinite event loops) and document the consequences for each fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1216.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"47b13e258b4cc8904e44b6ffb1d55dd7c80090bc771128c19ee1cef60f740891"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; the four items listed are only decisions with no rationale or consequences: Add a Context section explaining why embassies should be enabled by uniques and why sending-embassy requirements are redundant. For each decision, note the trade-offs (e.g., added complexity for countables)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1218.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e098dc5973f1b0c18547fc5af498d7961a6e7bf76b3f7271d06c309b3f9359ec"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a vague placeholder (\u0027rendering improvements for large maps\u0027) and the body is a jumbled list of unrelated bugfixes with no context/problem and no consequences: Rewrite the title to state the real problem (e.g. \u0027Large map rendering performance under load\u0027) and reorganize the body into Context, Decision, Consequences sections: what maps are large, why it matters, what was wrong, what changed, and any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1219.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5960c27757153f1e1eac0236525493cd1ee3684039796c2f091da199e695b1c0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only two vague improvement bullet points (\u0022Battle Table\u0022 on small screens\u0022, \u0022CPU performance improvements\u0022) appear in the body: Add a Context section explaining why procedural world wrap generation is needed (e.g. seamless UI for large maps) and a Consequences section covering trade-offs like memory usage or rendering cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1220.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4401bcff318f199b418f4405e260db33600a91a95790e70c84a31f4896f55d71"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of unrelated patch tickets with no decision statement: State what problem this ADR addresses (e.g. AI stopping city creation late-game) and its trade-offs, then document each listed ticket as an independent fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1222.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"215ff4dad9057e330145235247209c4b9b8a707082fbebea717c061f8d37b8e0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of arbitrary features with no decision or trade-offs: State what problem each feature solves (e.g. \u0027notify players when open-world content loads\u0027) and document the consequences (e.g. \u0027music track selection feels forced, not unique to the scenario\u0027)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1224.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cedbe330b67bb37f2b61cd140a86c6b3db38b2df10ed33f77ac440603e1b70b6"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with \u0027By\u0027 attribution: State the problem (double buttons for great people) and the specific mod/constant being fixed (\u00270 for certain constants\u0027), plus any consequences such as breaking existing behavior or requiring rework"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1225.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afd147b82199b8e2f9f86e117bb4284c72c8c1303d0dbe2940be8c0d7459a5ff"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is non-existent; the only content is a by-line list of unrelated patches with no decision or consequences: State what problem each patch addresses (e.g. spy name translation icon visibility, translatable ruleset name collision warning) and document the trade-offs for each change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1226.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3210b651d0d0e7d284f56b433a03441066e99ffb9758f2ba8206500dcc502143"}},{"ruleId":"D20","level":"warning","message":{"text":"No explicit decision and no consequences/trade-offs; context is a list of features with no stated problem or decision: State the concrete memory/performance problem (e.g. loading time for large map tiles) and the specific decision (e.g. limit map tile size to 256x256, use streaming instead of caching) along with its consequences such as reduced resolution or trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1227.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db0dab3bb454bd5e944a888bb8a1cc9abdacf9fa9b910c592a3f139bc246644e"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision and no consequences; the entries are all improvement/feature names with author tags (e.g. \u0022Memory reduction for large maps\u0022): Replace each entry with a one-line Context\u002BDecision\u002BConsequences line: e.g. \u0022Context: Stockpiled resources should be costed at start rather than end, matching buildings and units. Decision: Require new Improvements to target cities (CreatesOneImprovement). Consequences: Increases upfront cost but avoids hidden debt on large maps.\u0022"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1229.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc135827769a744896669f75b0aceebb271ac927ef28e969fcf5e3f54c895a28"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a one-line fix with no context/problem and no consequences; the title is uninformative: Expand each entry to state the problem it addresses (e.g. \u0022Crash when removing encampments\u0022 for the first) and document trade-offs such as how the change affects gameplay or resource management"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1231.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5664c52c13edd33ea7ccc6793bb53d71e0925454315532a852033c8affa05bd3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement (why conditional worker uniques are problematic) and no consequences/trade-offs: Add a Context section explaining the problem (e.g. hotkeys triggering twice when two improvements share the same key) and a Consequences section on trade-offs like increased unique-key surface area or changed behavior for users who rely on duplicate keys"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1232.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"36b5e9dff21fe3a663957a7202d24d0c5df5a2140a06db30f97500c05c723f7e"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; only a vague title and a one-line decision with no consequences: State the specific audio problems (e.g. overlapping sounds, inconsistent volume when sharing style across nations) and document the trade-offs of the shared-style approach"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1234.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"31cdf81b4361f30cea6842d36a8a12a707d7ed4b32697fa06b311c3bb6190dfc"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of contributors and fixes are present: State the problem (e.g. duplicate EventChoice entries causing duplication) and document the consequences (reduced modding flexibility for uniques requiring \u003E=0)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1235.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"86d39036da9fcad8678aa2375cfc8cf037f9067ef306ba937a2c2411f4dc5dc5"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of arbitrary patch-level fixes with no context/problem and no explicit decision; the title \u0027Fixed stockpiled resource trade not actually transferring\u0027 is a vague placeholder: State what the original problem was (e.g. players thought resources were transferred but they weren\u0027t), describe the fix, and document consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1236.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d039272422547aad9a933fe0aca4b13c8225dcaaef7448532d74f1729d2dde7d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with authorship and some minor non-consequential notes are present: State the problem each fix addresses (e.g. recursive citywide-resource count, missing -NC sounds) and document the trade-offs for each proposed change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1237.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"faf4614af71265a69729b6ff68cbd8cb846eb8d1d0405f575c2b7d1152d122ae"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a chaotic mix of unrelated architecture decisions (don\u0027t wipe city-state relations on liberation; freeze Demographics rankings to turn-start snapshots) and a separate \u0027fix: MP upload no longer causes improvements to advance\u0027 with its own subsections, with no context/problem or consequences: Reorganize the body into a coherent problem/context section followed by an explicit decision and its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1238.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2b5c4ec4efd7f661842f34c01319a41844958fe646da48e4738a7e99231b096"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of PR-style fixes with no context/problem and no consequences/trade-offs: State the problem (map lag, generation latency) and the decision (CPU performance improvements via these PR changes), then document trade-offs such as new bugs or complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1239.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a2bb2c87f0313a319df6da4deabcde8ad0a54d785cde82c565f98d9bb85b2c16"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with no rationale or impact explained: Add the problem each fix addresses (e.g. spies not recalling after console civ removal, live-volume slider for voices) and its consequences (e.g. broken spy recall, inconsistent volume perception) under the title"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/1241.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bc53c922a17575eb9e25df54f3eded7bafce6cb9e0174af64f8105c5e8df428c"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with author names: State the problem each fix addresses (e.g. crashing on aircraft rejection, unhandled combat strength zero) and document the trade-offs for each change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/700.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5588ccf270ece533e4ba9e51aacb4c202a3f5e06a1d1b7f97571b6db4d9efd34"}},{"ruleId":"D20","level":"warning","message":{"text":"This is a list of patch notes with no context/problem and no explicit decision; each bullet is an action item rather than a documented design choice: Convert the entries into a single Decision section describing what was changed (e.g. production calculation, swapping carriers) along with the motivation behind it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/701.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"914bc1f2d607be9fba52da91139a3801b5429497fde54479ae4f6e6b315a4e84"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is an arbitrary rule (\u0027Don\u0027t allow trade routes through enemy cities\u0027) with no context and no consequences; the body is a patch log with author/commit notes: Replace the arbitrary decision with a real problem statement (e.g. \u0027Allow trade routes only between allied cities to prevent economic exploitation\u0027) and document the consequences (gameplay penalty, balance impact)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/703.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9210a982f146f98415fcddb644ce44b4e3386d20103ca514cbc9464c86eb98c0"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision and no consequences; the entries are mostly feature/bug fixes with no problem statement or trade-offs: State the explicit architectural decision (e.g. \u0027allow city connections via open borders and own harbors only\u0027) and its rationale, plus a Consequences section on trade-offs such as reduced diplomacy flexibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/704.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1e56f117621d1e5962da7c05da3d8af82f660b3c5e083fafcf4cd03f43644eb"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are both present but the context/problem is thin (only one sentence) and there is no trade-off section: Expand the Context section to explain why gift-unit gifting to enemy City States matters (e.g. balance or diplomacy), then document the consequences/trade-offs of each proposed change, such as new bugs from turn-notifier timing or the added complexity of owner-specific improvement images"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/705.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2fc81a945c0f8fa3c7fbffb7442f6c4241487fe6c2fd14a43a0237b5cbe5117"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one resolved ANR named) and consequences/trade-offs are absent; the body lists module/module/feature changes with no rationale or trade-offs: Add a Context section explaining what the ANR was and why it happened, then a Consequences section covering any new trade-offs of each change (e.g. mod download cost for auto-downloading)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/706.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"65058a8538d3ffae2ec5b2551fdeba5e01046653964a1462973470565151f706"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision is framed as the ADR\u0027s explicit content; each entry lists a separate change (gzipping saved games, adding UncivServer.jar, Autofix Multiplayer Server URL) with no overarching problem statement or consequences: State the named problem (proxy issues, unclear victory screen names, unmet Civ/Capital visibility) and the unified decision that all these fixes serve together"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/707.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c4ff21b677ae4343937cae3f07ab2fc0eb916eda41dcf228123b16bd76bc2c"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision is framed as the ADR\u0027s explicit content; each entry lists a separate change (gzipping saved games, adding UncivServer.jar, Autofix Multiplayer Server URL) with no overarching problem and no consequences: State the one core problem these fixes address together (e.g. multiplayer server startup proxy failures or moddability of new multiplayer content) and document each fix\u0027s consequence as a decision plus its trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/708.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64dfff245ffc6fa88916c6eebb1a5e6704a14cb142e02a7b2476e52eff0a2476"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for any decision; the body is a list of patches with no rationale: Add a Context section explaining why each decision matters (e.g. ranged strength vs. defense, improvement bugs) and a Consequences section noting trade-offs like range penalties or new bugs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/709.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fb71d4299f1f4a242eec463398cbd18be6b075830bcbe34cb794c50d63c5c571"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only the decision (memory allowance) is stated with patch authors: Add a Context section explaining why Unciv needs more memory on M1 chips and an Alternatives/Consequences section for each listed change (e.g. CS button behavior trade-off, custom map selection acceleration cost)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/710.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a7851b5e88c801f7124476df4743108f1aa160e2569845c10bf8604d0537b376"}},{"ruleId":"D20","level":"warning","message":{"text":"Every line is a one-word title plus author and a vague/empty body; no context/problem, no explicit decision, no consequences: Each entry must carry its own problem statement (e.g. \u0027Fix MP refresher not working after rate limit\u0027) and the actual decision it records"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/711.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0ef4b4e7a60d2cde972b4ac1a9d00fb9c2db37945fc6dbf909ec954e3ed6dd64"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with by-line authoring is present: State the specific multiplayer bugs fixed (double files, turn-checker problems) and why they matter, then document the consequences such as added complexity or new requirements for the fixes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/714.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c846bf8e5121219aa09aba4c6a6eec95442a5b9ae625984e696fb8dece98e748"}},{"ruleId":"D20","level":"warning","message":{"text":"All entries are feature/task tickets with no context/problem and no decision; the title is a placeholder (\u0022Implement \u0027wait\u0027 command - by doublep\u0022): Convert each ticket to an ADR: state the problem/context, the explicit decision (e.g. \u0022Add a wait command that pauses for input\u0022), and its consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/716.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a1783abc60dbda6aa5b80d4553bbb928b16561b2ba6b087157943a295ea87757"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of arbitrary patches with no rationale or trade-offs: Add a Context section explaining why each decision (e.g. counteroffers must not repeat offers) matters, and a Consequences section noting any downsides like reduced fairness or unintended side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/717.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f0dd8a5f9ae16fbb2b24b3bc799cb91891c55a922e7dd2bf4d24ef37c867aecd"}},{"ruleId":"D20","level":"warning","message":{"text":"No single context/problem and no explicit decision; the entries are all \u0022By...\u0022 stubs with only cosmetic/fix notes: State a real problem (e.g. unconstructable improvement suggestions appear to be ignored despite being flagged) and document the concrete decision (e.g. disable state-changing buttons for puppet cities, dynamically adjust StatsTable height) along with its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/719.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50610c2145d854ff5684c1a479e0efdc66ff191e4af37df0143d1f8c492d2d71"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement and no consequences/trade-offs; only a decision line \u0022Autoassign population when the manual assignment fails\u0022 with no rationale or impact: Add a Context section explaining why automatic population assignment is needed (e.g. manual entry broken under load) and a Consequences section covering trade-offs like loss of control over regional distribution"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/720.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"22c22c205f4d7dffe8270ff2b7ed9073ebf454578d66699294129704318ac999"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of patch-level fixes with author names only: State what problem each listed change addresses (e.g. \u0027fix teleportation bugs so units can move normally\u0027) and document any trade-offs or remaining open issues"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/721.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"11ad1bb871541499e36fd827e0a6dc79f142f81b79fdf25438be5e3da354cb95"}},{"ruleId":"D20","level":"warning","message":{"text":"Only resolved crash and a few unrelated patch notes; no context/problem and no consequences: Add the problem (centering on empty city-state) and its impact, then document the trade-offs of each fix (e.g. forced centering, ruin reward duplication)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/722.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d9f71a8b2ff6e09dfdaa80e7b027560c802ffcb3e4d51ee126e42c90759598e3"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single short statement with no context and no consequences; the author\u0027s personal additions (multiplayer sound, crash fix) are not part of an ADR: State the problem (attack detection by alliance vs direct attack, tileFilter uniqueness, map position after portrait) in context, then document the explicit decision (disable worldWrap when disabled in settings), and its consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/723.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8d788eda6cf8efbf73964b879fe331845ec5b92b48dabab4e7fa2575df4e6e66"}},{"ruleId":"D20","level":"warning","message":{"text":"Title \u0027725\u0027 is the document number; no meaningful title describing what it addresses. Context/problem and consequences are absent.: Give a descriptive title (e.g., \u0022Liberating City-States from Civilizations\u0022 or \u0022Key Handling Improvements\u0022) and flesh out each listed bug with its problem statement, why it matters, and the consequences."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/725.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"526abb1dda8ee9194da971a69f0eac663dfe6007fe907d1dd9e9237422e6dd27"}},{"ruleId":"D20","level":"warning","message":{"text":"This is a list of patch notes/commit messages with no context/problem statement, no explicit decision (the \u0027By\u0027 lines are the fixes), and no consequences/trade-offs: Convert each entry into an ADR: one problem/context line, one decision line stating what was fixed, and one consequence/trade-off. The list format is unmanageable as-is."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/726.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5f3709fe4c6fbd5f48741b83544bbb7d805f8c32d368e17cb25132c9eafdb10b"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one visible line per decision) and consequences/trade-offs are absent; only a single author lists fixes: Add a Context section explaining why popups/text fields need to be nicer on Android and a Consequences section noting any usability trade-offs of the aesthetic changes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/728.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b2eabc4869a9957bc29fb23251b9cb25041e9f7abf370b47309a6fbf63f60e99"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one decision listed for each Azzurite and OptimizedForDensity tag) with no consequences; the Skekdog note \u0027Better exploring AI for ruins\u0027 is a non-technical framing rather than an explicit decision: Add a Context section stating what problem these changes solve (e.g. balancing, mod compatibility, discoverability) and a Consequences section noting trade-offs like loss of intentional bias or added complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/731.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ccf901c0e1e88f61e7619f12a3368dfbb24489d56236a1fbe0d66bcd8604d6cd"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only release notes and patch-level fixes with author names appear: Add a Context section explaining why the decision was made (e.g. translation bugs, crash reproducible) and a Consequences section noting any trade-offs such as increased build/runtime cost or new regression risk"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/733.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"390169ea8906578a89747f27ed9fa53096f6c55aa55591f4b91164a6d989347d"}},{"ruleId":"D20","level":"warning","message":{"text":"Title \u0027734\u0027 and body are a single line with no context/problem and no decision; only the Decision section is present (unit icon opacity control) but it is cut by the scanner clip marker: Add Context: why opacity control matters for density-critical units, and Problem statement. Add an explicit Decision sentence naming the computed value or rule. Then Consequences/trade-offs such as loss of fine-grained visual feedback"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/734.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"893c0d328e72452b78543a61b08a86e99cfcaa1ecfe400580b722aba0152d6f3"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision \u0022Removed deprecated uniques\u0022 and its listed consequences are real but the context/problem (why remove deprecated uniques) is thin; the body ends with a decision list plus an unrelated modding change before any rationale: Add a Context section explaining why deprecated uniques were removed (e.g. they broke new content or were no longer used) and a Consequences section on how it impacts existing mods"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/735.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a61e891d1730833497654cd7ab4c2031a157d6630d04b572ce344b5b8415912"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only resolved ANRs and the fixes listed are present: Add a Context section explaining why double-capture matters (e.g. unfair advantage, resource drain) and a Consequences section noting trade-offs like reduced XP gain or performance cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/737.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"06eca5bcded09c79806ba5cbfbe0b40fd1ae878e6af8f97318c1e7ab60c88512"}},{"ruleId":"D20","level":"warning","message":{"text":"All four elements present but the context/problem and consequences/trade-offs are thin/omitted; only the decision list is visible: Expand each listed change to its rationale (why it addresses a real problem) and any trade-offs (e.g. reduced flexibility for puppeted cities, new bugs from removing 1.5x unhappiness mentions)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/738.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8823bc2edf7388d538ca68ff9e268689929e13f135921a305dd4bceaacad8cee"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Can no longer receive negative gold offers from AI\u0022) and consequences/trade-offs are absent; the body is a list of three short fixes with no rationale: Add context for each fix (e.g. \u0022Negative gold offers disrupt economy\u0022) and document trade-offs (e.g. \u0022Minor reweight may slightly reduce AI aggression\u0022) under each decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/739.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de14f8b658ca8b560a2134656ce40a3c8be29ca50005a9ac088a5e60f9d07c6d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a single short decision line (\u0027HexaRealm is now default tileset\u0027) plus a \u0027Replace \u0022moveTo\u0022 in unit overview with \u0022Moving\u0022\u0027 change note: Add a Context section explaining why this change was needed (e.g. performance pressure on memory, a specific bug or load case) and a Consequences section covering trade-offs like breaking existing code that relies on moveTo."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/740.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5d031c30ddff74634e42c077cc880585a4876bc84be37b1875503981ca529e17"}},{"ruleId":"D20","level":"warning","message":{"text":"Every entry is a one-line title with no context/problem and no consequences; the body is a list of entries each labeled by author (it is not an ADR but a dump of patch notes): Convert to a real decision record: state the problem being solved, the explicit decision (e.g. \u0027allow HexaRealm to render jungles on hills\u0027), and its consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/743.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5bd6f42bb1ce5f5d56ddbc8783920765c2f8e1185a9a3d93e9475398f46af71b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of fixes with only one decision (invalid players removed from global quests) recorded: Add a Context section explaining why the fix was needed (e.g. a crash caused by erroneously showing minimaps at full size) and a Consequences section noting any unintended side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/744.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f4ec46bd4cf6260f2889214bd68a6031906aaeffeacc0417112e848cf32f41ef"}},{"ruleId":"D20","level":"warning","message":{"text":"Every entry is a one-line task with no context/problem and no consequences; the title \u0027745\u0027 gives no signal: Convert each bullet to an explanatory Context/Decision/Consequences section for each change, or give the ADR a descriptive title"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/745.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f291cd2c37b329f83ad7d9abb87d283bd5f969754ac467ecabbba1f32f373ccf"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only the decisions (unit type, resuming bug fix, occupied cities \u002B2 unhappiness) and a one-line add-missing-string note appear: Add a Context section explaining why each decision was needed (e.g. visible units being invisible by default is broken) and a Consequences section noting trade-offs like the extra unhappiness cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/746.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afff7b8d9efaa8c114abea4907c95906a522dd02ec6271da3e4f1d8ef50da028"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only load-on-download decision with arbitrary numbered list items: State the problem (e.g. modders want translations loaded on download for faster first-run) and document the consequences of loading translations upfront (build size/translation delay vs runtime loading)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/747.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c7e17c4ff0ca9be8480a52481535a604ae2324efed11423b1a937eca99e665cd"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no explicit decision; all entries are fixes tagged with by-line authors: Each entry is a fix but there is no problem statement or proposed policy in the body, so it is an incomplete ADR"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/749.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f3e9ebe633897f12aa81590b20ea3ef0b5cae155a766c91aa20b279ab6a6f802"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the four entries are feature/task tickets with no decision or trade-offs: Replace each ticketed entry with a dedicated ADR: one explaining the problem (e.g. \u0027JAR deployment on macOS is not supported by current tools\u0027) and the explicit decision (e.g. \u0027Add Homebrew\u002Bmacdeployit support for JAR packaging\u0027), plus consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/750.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38e344ec3d83cf15be17dc6cf6e1abdae8768cbf1901252e13ac1c5b0a2dae34"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decisions are present; context/problem and consequences/trade-offs are absent: Add a Context section explaining why world religion milestone filtering is needed (gameplay balance) and a Consequences section on trade-offs such as moddable skins requiring extra work"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/751.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4e564854e0f899d0a157d51eebffb290a011ae74f31e6685b370a12b4fa6816"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single line with no context/problem and no consequences; the body lists only fixes for specific bugs without explaining why or what trade-offs: State the problem (e.g. \u0027no longer show a happy face while loading\u0027) and the decision (show Unciv icon instead) before listing bug-fixes, then document each fix\u0027s consequence"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/752.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7960d68ec19b6f6db828e71ee44990253ad49bdfc68af4de8ab48856516a14f3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with authors and some vague titles: State the problem each fix addresses (e.g. wrong happiness point for Cultural Diplomacy, missing victory types for quick games) and document trade-offs such as increased load time from customFile or larger help buttons"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/753.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f5c3116c9737c09ec66fc4e075a5c9bb6c9b59cb939efb5bad745d5f3b94aaf2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the title is a vague banner with no decision: State what desktop download format (fullscreen vs. windowed) is required for gameplay fidelity, why moddable skins matter, and the politics overview screen\u0027s role in balancing realism and accessibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/754.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5105cab107ff98d21af1a8d5b07a27d156410c1fb78d68c6e58749a1a5c64295"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only a list of fixes with author names and vague game state references: State the problem each fix addresses (e.g. simultaneous spy/city expansion crash, Autocracy policy branch null display) and document trade-offs for each change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/755.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0bcff79fb8a78f882c06510a47a86e2e55cb10523910ff4e1d67160b47e0e12"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a vague placeholder (\u0022Slight performance improvements\u0022) and body contains only the commit hash \u0022Create Cannot Move Unique By itanasi\u0022 with no context/problem or consequences: Replace the placeholder title with an actual problem statement. Replace the commit line with the decision text plus its rationale and any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/756.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"15ed22397a74ad6bf8c1d1a7f1aa79f80f3c6d187a74a7341f43fe3a711519ad"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision is stated; context/problem and consequences/trade-offs are absent: Add a Context section explaining why hidden improvements matter (e.g. fairness, consistency) and a Consequences section noting trade-offs like forced re-translation or longer load times"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/757.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7334d82319bd0b98fa32d23f8dacc05bbdc4d6bb935d42140d0e19fb6804a511"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin; each entry is a one-line resolution with no rationale or consequences. The title \u0027Fixed Temple of Artemis production bonuses\u0027 gives nothing about the problem.: For each decision state what it fixes (e.g. \u0027resolves a cached conditional unique causing tile yield corruption\u0027) and its trade-offs, then give an informative title."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/758.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"62ab7e560a2189240119b2ee16510e42438f3ef5433b771f9e227b1fb7c8a359"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a list of fixes with no overarching decision; context/problem and consequences are absent: Give the ADR an informative title (e.g. \u0022Fixed memory leaks, Great Person Picker responsiveness, stat-construction obsolescence, and FantasyHex era variants\u0022) and state the problem/context under which each fix was applied, plus its consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/759.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2c8ac46f3b984eff7b832cc573df6209d0beb5679a861057853807229a555e98"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of fixes with no context/problem and no consequences/trade-offs: State what unworkable tiles are (e.g., non-constructible or stuck) and why the AI choices were bad, plus the trade-offs of removing improvements like consistent tile selection"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/760.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eb389aae05dd33e90d07e571df490a3c31643742a86bfdb454919e30ef898bca"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only bare feature lists: State the problem (e.g. inconsistent promotion layout sizing across regions) and the decision (absolute units as default for Hexarealm tilesets), plus a Consequences section on trade-offs like breaking existing layouts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/761.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3ba93af988a3d4f716cb846b958a8ce94e1dd81313683f0f42348ad9663bcdf5"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Fixed rare thread crashes\u0022 and \u0022Added many new before/after X turns\u0022) with no trade-offs; the decision \u0022Generalized ruins reward limitations with \u0027only available when\u0027\u0022 is a minor one-line fix buried in a list: State the real problem (promotion mod conflicts, crash repro) and its consequences (reopened conflict window, conditional complexity), then document the explicit decision and any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/762.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1f9ed03816a248b7f3392bec331e295b346fab5de1d71824c76e7ac2c0ec9c46"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only \u0022Fixed promotions for mods conflicting with base ruleset promotions\u0022 in title) and consequences/trade-offs are absent; the body contains only a single patch plus vague diplomacy line: Expand the problem to why mod-conflicting promotions matter and add trade-offs such as how conflicts are resolved or whether new conflict resolution is introduced"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/763.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0789f4a68fcbf5d188cdcbc3d170f4c01c418f57c1f4731a048998b83bc86ddd"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of unrelated cosmetic/functional changes with no rationale or trade-offs: Add a Context section explaining why each change was made (e.g. \u0027fixes a bug where unexplored tiles were erroneously shown\u0027) and a Consequences section noting any unintended side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/764.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"537874ef1c7b239266c0e9b6215c629c97fa7928e28a1ff044c6882acb469cf1"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one sentence per bullet) and consequences/trade-offs are absent; the decision list reads like a feature-bullet-point list rather than an ADR: Expand each bullet to explain what it fixes and why it matters. Add a Consequences section covering trade-offs such as how hidden-unit visibility is handled in new scenarios"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/765.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3f96de1c213cc1acd4380cd30b817fc93a04aed84804bd7a936edd5ef23fee9"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is non-existent; the only entries are feature items and a vague \u0027Removed single-pixel gap in top bar\u0027 plus an absolute units name: Replace with a Context section explaining why city-state uniques matter (e.g. balancing, modding) and a Decision stating what new features were added while removing backwards compat"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/766.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ec2066f3de2b59e4e4e716078da0868b335d4a6e23b89648db9a99ba58690cf0"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a feature list with no rationale: Add why stats uniqueness matters (e.g. allowing per-topic gold/faith/culture to reflect local policy impact) and the trade-offs of adding new [stats] types"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/767.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7052fb9483dcca16619e07df004ccd5d3c8755e6cb35251877456aea0b620616"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Fixed city-state type in civilopedia\u0022 gives no problem statement) but the body contains only a decision and an incomplete consequence section; trade-offs are not stated: Add a Context section explaining why city-states exist and under what circumstances they cause latency, then flesh out Consequences/trade-offs of cleaning up impossible tiles and policy-counting fixes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/768.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8ef8d8944064c6f02a6a8b5c7e6904aa974965e71ca60ea1708d57a0e81c1aed"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of changes with authors: State the problem (e.g. uniques are conflicting or breaking) and the decision (conditional uniqueness by era, generalized stats-per-policies unique, deprecated old-form city-state uniques) along with any consequences such as mod-difficulty or new balancing work"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/769.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a3c0e713ac603b8cee4311c3b444e57cb2a743438ad0632c7ae74e8ac6cf4b3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem (why the yield scaling down) and no consequences/trade-offs: Add a Context section explaining why yields are scaled down so heavy yields look better on tiles (e.g. balancing visual appeal vs gameplay intent), then document the trade-offs such as breaking existing tilefilter usage"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/771.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"14a7336ec1e3abc8eabb558aa18769d4ff6b21ef5c011526313c8a7433798034"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single bullet list of fixes with no context/problem and no consequences/trade-offs: State the original problem for each fix (e.g. inconsistent repair turns caused by virtual resolutions) and document the trade-offs (modding cost, new game balance)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/772.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c83e355c46dcf241d90ddec56cf799f61fb78e5354e5b301bdaeb3b7935469e"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is an unstructured list of unrelated items (server as default multiplayer server, Fixes for Repair, fixed all CSs getting unique units and luxuries, unitActions icons separated for modding) with no context/problem and no explicit decision: Convert the body into a coherent ADR: state the problem (loading popup appears only on significant delay), the decision (fix the server to not trigger it under load), and its consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/774.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"632fff0e4a9bc2b0feac077aecd265ce1b3803384908a610eadde640947fb69c"}},{"ruleId":"D20","level":"warning","message":{"text":"Only three short bullet entries; no context/problem and no consequences/trade-offs for any decision: Add a Context section explaining why each entry matters (e.g. \u0027Air Carrier upgrade must not destroy onboard units that support it\u0027) and a Consequences section noting trade-offs like portrait storage cost or flag visibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/776.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6990e3f5f675010fb9ca5ccdfbe9ae31fc49119fac5390647358b6019c4d69f7"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of features with by-line contributors are present: State the problem (e.g. lack of modding flexibility for Unit flags/styles/turn-start movement) and document trade-offs such as increased complexity or resource cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/777.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8db284059b23d5679e36e085ebeff0f63321866e3e0d5c67e0f9a64184ce78ee"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; only the solved bug (\u0027players can no longer get citystate nations when selecting mod\u0027) is named with a linked commit list. No consequences/trade-offs.: Add a Context section explaining why unit action icons matter (e.g., prevent cheating or misinterpretation) and a Consequences section on trade-offs such as icon size/complexity."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/779.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c8aee11a4c38fbb4d4b25beb7788ed6074797b59cb57ad44fe05e3b8d5f86286"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only rework/fix lists with no rationale: Add a Context section explaining why the modding system needs this fix (e.g. unbuildable units are now upgradeable) and a Consequences section noting any new trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/780.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e9208ffb2e9171a7c163fc92f50effdc8ad8278e48e29550c89dd587a65ab0a3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for any of the four listed elements; only a patch list (Big rework of Policy Picker UI ... Fix: tech screen zooms to current tech when opened) appears: State what problem each change addresses (e.g. unclear civs shown as Unknown, No City Razing toggle) and note consequences such as added complexity or loss of intended behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/782.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cd38afbf9d0b1a861174d6cd9315fba528d702339237c7264f0ff9e54a125bb3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement and no consequences/trade-offs; only a list of fixes with author names: State the problem (e.g. double-unit construction, lost next-unit return) and its impact before listing fixes"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/786.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f83c7f43c6157ad6774b7fdadc7ab9bb1e67339ce764208774c6fdc83b8dabae"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of unrelated patches with no decision or rationale: State what problem each ADR addresses (e.g. \u0027AI moves civilians off capital to prevent overpopulation\u0027) and its trade-offs (loss of civilian safety, shipping route disruption) under an informative title"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/787.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de0bdecaea234d78eaed3ffce3ade8dccd04b6755a5e134fc39288507630b3a4"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of unrelated patch notes and no context/problem or explicit decision (the modding/unique-parameters rule) appears: Add the problem motivating unique parameter validation for mods (e.g. preventing duplicate protection civs) and state the explicit decision/constraint it enforces, plus any consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/789.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"844f26de51c8bee7dce8bebb1e1b8c561448d72e15f81879fc6796fdb6687e45"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Calculate movement correctly for road \u002B railroad combinations\u0022) and consequences/trade-offs are absent; the body is a list of feature tickets with no decision statement: Add a Context section explaining why terrain/modding interaction correctness matters (e.g. player trust) and a Consequences section noting trade-offs like increased mod-review burden"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/790.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"76f5adec645db636a7c9a4937ea0eab6aa2e881e4e83490a666744221cdbbf6c"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only \u0022AI tries to stop civs who are about to win Scientific/Cultural victory\u0022 and \u0022No double copies of offers on AI trade counterproposals\u0022), with consequences/trade-offs only implied rather than stated: Add a Context section explaining why the Air Sweep mechanic exists (e.g. preventing gamedev abuse) and a Consequences section covering risks such as unintended civ behavior or counterproposition imbalance"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/791.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e708c9a94da377ad3c2b6d761d16440c67095413883010ea53e3c828d3cf6f27"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are both absent; only a one-line decision (\u0027Units are not displaced to enemy land when kicked out of borders\u0027) with no rationale or impact statement: Add the problem (e.g. crash during conquest where enemies have puppeted cities) and its consequence (units being placed on enemy territory, breaking diplomacy), plus any trade-offs such as how this interacts with other displacement rules"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/792.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de3fc7f59d3a9313699f75bf779e1058b59fed9788be9c0102236c64e254c208"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the list is a feature/bug fix dump with no rationale: Add a Context section explaining what each change addresses (e.g. automated unit city connection timing, multiplayer win announcement, AI peace deals not paying more) and a Consequences section noting trade-offs like reduced flexibility of liberating cities or increased human bias"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/793.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8217fdfa8ca4873f624327196b2a32ad624970a2be2209e81fd4c1d535f1ceb"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of modding and gameplay fixes but no context/problem and no consequences/trade-offs are stated: Add the problem motivating each change (e.g. overlap/flag-fading) and its consequence/trade-off for each fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/794.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"295ef0870c3fada3aa682323709e81c459a67bd79ff25ed80a1495ad3e7bb2c6"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the visible content is a list of fixes with no decision statement or rationale: State what problem each fix addresses (e.g. speed bottleneck, color conformance for accessibility) and document trade-offs such as increased computation cost for sorting by category"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/795.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2785bdf7aeae930dd6b08d2af509cd9fa88febfb027a1bcec536ce8615f3a6e0"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of unrelated fixes (uneven battle table, embarkation avoidance, tile happiness, unique text, sleep visibility, Great Person speed modifier, civilians not attacking) with no context/problem and no consequences/trade-offs: State the problem each fix addresses in its own sentence and note any trade-offs or implementation details"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/797.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"28ca839fce4943f4bf17ca96e11d669e4d83069aa85cc50a53c4784a9f49fcc7"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only feature bullet points plus a vague \u0027Resolved health bar overflow problems\u0027 appear: Add the problem motivating this framework (e.g. visibility ambiguity where attackable tiles obscure hidden ones) and its consequences (false attack-on-hidden, incorrect domination zone detection). Also note trade-offs like higher tile visibility requiring more computation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/798.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a354008c78d0ffedb6fe3ce56076cf3be76e02134cf7b34a9c9dddd06a985b7e"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the title names a framework but it is an empty body: Add a Context section explaining what trigger conditions are and why they matter (e.g. balancing fast-start vs long-term depth), then state the explicit decision (which triggers are enabled by default, which hidden) and its rationale, followed by Consequences noting trade-offs like reduced flexibility for creative play"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/799.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"859915da25aaf7aecc4722df1454de819ac5337d70c5431b48185c6fbc527e69"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (e.g. \u0027Displayed Great Person point requirements always take game speed into account\u0027) and consequences/trade-offs are absent; the visible elements are a policy title plus two decisions with no framing: Add context for each decision (why retain scroll position, why trigger uniques must not go off without tech researched) and note any trade-offs (e.g. increased complexity for speed-based checks)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/800.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8cfa66494b6c883a4335c4f7be6d459a38c48ba1ed241ee018bc2cd76ba4f697"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague one-line promise with no context (why map types need better generation) and no consequences; the title is uninformative: State what map type generations are being addressed (e.g. sparse vs dense), why it matters, and the trade-offs of including forked repos in search"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/801.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7ea5afa17904d8971e73baf55e0e43c9bb57c1b33c9e86f35bd477b85e69a23a"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decisions are listed; no context/problem and no consequences/trade-offs for any of them: Add a Context section explaining why each decision was needed (e.g. balancing Barbarian encampment placement, random civ selection) and a Consequences section noting trade-offs like increased modding complexity or unintended behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/802.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc06dd790fb4b5941a6adc31521438b19330eda76cd77a73715ee090356e9fc9"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is narrow and only one concrete action (\u0027Do not allow placing of \u0027repair\u0027 in map editor\u0027) with no context/problem or consequences; the title is vague: Expand the body to describe the problem each decision addresses (e.g. infinite stat from city-states, spawn ignoring i/4) and document trade-offs such as how repair placement will be handled when allowed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/803.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a69182e0edfdae00fdd0ffa7f84a0d485e26d6d9d6dfa967b93a3c9f0e50ed7c"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is narrow and only one of two proposed changes (not nuking already-winning cities) plus a modding change appears; consequences/trade-offs are absent: Add a Consequences section on the trade-off of allowing inquisitors to block religion while still winning against them, and note how the slot-mechanics layer will handle the new city-automation decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/804.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"49b80c578a6b1a275af5a1c94b005d6dab44822293e757079a79a8e2f33c3610"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only a decision list with author names appears: Add the problem motivating each change (e.g. Faith Healers healing enemies while pillaging roads is unfair) and its consequences (game balance penalty), plus any trade-offs of the Autosave fix, such as memory usage"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/805.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"851106373fadf5edb5f6e34555850171a4bb30def439bf5ccc08ef828617819f"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with no rationale or impact: Add the problem each fix addresses (e.g. empty tile layers causing performance regression) and document the trade-offs (e.g. added Reset button usability cost)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/806.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"318854701cd4da687e1834353cf53a8ba17a95aedd4396f59a09d3cac4dc15ab"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no explicit decision; the entries are all single-paragraph task tickets with no rationale or trade-offs: State each ticket\u0027s problem (e.g. \u0027the policies screen header is unresponsive\u0027) and its design goal under a Context section, then document consequences such as how autosaving affects gameplay"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/807.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f7273ec851c754bea2fe546b657b5ee17da9854ca907876466f8e1f86845a949"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one sentence) with no consequences; the decision \u0027Cannot alter city build queue in between turns\u0027 is a rule but its rationale/trade-offs are not stated: Add a Context section explaining why building queues must be immutable during turns and a Consequences section on how it impacts players who want to re-order units mid-turn"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/808.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a813ed946388cccde5b083e7321fc55e1e304fc86a1e6172228d820a524fd21"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the bug title and a few scattered fixes (political relations display, pillaged bonuses) appear; no context/problem statement, no consequences/trade-offs, and no decision framing: Add a Context section explaining what \u0027dead population working tiles\u0027 meant and why it was broken, then document the explicit Decision (e.g. reordering/renaming TechScreen order to match Civ V), followed by Consequences such as how this affects modders or multiplayer ordering"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/809.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9a384c4afee462c69274efae19c67133546005e661162eb96410203dc09cedde"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single sentence (\u0027Fixed air sweep crash\u0027) with no context/problem and no consequences; the visible text is mostly author/patch notes rather than an ADR: Replace the patch-note blurbs with a dedicated Context section (what problem the fix addresses), a Decision statement, and a Consequences section covering trade-offs of the change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/811.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cc0c81df313cd136be28b96b5615dc969742cf06d05ea93fa576e353bb0ef1fd"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no explicit decision; only a \u0027Resolved - fixed Guruship belief\u0027 line plus a list of fixes with no rationale or consequences: State the problem (e.g. receiving invalid resource offers) and the concrete decision (e.g. reject over-resourced bids, re-upload failed Play version), then document trade-offs such as how the rejection impacts gameplay"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/812.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5cd9814719b0cb1b3ee7fbcd124f4a233170ee06faff37196ed1137134e4da5"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a decision list plus vague \u0027Improve UX\u0027 tag: State the problem (e.g. texture swapping/selection opacity bugs) and its impact on gameplay or visual fidelity, then document the trade-offs of pillaged versions (quality loss, asset scarcity, build cost)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/813.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4010a51128f77987c1d2db9a81e9ed6d194e6696889c612971e7cb20ffd83f61"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision is stated; context/problem and consequences/trade-offs are absent: Add a Context section explaining why mod sizes above 2 MB should be shown in MB (e.g. readability for new players) and a Consequences section noting that this changes perception of large mods, possibly affecting download/download-split decisions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/815.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ba66e1c320a1810a898c9cc472c3318847f610ffb59d83037f75c932ad6eef4d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of cosmetic/feature changes with no rationale or trade-offs: Add a Context section explaining why each change matters (e.g. undo for unit moves, portrait mode accessibility) and a Consequences section noting any downsides like performance cost or mod compatibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/816.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"afb629fdcc28d171431fa377f5096e784756ccc5c64d8322849ecab8b90b6636"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; the list is a bare decision dump (modding fonts, disable max zoom, permanent slider tip, corrupted-data multiplayer error, separate-requirement wonders, attack-prevents-undo) with no rationale or trade-offs: Add a Context section explaining why each change matters and a Consequences section noting any unintended side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/817.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4218266588152f58c8d91f02e8269bbd07077db2094c0dccf1d71327710bb131"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision is framed as a coherent architectural rule; the entries are scattered triggers and patches with no context/problem and no consequences: State each ADR\u0027s problem (e.g. \u0027ensure camera does not move outside explored regions\u0027) and its explicit consequence (e.g. \u0027prevent players from straying into unvisited zones\u0027), then document all decisions in a unified decision section"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/818.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"5c88de9c0579b419d14ca8fe1121c74a98fd4c61df2659e03c87c7812ba07c12"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of patch-level fixes with no decision statement: Add a Context section explaining why password auth was added (security need) and a Consequences section on trade-offs such as performance cost or admin overhead"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/819.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fcd0f59fb1b0fbcfd54e6c45083f01fc9d4df846703afe05cecdfe364184906c"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one sentence) and consequences/trade-offs are absent; the body is a single decision statement with no rationale or impact discussion: Add a Context section explaining why triggered uniques were needed (e.g. preventing tech-pool corruption on fresh start) and a Consequences section covering trade-offs like unintended destruction of unpillagable improvements"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/823.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8482879ef03888dc0f92f4cab485563627a06dee9fe0e2379597691cb197d57b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a modding list with author fixes are present: Add the problem (e.g. players want to see when a unit is spent) and its consequence (clarity lost without symbols), then document trade-offs of the decision (symbol cost, optional for new players)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/824.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4bbfbab911f119ce0390a25f80e0e54eaa47acc4203854c7b4e0e66ca75e48d2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of features with author names: State the problem (e.g. limited action types or inconsistent moddability) and its consequences (e.g. increased complexity, reduced discoverability), then document each feature\u0027s trade-off"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/825.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"53ec311aa84c49fa21fbeefa895d9ec37c3072f4a9a9e62b21cd7aa7b6369a23"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact statement: Add a Context section explaining why each fix matters (e.g. endless loop, flanking bonus error, Camp tile removal) and a Consequences section noting any negative side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/827.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"97345f2cd0355684aea17c96b8ac8d3f5fc6caf30779b70b570e14647ab0bbd5"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the title and two short commit entries are present; no context/problem and no explicit decision: Add a Context section explaining why an AI-evaluation minimap is needed (e.g. prioritizing high-impact patches) and a Decision section stating what exactly was added (dynamic times, selectable orientation). Consequences could follow"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/828.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce117d33be16d6615ac2c458261c177d668206853483ceb91ff94e3e3dffdcb3"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; the four listed items are all fixes/updates with no rationale or problem framing: Add a Context section explaining what the Industrial Era Settler expansion is addressing and why each of the four items matters"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/829.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cad10a024ee24a77a5f3afe5e3175ec6595b2fce75d1041ca451d759b9a9e12e"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only the decision \u0022Add Replay feature in VictoryScreen\u0022 is stated with no rationale or trade-offs: Explain why a replay feature is needed (e.g. allowing players to revisit key moments) and document the consequences such as load-time cost, storage requirements, and how it interacts with existing features"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/830.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b55cbd128eb29907d4cd4b7c325ea50e4b0905888b90b45f2edd80aaeb2f14e4"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only a list of fixes is present: Add the problem each fix addresses (e.g. SelectBox scroll pane transparency) and its consequences (performance cost, repaint/reflow impact)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/832.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3398b2d2a8251c5cbea6bb73bfda6241dde7042555b13ac846d826497ad27806"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of features with author names are present: State the problem (e.g. misaligned mod-checker tab for units respecting limited-per-civilization counts) and document consequences such as parser complexity or new UI choreography"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/833.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"54be408fbf8d1e1cf9a1f310f9e5ebb275645a3bdc2cf8316a19207116d71156"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin (e.g. \u0027Fixed ... trigger activating for all units\u0027 with no rationale) and trade-offs of the changes are not stated: Add a Context section explaining why triggering upon gaining unit matters (gameflow/strategy impact), and a Consequences section covering how each change breaks existing play or requires new work"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/835.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9d64c26ac67189555095121b68c3f2f7d14af7893fded2611565b5d64035db5b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only trigger examples and a vague \u0027Better multiplayer button location\u0027 are listed: State the problem (spectators affecting games they are in) and its trade-offs (game balance/immersion), then document the fixes and consequences for each listed example"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/837.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"dafe5dfab48f3da06734dcf66e5d46587b741721512cbaf0d1afdaf525dcc07d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no explicit decision; the body is a list of feature tickets with no overarching ADR framing: State what problem this ADR addresses (e.g. per-turn cost estimation or fog-of-war inconsistency) and document the explicit decision it records"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/838.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1c7026fc24117e596ded21580b95db7e8363b4b761832887ee2bea4666323b7c"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only \u0027Archipelago creates water again\u0027) and consequences/trade-offs are non-existent; the body lists only a patch list with no rationale: Add context explaining why repair removal matters (e.g. players want to remove it without breaking water generation) and document trade-offs such as loss of guaranteed repair or new bugs from re-adding it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/839.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3aa485c3fd6860872c455a90c1d7dcb21a24071b8b56dad4ddc08a3aeb207e9c"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one bug listed) and consequences/trade-offs are non-existent; the body is a tacked-on list of design fixes with no framing: Add a Context section explaining why each fix matters (e.g. \u0027desktop window size 0/0 causes UI freeze\u0027) and a Consequences section noting any new bugs or balancing concerns"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/840.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"44a23d332a5e1d0c0bd53374a53a43b7202281943f1aab6e3899b90077caa5eb"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decision (\u0027Music player controls\u0027) is present; context/problem and consequences are absent: Add a Context section explaining why music-player controls matter (e.g. accessibility, discoverability) and a Consequences section on trade-offs like friction for non-controllers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/841.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9c4bc8dbaf6f7b72eac86f6ace968fc85aa7f792de78257869f24b92baaee257"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only a list of fixes is present: State the problem (e.g. inconsistent tile-buying rules for non-contiguous tiles) and its impact, then document the consequences/trade-offs of each fix"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/843.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b35feb05cb987546fa57cb5db0e73708f2030663479ad3769bda47fa0562390e"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a one-line game-design note with no context (why optional stockpiling matters) and no consequences; the remaining entries are user interface/QA fixes that add little value: Add Context: explain why optional stockpiling improves gameplay or economy (e.g. prevents resource hoarding, allows trade-offs). Add Consequences: describe any downsides such as reduced incentive to gather resources versus the benefit."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/845.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f1ff8f9aa33488698a739cdf49694616125cae1fcaa7d79f51c4fc226c43c66"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a \u0027Fix ...\u0027 list of fixes with author names is present: Add the problem motivating this ADR (e.g. an instant-consumption bug or unsortable display categories) and its consequences (e.g. performance cost, discoverability loss)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/846.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6040f3ac3130377cf3d8a4741972bae2e6ecec9ee78d8db2152f80880b7dac16"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with author notes (Unhappiness effects, fix leaks, allow city/tile conditionals) are present: State the problem each fix addresses (e.g. untranslatable \u0027in this city\u0027 label, double icons, random Retreat chance bug) and document consequences such as increased runtime or added complexity of translation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/849.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"61e983a47dfbd002f7a9fa5c920211fbf83081fc00b21e05d2e8161590ffc18b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only vague motivation (\u0027Show garrison in city screen\u0027) and a list of unrelated features: State the concrete problem (e.g. players cannot tell if an alive civ is producing) and document the trade-offs of each listed feature"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/850.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f9b6b76ae5b61ac3caa2a1f779fbe25d911400128684fa4eb775b5e9dbba3d34"}},{"ruleId":"D20","level":"warning","message":{"text":"This is a patch log with no context/problem statement or explicit decision; only resolved issues are listed: Add an Context section explaining what the patch addresses and why it matters (e.g. double icons, font crash, hardcoded embarked sight), then a Decision section stating the fix and any new behavior added, followed by Consequences noting trade-offs like worker reassignment timing or revealed map positions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/852.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0da5b79c708ea6ab3d89f41e9b3a6a13cc34b108e0ceca7e7711079b83a302de"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one decision with no rationale) and consequences/trade-offs are absent: Add a Context section explaining why Great Merchant should avoid unreachable tiles (gameflow/avoiding infinite loops), and a Consequences section covering trade-offs such as the AI\u0027s inability to explore new regions or how it handles tile-adjacent events"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/855.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"14ec16ed9eb38508a92511d9292714d962bec89687637495daca77ecb47d7101"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Units sprites move towards the enemy they\u0027re attacking\u0022) and only one concrete decision (\u0027Removed deprecated settings\u0027) with no consequences; the remaining entries are author notes/commit messages: Add a Context section explaining why damage animations should be tested and what failure mode to detect, then document the removed settings and any trade-offs of removing them"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/856.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ad61f7bb73dd8f9375d9795064ffa96366b31b05c0b55f5f051dda45404b9591"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin (only \u0027terrainFilter now accommodates nationFilter for tile owner\u0027) with no trade-offs; the listed modding improvements are features rather than a documented decision: State the problem (e.g. terrain filtering without nation-owner bias) and the explicit decision (nationFilter added alongside terrainFilter), plus consequences such as increased false-positive risk or complexity of maintaining both filters"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/857.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b36e57ce2a3522c10fc19b7fe586a82b8a32d71cd7cfe7d67c580f248babb81e"}},{"ruleId":"D20","level":"warning","message":{"text":"All three titles are placeholder stubs (Norwegian Ski Infantry, Mehal Sefari, Carolean) and the author names; no real subject or decision is visible: Replace each title with a precise problem statement and replace By-with-the-author line with an explicit Decision section naming what was reduced and how"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/858.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"691bcfff96973fea01bcb5cf8cfc3b505e30accc7bd35ccf711688bef99707e2"}},{"ruleId":"D20","level":"warning","message":{"text":"Only solved problems and a few arbitrary patch notes are recorded; no context/problem statement, no explicit decision (policy icons in text, strategic resource display), and no consequences/trade-offs: Record the problem each entry addresses (e.g. \u0027buildings across cities not visible\u0027, \u0027vanilla ruleset errors\u0027) and state the explicit policy/decision (show Strategic resources by trade without tech research) with its rationale and any consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/859.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0eba769df56ecf3d3ee714a7d655745e1e8972002f9bd99b53c5ebb4744b202"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of bug fixes with no rationale or impact: Add a Context section explaining what caused the concurrency bug (e.g. two workers on the same tile both claiming it\u0027s unimproved) and a Consequences section noting trade-offs like longer rework for future tiles"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/862.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e50df38eef2144ae1fce8d0367489133e2e6c5a63f9194ee5170de357a1d8e53"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only the fixes listed are present: State what problem each fix addresses (e.g. promise-breaking UI update, next-turn state consistency, red policy text) and document the consequences of implementing them"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/865.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8a4d96411db6868ad023f02ca5d5adac2828f6fea3491fbc45ebe8a88184a601"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of unrelated features with no decision or trade-offs: State what battle damage numbers are being animated (e.g. health/armor) and why it matters (combat clarity, modding feedback), plus any consequences such as performance cost or breaking existing behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/867.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fda27e405a6483cd8e50b87e07e918ddd1828860abbec38ffe5ce9603b4a4711"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of fixes with no context/problem statement or consequences: State the problem each fix addresses (e.g. preview crash, off-by-one autoAssignPopulation error) and note any trade-offs such as reapplying focus on bought buildings"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/869.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e1c15dd6d8ca24b00f863dc61a6a5a16899daa95da660586e68809a7d6c85fb8"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; the body is a list of feature names with no rationale or impact statement: Add a Context section explaining what each change addresses (e.g. double-click locking to prevent abuse) and a Consequences section noting any negative side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/870.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f513cf7d1106dcd036c362c157f0bbb743e588fdd45654075771eea9302eb2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of features/fixes is present: Add the problem motivating this ADR (e.g. \u0027Players cannot load the game when there are no saved games\u0027) and document the consequences (e.g. \u0027Loading will take longer during startup\u0027)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/872.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0fbfa9b9aedd37ef46b118f2e6a82dc788308814457fb7fc1cef538742d99dbc"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are absent; the body is a list of arbitrary items with no narrative ordering (e.g. \u0027Worker will now replace improvements...\u0027): State what problem each change addresses (e.g. replacing tile improvement for resource gain) and document trade-offs such as increased worker load or checksum complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/873.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"00495636dd1d7a202471423ce15ce67ac6676ef1db86dc224bdded6f96c74073"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one sentence) and consequences/trade-offs are absent; the body is a list of features/fixes with no rationale: Add a Context section explaining why charts-space efficiency matters (e.g. fewer wasted pixels or more visible data) and a Consequences section noting trade-offs like added complexity for overlay support"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/874.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"085b5bd305288c4ee2c22f52d4818f60128dc2479dda8f885c89916844c20279"}},{"ruleId":"D20","level":"warning","message":{"text":"Every entry is a separate short fix with no context/problem statement or consequences; the title \u0027Pillaged improvements have a visual indication on the icon\u0027 is uninformative and the body is a list of unrelated fixes: State the problem (e.g. players abandon pillaged improvements) and the decision (visual indicator added to the icon), then document each fix with its trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/875.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8370b32fad9dd923ceef7befc868d0c3f7590c24e367bdad5b1b354e5e61f8df"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with author names is present: State the problem each fix addresses (e.g. crash during BuyItemsDiscount AI evaluation, uniques not accepting conditionals) and document any trade-offs or remaining gaps"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/877.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1e9821445ffd904399e1aeba3310214c291aaafae2a435fffd40394605cba419"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one decision listed and no consequences) with a weak title (\u0027878\u0027): Add context for each listed AI change (e.g. why risk happiness vs. avoid it), the global politics table fix, and trade-offs of always selecting military first"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/878.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8385e85f4b8e0093cd246c9acaa5d7878961d3ffffecb92bf90e1a447b598b2e"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of AI behaviors with no context/problem and no consequences; the modding note is peripheral: Add a Context section explaining why purchase-path prioritization matters (economy/strategic goals) and a Consequences section on trade-offs like overbuilding or road conflicts"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/880.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"698eacf8e698493ad4063f23cc3683992535bc1cbd228ad95c11632ba268e06f"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of bug-fix tickets with no context/problem and no consequences/trade-offs: State the original performance problem (e.g. automated state loss) and the decision (fix trigger-on-friendship run twice, resolve nested-bracket translation bugs)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/881.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d70d9c5e506be89108c9bb7b371e38d743cfa3a2972af5d762a7f24fad381d29"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin: only one concrete rule added (automatically built in all buildable cities) and no rationale for it; the body is a list of changes with no problem statement or consequences: Add a Context section explaining why linked unit types need promotion (e.g. consistency across units, mod conflict prevention) and a Consequences section on trade-offs like increased game complexity from new promotions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/882.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"671f2198bebbbcc16b46d025cc3764a65924640a26af6e6f99e57f5e02c1b210"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the first decision (\u0027Removing old buildings on enemy capital ... no longer crashes\u0027) and its fixes are recorded; the context/problem and consequences/trade-offs sections are missing: Add a Context section explaining why history zoom is broken (e.g. player frustration) and a Consequences section noting any new trade-offs, such as unintended removal of historical data"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/883.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a5139846928408fdf8b901d34739763d1ae97826e8572cec571e7a1d83893274"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision document; the entries are fixes listed by author rather than an ADR with context/problem, explicit decision, consequences/trade-offs: Convert each fix into a one-paragraph ADR: state what problem it solves, why it was chosen over alternatives, and any trade-offs (e.g. false positives on unowned triggers)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/884.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d7e33aa1f1f563b6f2a32632f7c00679bf2113133457bf6c09667ea7a432edcd"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only one sentence) and consequences/trade-offs are absent; the body is a list of unrelated action items with no decision or rationale: Add a Context section explaining why the building-filter requirement is needed and a Consequences section on trade-offs such as false-positive detection"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/886.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3b467ec6a26d57699eb7ad4b08efb88bcd35e7939ec54ae2b1511dd2df0dd4ff"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes with author names: Add the problem each fix addresses (e.g. buildings triggering stat updates while not active) and its consequences (e.g. broken AI for frontier workers, false-positive crashes)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/889.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a0a0176257f2f2bd653072019a8ab68a64c360531d1ac87a1a7e74b233dabfc5"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; the body is a list of ad-hoc notes (\u0022Display resource uniques in civilopedia\u0022, \u0022Memory improvements\u0022) with no decision or trade-offs: State what problem modding addresses (e.g. players want to see unique city resources) and the explicit decision (show resource uniques on Civilopedia, add a destruction notification via unit ability), plus consequences such as increased load time for large cities"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/890.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb440b1a2f81da12a3af536f8c1242873cff8ec7305f83de164675949c7e6cdd"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of vaguely phrased items (\u0022Little Promotion UX improvements\u0022, \u0022Fix issues from gaining free beliefs\u0022): State the concrete problem being addressed (e.g. poor promotion UI or inconsistent unique-to-object testing) and document the trade-offs (e.g. added work for modders, any new bugs)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/892.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"db23adbc65abc46a753d1efbc9f7717f4521d285bee713066e611ac4003eb1ef"}},{"ruleId":"D20","level":"warning","message":{"text":"All four entries are task tickets with no context/problem and no consequences; the title is a placeholder (\u0022BaseUnit unique-finding always takes Type uniques into account\u0022): Convert each to an ADR: for \u0022BaseUnit unique-finding always takes Type uniques into account\u0022, state the problem (unique-finding misses Type uniqueness, causing duplicate BaseUnits) and the decision (always consider Type uniques), plus consequences like increased build-time or false-positive rate. For tickets add context/triage rationale."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/894.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ef83513540abe230a5546963763e6b585eab57101062ffce3a5a678579aea05f"}},{"ruleId":"D20","level":"warning","message":{"text":"No single decision and no consequences; the entries are fixes/behaviours listed by authors with no unified ADR title: Give each an informative title (e.g. \u0022Fix: Water-movement units\u0022 or \u0022Better Fog Busting AI\u0022) and a Decision section stating what change is made, plus Consequences noting trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/895.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3422b3613b2c8978acf99633750c7779f15c51bef1deb99df840ba885116c8f2"}},{"ruleId":"D20","level":"warning","message":{"text":"This is a list of arbitrary feature removals and patch notes with no context/problem statement, no explicit decision (which features are removed or added), and no consequences/trade-offs: Convert the list into an ADR: state the problem being solved (e.g. \u0027AI workers should only remove harmful civ-specific replacements\u0027), document which features were removed/added, and note any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/896.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ea411df30f0d4a917f957d44418cf9ae46b8da031430b4652ab8428c7dff1179"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is non-existent; only a bare list of improvements and fixes plus author names appears: State the real problem being solved (e.g. inaccurate preview for Forest \u002B Lumber Mill edge case) and why each fix matters"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/899.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"f1bae0b80d98b8b46c4a2c0e5ad4f0ca20ed3b5b32328df15bf312d6c944414c"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of vague bullet points with no decision or rationale: State what buildings/take-over mechanics are being improved (e.g. how they activate) and why this change matters, plus any trade-offs such as balancing concerns"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/900.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b3e20d69470705af12da53a57107f9de74220a57847f7e4c9a487b4cfc815da1"}},{"ruleId":"D20","level":"warning","message":{"text":"Only two short bullet items; no context/problem and no consequences/trade-offs: Expand each entry to explain the problem it addresses (e.g. why defensive pact is deferred) and document any consequences such as activation delay or visible-invisible-unit behavior"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/901.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ce2156c29d2e2c3fdf792eb977ee61aaefebf82c70825793ea40158fc4e7e67f"}},{"ruleId":"D20","level":"warning","message":{"text":"All four elements (context/problem, explicit decision, consequences/trade-offs, informative title) are absent; the entries are all patch notes with no narrative: Replace each entry with a one-paragraph problem statement plus an explicit decision and its consequences. For example: \u0027Context: The undo button in multiplayer now resets to the last move instead of changing next-turn, causing confusion for new players. Decision: Add a toggle to revert the undo action to the original state.\u0027"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/903.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0f41fac4cf352f8a4ba05c654a0eeeb1732d0c888cad9c7366502008042042ee"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of feature/bug fixes (select tile north of city for bombard; fix Transfer Movement stopping healing) and an unrelated Research agreement note with no context/problem or consequences: Add the problem motivating each listed change and the trade-offs/consequences of the decisions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/904.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"59f8c13b9c2b8a0ac76bb02fbd59227d6ddd2415cb3f232b7ea82cd262f617fa"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; the body is a list of resolved ANR errors with no rationale or decision framing: Begin each bullet with a one-line problem (e.g. \u0027Fix promotions appearing in wartime\u0027) and a proposed fix (\u0027Allow promotions to be visible only when they are actually available\u0027), then document consequences such as test cost and any new trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/906.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c08330b4ce6bcce1cd4e6018459288e8ffbaf9b364714805ef77a4edc37fce60"}},{"ruleId":"D20","level":"warning","message":{"text":"No single context/problem and no explicit decision; the body lists only validation (GPP), performance gains, and a trade-decision clarification plus a battle damage test with author but no decision: State the problem (e.g. autopromotion for automated units is not enforced by default) and the explicit decision (add \u0022Jump To Destination\u0022 button for moving units) so consequences/trade-offs follow"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/907.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"18f647bb92d13023a016363268c8a04c31e8bc115980667d759bdde42979f709"}},{"ruleId":"D20","level":"warning","message":{"text":"All four elements are present but the context/problem and consequences/trade-offs sections are missing; only a \u0027Fix:\u0027 line with no problem statement and no trade-off discussion appear in any visible text: Add an explicit Context section explaining why the decision (e.g. \u0027Civilopedia search is broken for religions\u0027) and a Consequences section covering translation quality, performance cost of pillaged tiles, and whether defensive pact UI remains fully localized"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/908.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cee0a00082de5517c7533f19ef16ac5c4ea8243b84b24e050ad815a5eabe461d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only arbitrary patch notes (unique promotion free, cities get resource list of other cities) appear: Replace with a real architecture decision: state the problem being addressed (e.g. AI targeting exploits selection boxes), the explicit decision (add teleportation away from city center for liberating units), and its consequences (new gameplay mechanic, no longer able to target the same city twice)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/909.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8424d7e66cfb7786c4df6e07a2a5586f0efd1ff87db67f12e55e91016efb394c"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are absent despite the decision naming a real problem: Add a Consequences section covering trade-offs such as the cost of manually re-adding missing buildings and how often to check for staleness"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/910.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3a1984c37024be1dd5d7c9133b309a71b57b0fc43d8e36e95b6abc5b87abbc2d"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; no consequences/trade-offs: Add the problem (e.g. duplicate parameters in a single call) and the trade-offs of allowing square brackets (e.g. parsing complexity for callers)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/911.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"0215f45d68425ffbdfe35bb495b51e5743cf94b832420c7065ec9dc5e8c22bad"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of specific tools/modding changes (blacklist, prevent selling free buildings, defense against circular upgrade paths) but the context/problem and consequences/trade-offs are absent: Add a Context section explaining why double notifications/processing/treaty processing were problematic and a Consequences section on trade-offs such as reduced mod flexibility from the blacklist"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/913.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4aa6d3fea1aaf0af97fa3a1b0cc209a54ce28547f4c4ac6237eefaef2651e2fe"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only arbitrary column/status/fix items appear: Add a Context section explaining why the mod checker era-acceptance change was needed (e.g. fixing a mismatch between Era and Unit type) and a Consequences section noting any breaking changes or new friction"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/914.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"18137fb23b2230f55b9deae97e7b9b7b0d13380878feafad59fb185211c62982"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section; the body is a patch list of features and test additions with no discussion of what breaks or how much effort is required: Add a Consequences section covering trade-offs such as the cost of re-adding removed units/improvements versus the benefit of correct autochanges, and any new work needed to fix regressions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/915.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8e8c2f5b2c120954aa08768735cbff801dcd254a61b5f6fe22622372163205ac"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only the performance goals and a few modding notes) with no trade-offs; the author\u0027s by-line fixes are not decisions but references: Add a Context section explaining why validation/loading speed matters for gameplay and how JSON schemas help modders without breaking existing workflows"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/916.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a556afb87238539b5a8fd92096b1b4de4f91f649009b4b5d839b5cae70f42bfe"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of patch-level fixes with vague authoring notes: State the problem (multiplayer stuck when first player is human spectator) and its impact on gameplay. Add consequences such as increased load time or reduced mod flexibility for spectators."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/917.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c08f0ffc8cff63b9ec979a90bd49b07cf7f64fa7f33ac7a68bf7412c94a353df"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of modding fixes with no rationale or impact statement: Add a Context section explaining why first-turn AI settling matters (e.g. how it affects gameplay pacing) and a Consequences section on trade-offs such as increased complexity for modders"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/920.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"924f680564d9fa79d2a49993d439fdf9a2d78c9c8e1b59f6789621b2f8237f13"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are not visible; the body lists only fixes under author names: Add a Context section explaining why each fix matters (e.g. recurring Prophet spawn bug, promotion system leak) and a Consequences section noting any unintended side effects"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/921.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c9581c13e5ba601d5dee2299999e8f0763ab4fd64926d4038d26bda9474a6897"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague \u0027Automated units can fortify/set up/other actions\u0027 with no context/problem and no consequences; the body is a single rule plus an unverifiable claim about AI tech points and a non-architecture note: Replace with a concrete problem (e.g. balancing automated unit utility without overloading) and its trade-offs, then state the explicit decision (e.g. units gain X ability in exchange for Y penalty). The free-tech-point claim is unverifiable noise."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/922.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a73b7d3cc5f681e0a84fea0f3a4dc787bef8d4709633638d2bf3a397554fb24"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but context/problem is thin; only one concrete decision (allow zero-tech games to be \u0027before\u0027 the Ancient Era) is stated with no trade-offs: Add a Context section explaining why this rule matters (games cannot start before the Ancient Era without tech, which is a core progression requirement) and a Consequences section noting that allowing zero-tech games could break existing game order dependencies"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/923.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"51807faff475c6a6922d9b18f72cde9cba44a08b57de9643e1f7b5693f4b63b7"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only a list of changes is present: Add the problem each change addresses (e.g. AI units swapping retreat to prevent stalemates) and its consequences (e.g. increased aggression cost, inflation trade-off). Also note any new requirements or tests needed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/925.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a3a1f78fbf5d598187b7cc6eb5872e629f666782ad5ab782efd62c4c5d2ed51d"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are absent despite a strong context and decision; the body is a list of bug fixes with no trade-off section: Add a Consequences section noting that hiding Uniques from Civilopedia removes filtering guidance for non-modders and save-scumming removal may break existing scum-usage workflows"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/926.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e8b34758232dfc4e30d424bfb66830074e57dd02d26465b16ec1e79db0bee13"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (only \u0022mods with atlases that reference non-existent files will no longer cause crashes\u0022 and a \u0022Reorg SpecialistAllocationTable\u0022 fix) but the decision \u0022Negative tile damage cannot heal more than max health\u0022 is explicit; consequences/trade-offs are not visible before the clip: Add a Context section explaining why negative tile damage should cap at max health (e.g. prevents infinite healing loops, keeps game state consistent), and a Consequences section noting trade-offs such as how this interacts with existing healing mechanics"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/927.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"df1ca155d809574456e018954a4719dbc49a616196041f06790be5ca484b6f7e"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are absent despite a strong context and decision list; the document does not address trade-offs such as mod-difficulty for non-players or how AI filters affect gameplay balance: Add a Consequences section covering trade-offs like increased mod-difficulty for non-players, potential imbalance from unmodded AI behavior, and how to handle new mods that break existing ones"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/928.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"fc99ff25598fa1656f2a8adcf40879078e10bd04f38860ec5d349df99c86eb29"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of features and authoring notes are present: Add the problem motivating each change (e.g. \u0027unit triggers fail on non-target units\u0027) and its consequences (e.g. increased modding complexity, new bug window) for each decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/929.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"919abd03d7276c05b5b2e8b4f3d1c9ae1babce56d7670fce69ceedc396a9ec82"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of patch-level modding changes and no context/problem or consequences/trade-offs: Convert the patch list into an ADR: state the problem (city-center resource extraction limits) and the decision (AI clears inquisitors to allow spaceship units), plus trade-offs (shipbuilding space lost, AI\u0027s new behavior)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/930.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"abcfa02ec2075e713001f68ce27d1507891aedc19c06dc1213479669af1d3671"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs for any of the listed changes; only a header with \u0027Initial scenario/dev console!\u0027 and chore lists: State each change\u0027s motivation (e.g. fix incorrect conditional triggers, prevent popups from closing behind clicks) and document trade-offs such as import tool complexity or new unit type management"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/931.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"190329cd952f640fe2fcc5a7de1f3be451122e614538ede13760c15b81f4613b"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of features with author names are present: Add the problem each listed change addresses (e.g. \u0027console tiles set/remove is broken\u0027) and document any trade-offs such as performance or complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/932.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a329857d8654d0b5ff13ea6c8b22e00d2eab46440f17336c8413f0ce7f1720a"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a vague decision (\u0027Cities you haven\u0027t bombarded with will auto-bombard at turn end\u0027) plus authoring notes: State the problem (e.g. imbalance from untargeted bombardments) and its consequence (overpowered attackers), then document trade-offs of the auto-bombard mechanic"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/938.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"666c15cbae856a9a5cef3bc4c145b68dfbd793fe397ae66abe49e506f812149b"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are absent; only task lists (fix crash, add unique) appear: State the problem each listed change addresses (e.g. trade notification crash, duplicate unit rename popup) and its consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/939.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"42ff493fd61c05b37e04e0e7efeac7bcebb2e0a088f68de7b976e4d8679e64b5"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of unrelated tasks with no context/problem and no consequences; the title is a placeholder: State what problem roads automation addresses (e.g. duplicate free-unit triggers) and its trade-offs (reliability, cost), then document each task in the decision section so they are all visible"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/941.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"64750e46c2bc9b147b849617b33dd9f0ccae56bd63bf62301a5db27017b9ff26"}},{"ruleId":"D20","level":"warning","message":{"text":"This is a list of feature/bug tickets with no context/problem statement, no explicit decision (the allowed conditional types), and no consequences/trade-offs: Convert the list into an ADR: state what city conditionals are allowed now, which ones were fixed, any new conditional type added, and its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/942.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c41cee5862c20d00c2298d3b464413005de3457da312c7c07f44a7bd7c57ef43"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is present but the explicit decision (the new map types) and consequences/trade-offs are buried in a bulleted list of unrelated patch notes rather than being separated by an explicit Decision section: Structure each ADR with its own Context/Problem, Decision, and Consequences sections: for 943 add a dedicated Decision line stating the new map types plus any trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/943.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"01fd64859a40ffa1a923a7e7ece47959eeff2e15825c6c76d3f51eabc1ca9cba"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin; no trade-offs for allowing non-turn-based battle calculation or deprecating old religion uniques: Add a Context section explaining why the old religion unique features were problematic (e.g. tech requirement bugs, broken tileFilter handling) and a Consequences section on how the new decisions affect existing mods"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/944.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2dc415f5de6e163bf9e922dbf0b8a1e4b3583d3a016bbb972670b441121c1ca9"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; each entry is a one-line task with no rationale or impact statement: For each listed change (key bindings fix, coast spread algorithm, road automation) add the problem it addresses and its trade-off"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/945.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4542ef0c1f6940b7f01124100dfef24429c2d017d5e3e67c04769f6f67cc577c"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin (only \u0022Fixed tech dependency related crash\u0022 and a single \u0022Unit by default not selected on turn start\u0022 with no rationale) plus the body ends in an unverifiable list of patch notes without any trade-offs: Add a Context section explaining why the decision was needed (e.g. a specific bug or gameplay loop broken by the dependency) and a Consequences section covering how it breaks existing playstyle or new features"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/947.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"8f855373b1eb3a5fe7cd27692db6eaa9e52eaad3da2fee81316f8301770e56be"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a joke (\u0027Added experimental scenarios!\u0027) and the body is a jumbled list of unrelated fixes with no context/problem and no consequences; \u0027immersion mode\u0027 fix is a non-idiomatic placeholder: Rename to something meaningful (e.g. \u0022Android status bar disappears in immersion mode\u0022) and reorganize into real Context/Problem, Decision, Consequences sections"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/948.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"38ee77d2136d34f6b1fcab81514faa1a57004b5e4d1de124ed3ab9082d91945d"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin (only \u0027Trigger \u0027capture city\u0027 as a unit trigger\u0027 and two worker AI changes) with no trade-offs: Add a Context section explaining why capturing cities as a unit trigger matters over the default action, and a Consequences section on how it impacts gameplay balance"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/949.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb4c4b818e68e18649b6f16c4d17793fa17a4f4ad845ab92f7d65c412ddefcc3"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Updating server URL allows checking connection immediately\u0022) and the decision \u0022New Citizen Focus Options - by Itanasi\u0022 with its two fixes is a feature list rather than an explicit decision statement; consequences/trade-offs are not present: State the concrete problem each fix addresses, explain why the decision was made (e.g. fixing short-distance AI priority to prevent crashes), and document trade-offs such as increased Great Writer complexity or spawn-rate balancing"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/950.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cb5288b12dc148bb25b7efd3c914c756bbbcc6bd0fc19907ba551e0118531e80"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only a list of fixes is visible: Add a Context section explaining the problem (e.g. rare pillage crashes, vector-smoothing need) and a Consequences section noting any new trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/951.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4a24adf3bb54689af9013a714069af15b8b2cc7c1cf003f7ad2719b781a1c69d"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin; each entry lists only the change and a one-line bug fix without stating what problem it solves or why the decision was made: For each listed action (e.g. \u0027Add unique to allow for generalized great generals\u0027), add a sentence explaining the context (why matching names matters, e.g. gameplay balance) and the consequences of the change"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/952.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3f5debf725def5424f199d81d099e820785b45e773deea8d824bf24192566e1c"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin (\u0022Console: autocomplete ALL THE THINGS!\u0022 with no problem statement) and the four listed changes are feature patches rather than a unified decision; consequences/trade-offs are absent: State what the pathfinding decision addresses (e.g. finding paths through complex terrain or avoiding impassable areas) and note why it is experimental, plus document the consequences of activating it"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/953.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2386eb127a01463521d36d24e53c4c2a62ae9edbf92afbeb77303a2295c46579"}},{"ruleId":"D20","level":"warning","message":{"text":"This is a list of short commit/PR titles with no context/problem and no explicit decision; the body is empty: Add an Context section explaining why movement/performance matters (e.g. turn order fairness, rule validation speed) and an Explicit Decision section stating what change was made (unique MayBuyConstructionsInPuppets, Polynesia turn-zero fix). Consequences/trade-offs also needed."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/956.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"de98ecad86a8a931d41f56736cae6b68947a463eac67d11a20dba71b781781f8"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; only the decision lines appear (\u0022Cannot be traded\u0022 unique accepts Civ conditionals) with no rationale or impact: Add a Context section explaining why mod-tradeability is restricted to Civ conditionals and a Consequences section on trade-off risks such as reduced mod discovery for non-Civ players"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/957.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"22b438be9e879556389869e37655912a0eabceb0b20db038b8c999d7914e3c34"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem is thin; only the decision and two patch notes are present: Add a Context section explaining why start locations should not spawn next to natural wonders (e.g. balance) and why spectator in multiplayer must take no actions"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/958.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"99aff7f7156184ad002d485a901677aae173075ab910974d1a9c7f301773f90e"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are absent; only a vague \u0027user option\u0027 title plus two unrelated patches (road priority rework, spectators seeing diplomacy screen) appear: Add the problem driving the auto-bombard option (e.g. over-whelming enemies at end of turn) and its consequences (gameplay imbalance, new AI behavior to manage), then document why it is a user preference rather than an AI decision"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/959.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"7b3e66c408be9dab29a753f1da84daa725fab28d8ee12b2be8d6f792e179fdd1"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; the body is a list of fixes (Conditional building check, paging new architecture, Fixes RequiresBuildingInSomeCities rejection reason) with no rationale or trade-offs: Add a Context section explaining why each fix matters and a Consequences section noting any operational or design costs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/960.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"eea84413acf8c409650c887ea342ef004cf049d8743b6bb0d5c4b300bedc0ac6"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; only a list of features added and no consequences/trade-offs: Add the problem motivating each feature (e.g. \u0027Players want to know when a modded unit is unavailable\u0027) and document any trade-offs such as increased complexity or resource cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/961.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"bb6ee2b15925d639c53974b8777e157db83aa6659a08bdf0d2f40bfbb11e8586"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision \u0027unify unit and civ triggers\u0027 is present but the context/problem (why unify triggers) and consequences/trade-offs are not visible in the excerpt: Add a Context section explaining why unit/civ triggers need to be unified (e.g. consistent AI behavior across factions, avoiding duplication), then Consequences covering trade-offs like breaking existing trigger-based logic or requiring rework"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/963.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"4e11473ee6b3d6b9a7c26e96b7bc6cfcb749266c0bdedd692472592fde4550c9"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single vague \u0027copy to clipboard\u0027 button on map errors; no context/problem and no consequences/trade-offs: State the specific map-error scenario (e.g. debugging a corrupted tile) that triggered this change and document the trade-offs of adding a copy-to-clipboard UI, such as clutter or distraction"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/964.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"655a361c488832b0ebbf37cd0b9586ca8ef079db579c34c08ba700020f5d426a"}},{"ruleId":"D20","level":"warning","message":{"text":"Ranged unit capture-civilian crash context and consequences are present but the decision (conditional support added) is restated rather than explained; no trade-offs for the new conditional logic: Clarify why ranged units need this conditional (e.g. prevent infinite loops or overpowered captures) and note any unintended side effects such as allowing a ranged unit to capture a civilian it cannot reach"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/965.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d24dd2f1ad98f346cea394f82c6fa71d40fbda45ae6573235a8c867132a6bd77"}},{"ruleId":"D20","level":"warning","message":{"text":"The decision \u0022Korean science boost only applies for buildings *in capital*\u0022 is a rule with no context (why the filter must be city-based) and no consequences; the body clips mid-sentence: Add Context: explain why city filters are needed (e.g. Korean science needs to target capitals, not all cities). Add Consequences: trade-offs of filtering by capital (e.g. reduced data for non-capital regions)}"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/966.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"9e6643b0e833f63f3a6ba965ed5e54dbddf685c5947feafe5a1f4fcc92774b79"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not present in the visible text: Add a Consequences section covering trade-offs such as increased cost of unique units and the impact on gameplay when teleport placement is required"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/967.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"50c82cb08017e0a7a52f8838d14505d78819bdd23c3abbfda09ca73b09ac8902"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single line (\u0027Allow lower-case \u0022all\u0022 for all filters\u0027) with no context/problem and no consequences/trade-offs: Add the problem (e.g. \u0027the filter \u0022All\u0022 was typed as lowercase and did not match intended intent\u0027) so readers know why it matters, and document any trade-offs such as false-positive behavior from accidental case"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/968.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"613970a3def6c1a4971927f23cb4b3f20637fe0aa45dd016fff72c3b5a381064"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a single sentence (\u0027AutoAssign Population with Food Converts to Production\u0027) that names the change but gives no context/problem and no consequences/trade-offs: Add the problem (e.g. population growth without food causing starvation) and its trade-offs (conversion rate loss vs hunger penalty) so readers judge feasibility"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/969.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"911bbc06af97d8764b26f5cd9a5a2923f74ddfffd141b5cb8dc678cf88d90053"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are not present in the visible text: Add a Consequences section noting that forcing every timed unique into trigger-based unit actions may break existing conditional triggers and require re-evaluation"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/970.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e0e19f94e5001a29e937a60b071766f735a89f052a7ea78cfcb11584a9744815"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; the body is a list of feature requests with no decision or rationale: State what problem each request addresses (e.g. hidden-from-users modifier misuse, unfortifyable upgrades not keeping fortification) and document the trade-offs (e.g. new triggers complexity, Barbarians needing set-up ranged units)"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/971.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6204edd692459e206501eab086cf57e8261f5f8b74c26b4c99a0a7990cd7c58c"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a list of features and fixes but no context/problem (e.g. why land-based nuke units were added) and consequences/trade-offs are absent: Add the problem motivating AI for land-based nukes (e.g. balancing against air/underwater) and note any trade-offs such as increased complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/972.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b68732970420269428e71e973683f708ba67bffffa8ec77c246afa82346db60e"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no explicit decision; the body is a list of features/fixes with no rationale or trade-offs: Add a Context section explaining why AI tile evaluation, Civ-wide uniques, city add/remove building commands, conditional population limits, and tech cost warnings matter, then an Explicit Decision stating what each change accomplishes and its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/973.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"ae0bbf1122879ca5d6fe459a3e5329036864b1f898b697ccb7c47b4ae63f6317"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of unrelated patch-level changes (DiplomacyScreen UX, validation warning suppression, UI fixes) with no context/problem and no explicit decision; the title \u0022Changed tech trigger to accept tech filters\u0022 is a vague placeholder: State what problem the tech-filter acceptance was addressing (e.g. filtering options on a cramped screen), document the explicit decision (accept tech filters as input criteria), and note any consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/974.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"6583552fce3a98d737b2441c880ca1cd71b19ac83a850e7bdab20c7d25c01cb0"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are absent; the body is a list of feature requests with no rationale or trade-offs: Add a Context section explaining why multifilter uniques matter (e.g. filtering by resistance/city status) and a Consequences section noting any downsides such as false-positive risk or performance cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/975.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d8a522f370d22f315eee5d943983f8a90d21566ed67fa2d231054f91b870cdc4"}},{"ruleId":"D20","level":"warning","message":{"text":"Title \u0027Added Events, moddable choices for triggering uniques!\u0027 is an empty banner; no context/problem and no consequences/trade-offs are stated: Add a Context section explaining the problem (e.g. escorting conflict) and a Consequences section on trade-offs such as balancing new triggers"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/976.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"cae74591e9eff71f8747d1f33fc6bf575b2289bbf379c7290ab5978df094a092"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences/trade-offs are absent; the body is a list of vaguely phrased design/behavior goals with no rationale or trade-off discussion: Add a Context section explaining why each change matters (e.g. religious victory crashing vs. city focus/civ personality) and a Consequences section noting any unintended consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/978.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d175c27acb4a59bff677e2a0cecd27c8108099f7a76495074630504727b94afa"}},{"ruleId":"D20","level":"warning","message":{"text":"The four elements are present but the context/problem is only a one-line summary of each fix (e.g. \u0022Fixed crash entering trade from overview on other player\u0027s turn\u0022) and no consequences/trade-offs for each decision: Add a Context section for each fix stating what it fixes and why, then a Consequences section noting any new risks or workarounds"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/979.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"34754f8198d707bac65cc541c0ada5b575b845c4d8163ecb37eb70ddb397a1f2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences; only two short patch notes (multi filter support for BuildingFilter, fixed ConditionalBuilding error message) plus a \u0027Better tundra color\u0027 by Caballero-Arepa appear in the body: Add the problem motivating this change (e.g. impassible tiles blocking improvement construction) and its consequences/trade-offs (feature removal cost, new build-path complexity). The patch notes are minor fixes; the main decision is whether improvements can be built on features without removing them."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/980.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c2924c15041ad48e4dd8291d0bd04a178660e0759c920286ef21090d86bcdb35"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are thin; only four short bullet points (policy tables no longer repeat on some height/width configs, discard pending trade requests on both sides when war is declared, memory performance improvements, fix loop when AI removes an improvement with the same name as a terrain feature) carry any rationale or trade-offs: Add a Context section explaining which height-width configurations are excluded and why repetition matters, then a Consequences section covering the false-positive risk of repeated policy tables and how discard-on-war is enforced"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/982.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"e5b99d9906b206c6c976073d1365c630c2514d77f553d4f3bbd057c668a70ed3"}},{"ruleId":"D20","level":"warning","message":{"text":"The body is a list of patch-level change proposals with no context/problem and no consequences/trade-offs for each; the title \u0027Hide battle table after attack if we can move, but not attack again\u0027 is informative but the rest are uncontexted action items: For each listed change (battle-table hiding, mod visibility, Barbarian placement, remove blacklist, add modifier, countable comparisons), state what problem it addresses and its consequences"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/983.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"199f1eddad89c28f80cf2d24d5c434223bb6614b181191a6eb664f3930bfcd95"}},{"ruleId":"D20","level":"warning","message":{"text":"Context/problem and consequences are absent; the body is a list of arbitrary game mechanics with no narrative framing: Describe what performance improvement this addresses (e.g. reduced frame drops or smoother diplomacy) and note any trade-offs such as balancing cost"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/984.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"1a61e7cbe860b7929e17dd3eac8f2375042a1ecebd48717c20a91f2289ad5162"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague \u0022Resolved edge-case crashes\u0022 and the body lists only work/fix tickets without context/problem or consequences: State what deprecated conditionals were causing which crashed (e.g. old conditional branches now re-activated) and document trade-offs such as breaking new code that still uses them"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/985.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"76d7ec5e216f29d72f17ead118b109ec53a8c31da4d97df698a12db772121d06"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin; trade with war civs via notification action is a geopolitical rule not explained in body text: Add a Context section explaining why cross-civilization trade is restricted (geopolitical stability, resource control) and a Consequences section on how it impacts diplomacy and economy"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/986.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a4f1fe974f80a9307b6f7de03d1dc6adc07f59eaa49b7eabfedcbdea269253e2"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem and no consequences/trade-offs; only two features listed by each author: Add a Context section explaining why the features are needed (e.g. custom map flexibility, escort formation visuals) and a Consequences section on trade-offs like performance or usability"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/987.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"87ab8e4da86981f413f0d0b1a94d3910eec9331cbaed882c5806aece7c5c82e3"}},{"ruleId":"D20","level":"warning","message":{"text":"Title is a vague placeholder (\u0027989\u0027) with no problem statement and the body contains only two unrelated commands (\u0022Do not preselect custom map option and defer map file loading\u0022; \u0022Fix Puppets building wonders - By SeventhM\u0022): Replace the placeholder title with an actual context/problem, state the explicit decision, and document consequences/trade-offs"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/989.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"13b23895bae4959350d8076191a37ae708bb9d9eea0b1dce8cce282cce846dd1"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision and consequences are present but the context/problem is thin (e.g. \u0022Autoplay can run on a different thread\u0022 as a decision with no rationale) and trade-offs fall below the visible scope: Add a Context section explaining why autoplay needs to run on a separate thread (responsiveness, not blocking main loop), and note consequences such as thread-pool overhead or stack growth"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/990.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"2be965d27236e8cc9bdb1b33e040c4b89e4ec5410db4a15e0f011d27c95e02a0"}},{"ruleId":"D20","level":"warning","message":{"text":"The visible text is a mix of resolved tickets and a fix note with no context/problem statement for the original decision: Add an Context section explaining why memory/CPU optimization was needed (e.g. high-polygon civilian AI or long pause/resume lag) before resolving each ticket"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/992.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"d06da64ab47153b8a5e3937da2eb88a70dc2aade6154f579b582f7d34c408164"}},{"ruleId":"D20","level":"warning","message":{"text":"No consequences/trade-offs section; the body lists features fixed and added but does not address any negative impact or alternative trade-off: Add a Consequences section covering potential downsides such as increased command overhead for escort logic, new complexity from civilian adjacency in movement checks, and how existing tools will handle terrain filtering now that \u0022Open terrain\u0022 is fixed"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/993.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"3e6e30f4820792d7371e430ee4f14b72ba03c58c558c0ef838623283a51facd7"}},{"ruleId":"D20","level":"warning","message":{"text":"Only the decisions (espionage uniques, next-turn spy notification, diplomatic repercussions for spying) and a victory-type conditional are stated; no context/problem and no consequences/trade-offs: Add a Context section explaining why espionage uniques matter and how the spy-notification UI addresses player intent, then a Consequences section covering trade-off risks such as reduced spy-ability pacing or added diplomacy complexity"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/994.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"a49515307f86456a583ce48999c9322e0daa731b83dc6b9928a1b94f99150ba1"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement (why conditionals are needed) and no consequences/trade-offs: Add a Context section explaining the problem (e.g. conditional uniques allow tactical flexibility under pressure) and a Consequences section on trade-offs like complexity or abuse"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/995.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"98d841f6953e5bd4ffb2acb217ec47aa880d133f9d8be0899c952c1431559876"}},{"ruleId":"D20","level":"warning","message":{"text":"No context/problem statement; each entry is a feature/todo (espionage UI, election rigging, tutorial, wiki link) with no rationale or problem framing: Add a Context section explaining why these features matter and the problems they solve"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/996.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b7f7c9c40d4b64a97d6de6c57984f3fb1f26ffcc85181e59dad8f366ab56870c"}},{"ruleId":"D20","level":"warning","message":{"text":"Decision is a vague \u0027no longer pillage\u0027 with no context and consequences; the listed console changes (tile setowner, civ removepolicy) are not explained in body: Add Context: why barbarian water units were pillaging (economy/strategy purpose), and Consequences: trade-offs of removing pillage (loss of resource-gathering, new pillage alternative). Explain the two console changes with rationale"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/997.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"c3d9a22259817e34c3da80bffca7ad6ed2549094013fdeadeaa63c9d64bf6b71"}},{"ruleId":"D20","level":"warning","message":{"text":"Consequences/trade-offs are absent despite a strong decision (forbidding capital city indicators entirely): Add a Consequences section covering the trade-off of losing visual clarity for players who rely on the question mark to identify capitals and how it will be mitigated"},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"fastlane/metadata/android/en-US/changelogs/998.txt"},"region":{"startLine":1}}}],"partialFingerprints":{"codehealthFindingId/v1":"b6f28a06f299f9f0ebbd77e243cba630ccff049404199caab562e07d86156cad"}},{"ruleId":"D28","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"3cdfd7beb31b791ae18dcb425e21eb157c842e7bbcd522cc330573c1a6538db1"}},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"958bb8934fc7a877cf62ab1a49bd2ffdc3e2be88109dff3a66b21b904b3f7996"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"958bb8934fc7a877cf62ab1a49bd2ffdc3e2be88109dff3a66b21b904b3f7996"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"958bb8934fc7a877cf62ab1a49bd2ffdc3e2be88109dff3a66b21b904b3f7996"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"958bb8934fc7a877cf62ab1a49bd2ffdc3e2be88109dff3a66b21b904b3f7996"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"958bb8934fc7a877cf62ab1a49bd2ffdc3e2be88109dff3a66b21b904b3f7996"},"taxa":[{"id":"CWE-78","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"52e2bb9d3a6ebf069310773d4ecea31899820a3eff1a12622f6123ec1386df8a"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7b98859f7a02937596b47bd875c357d1e44155dc5aeabc519296581f3c0d789"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7b98859f7a02937596b47bd875c357d1e44155dc5aeabc519296581f3c0d789"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7b98859f7a02937596b47bd875c357d1e44155dc5aeabc519296581f3c0d789"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7b98859f7a02937596b47bd875c357d1e44155dc5aeabc519296581f3c0d789"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"c7b98859f7a02937596b47bd875c357d1e44155dc5aeabc519296581f3c0d789"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D29","level":"error","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"5edec9323a72eac829ac44395fe6aea79875c951f5bab635b36b3b8a83dd6b8d"},"taxa":[{"id":"CWE-1357","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}},{"id":"CWE-353","toolComponent":{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d"}}]},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"becbc5502f94878197b05d70c7ef15f1353fd99a90efcb824b9c43f11ae5ce7a"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"becbc5502f94878197b05d70c7ef15f1353fd99a90efcb824b9c43f11ae5ce7a"}},{"ruleId":"D31","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"9ff1ee9dd5615e2d512c1b5a7eb9a731208830cdc6ec1c07d8913d2a5c081e3c"}},{"ruleId":"D31","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1f51a163f26d94ce6b6f473117dde579d091c8cbf9e59810475c94d9fc921120"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"1b213f6eedd4b140d0bc37bdf1496f72811a643f34064f12518b32e9e83bcfc7"}},{"ruleId":"D36","level":"note","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"eb00976a698a5d68999b7ee6d27206fd374e916853e7ff1ead5eed42386f043f"}},{"ruleId":"D36","level":"warning","message":{"text":"A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."},"partialFingerprints":{"codehealthFindingId/v1":"90f83b4fa27db32740afe9540c905f3c0499caed87f61049a8a903ecc95b41c3"}}],"taxonomies":[{"name":"CWE","guid":"c3a2b1d0-7f3e-4b2a-9c1d-5e6f7a8b9c0d","organization":"MITRE","informationUri":"https://cwe.mitre.org/","isComprehensive":false,"shortDescription":{"text":"The MITRE Common Weakness Enumeration (CWE)."},"taxa":[{"id":"CWE-1032","guid":"5f21e517-68aa-a650-9a25-5771ef024637","name":"OWASP Top Ten \u2014 Security Misconfiguration category","shortDescription":{"text":"OWASP Top Ten \u2014 Security Misconfiguration category"},"helpUri":"https://cwe.mitre.org/data/definitions/1032.html"},{"id":"CWE-1357","guid":"e4d2e772-757e-0a5c-bd7d-77052949d866","name":"Reliance on Insufficiently Trustworthy Component","shortDescription":{"text":"Reliance on Insufficiently Trustworthy Component"},"helpUri":"https://cwe.mitre.org/data/definitions/1357.html"},{"id":"CWE-16","guid":"659db3ea-affc-8453-8add-c1218fbfcb92","name":"Configuration","shortDescription":{"text":"Configuration"},"helpUri":"https://cwe.mitre.org/data/definitions/16.html"},{"id":"CWE-259","guid":"ae9ad959-fbb6-9d5e-892d-3dca66da0b69","name":"Use of Hard-coded Password","shortDescription":{"text":"Use of Hard-coded Password"},"helpUri":"https://cwe.mitre.org/data/definitions/259.html"},{"id":"CWE-353","guid":"09d7e902-d4ee-f05d-ae6c-0a1554d0c18f","name":"CWE-353","shortDescription":{"text":"CWE-353"},"helpUri":"https://cwe.mitre.org/data/definitions/353.html"},{"id":"CWE-494","guid":"b8a65e0d-e459-4a55-a931-fc1136482375","name":"Download of Code Without Integrity Check","shortDescription":{"text":"Download of Code Without Integrity Check"},"helpUri":"https://cwe.mitre.org/data/definitions/494.html"},{"id":"CWE-732","guid":"1da27e8f-b330-7650-ab63-bd61953eae5d","name":"Incorrect Permission Assignment for Critical Resource","shortDescription":{"text":"Incorrect Permission Assignment for Critical Resource"},"helpUri":"https://cwe.mitre.org/data/definitions/732.html"},{"id":"CWE-77","guid":"332c8ade-6612-9f56-a06b-d8d90b1a8750","name":"Command Injection","shortDescription":{"text":"Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/77.html"},{"id":"CWE-78","guid":"2e31ceaf-c7ae-2e5e-9661-cfb1362789cf","name":"OS Command Injection","shortDescription":{"text":"OS Command Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/78.html"},{"id":"CWE-79","guid":"fd45580b-e8c4-fc5e-8c2f-aa8fab0b4dbf","name":"Cross-site Scripting (XSS)","shortDescription":{"text":"Cross-site Scripting (XSS)"},"helpUri":"https://cwe.mitre.org/data/definitions/79.html"},{"id":"CWE-798","guid":"5e8f057d-fee3-995a-a0cb-9fc5b0d174d1","name":"Use of Hard-coded Credentials","shortDescription":{"text":"Use of Hard-coded Credentials"},"helpUri":"https://cwe.mitre.org/data/definitions/798.html"},{"id":"CWE-89","guid":"6d08fdad-37eb-c150-bbf0-d7d946863407","name":"SQL Injection","shortDescription":{"text":"SQL Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/89.html"},{"id":"CWE-94","guid":"75e7f50c-6c2f-dd52-bf40-bf6c52b861fd","name":"Code Injection","shortDescription":{"text":"Code Injection"},"helpUri":"https://cwe.mitre.org/data/definitions/94.html"}]}],"properties":{"codehealthPublication":{"public":true,"notice":"This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings \u2014 which rule fired, in which file, on which line, and how to fix it \u2014 are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.","securityFindingsRedacted":58,"secretScannerRunsExcluded":0}},"redactionTokens":["A security finding was recorded here. Its details are withheld on the public artifact \u2014 ask the repository owner for the full report."]}]}