Public report — Unciv, published 6 Aug 2026. Concrete security findings (CVE IDs, secret matches, dependency versions) are hidden in this version; ask the repo owner for the full report.
Watchdog 06-08-2026 @ 22:07 UTC Public
Code Health Audit

Yairm210/Unciv

No baseline yet — first run coverage not measuredno automated tests
48% Weak
CriticalWeakAdequateStrongExemplary
upper third — near Adequate

Hobby · weakest lens: Readiness (27%)

Grounded in facts. Every number here is computed, not narrated — reproducible, tool-backed, and traceable to a line of code. How to trust this ▸

32/35dimensions tool-verifieddeterministic · confidence 1.0 · 3 LLM-assisted, advisory
486findings with an exact file:lineof 496 — the remainder are repo-wide signals (a dimension-level measurement, not a single line); open any file:line and verify
35/90dimensions across the health lenses — wide & deep

Executive summary

Read through the Production lens — the standard calibration. *Green* means good enough to run in production. The score is absolute and comparable across repos.

yairm210/Unciv carries serious gaps (48%). Several issues below can materially affect correctness, security, or the cost of changing it — and propagate to everything that depends on it.

It is strongest in Architecture (96%) — the structure is clean and changes stay contained. Code Health (83%) is solid too.

The area that most needs attention is Readiness (27%) — releases are harder to depend on — versioning, release notes and dependency hygiene are thin, so consumers can't easily tell what changed or trust an upgrade. Security (53%) is the next concern — exposure to security and compliance incidents is elevated.

Leadership focus, highest impact first: 1 No tests found finding(s) in Test Distribution (Test Distribution); ILogger (or Serilog) and log at meaningful points across… (Observability); SAST step (e.g. CodeQL) or a security analyzer package (Security & performance tooling).

For scale: Hobby (~0 production lines); rebuilding it from scratch would take roughly ~0.1 person-years (~1 engineer). Approximate, ±~30%.

It builds on a genuinely strong Architecture foundation (96%); the priorities above are the highest-leverage way to bring the rest up to that level.

How the score is built — each lens's share of the headline Width is the lens's weight in the worst-heaviest fold (the weakest area pulls hardest); colour is that lens's own band. A lens fixes the score in proportion to its width.
Readiness 27% · 47% weightSecurity 53% · 26% weightMaturity 74% · 14% weightCode Health 83% · 8% weightArchitecture 96% · 4% weight

Raise Readiness 27 → 70 (the Healthy floor) ⇒ headline 48 → ~65.

Code composition — where the lines go
Tests 100%

Top priorities

The highest-leverage moves; the full ranked list is in the Roadmap below.

1
Resolve the 1 No tests found finding(s) in Test Distribution.
+20.1 pts · Low effort · Test Distribution
2
Adopt ILogger (or Serilog) and log at meaningful points across the projects.
+20.1 pts · Medium effort · Observability
3
Add a SAST step (e.g. CodeQL) or a security analyzer package.
+20.1 pts · Medium effort · Security & performance tooling

Diagnosis — what's actually going on

Highest-leverage move · Medium · Leverage
Of everything flagged, the best return on effort is: Resolve the 1 No tests found finding(s) in Test Distribution. The rest can wait behind it.
Evidence: priority ranking: top of 5 ranked by impact/effort
→ Resolve the 1 No tests found finding(s) in Test Distribution.

At a glance — Code Health · 83% · Adequate · gated by D2

At a glance — Architecture · 96% · Exemplary

At a glance — Maturity · 74% · Strong

At a glance — Readiness · 27% · Weak · gated by D9, P2, P3

At a glance — Security · 53% · Adequate · gated by D29, D36

Security & Compliance — OWASP Top-10 mapping

Findings mapped to OWASP categories; the specific CVEs/secrets are in the Security dimension cards below and findings.md (redacted only on the public version of this report).

OWASP categoryFindingsSeverity
A03:2021 — Injection50High / Critical
A05:2021 — Security Misconfiguration4Medium
A02:2021 — Cryptographic Failures1Medium

Roadmap

Begin by addressing the single missing test case to improve test coverage. Next, implement structured logging using ILogger or Serilog across all projects to enhance observability. Introduce static application security testing, such as CodeQL, to identify vulnerabilities early. Finally, enforce versioning for traceable releases and add health checks with a rolling update strategy to ensure safe deployments and automatic rollbacks.

Ranked by impact ÷ effort. "Helps" is the estimated gain on the 0–100 health score.

Do thisHelpsEffortDimension
Resolve the 1 No tests found finding(s) in Test Distribution.+20.1 ptsLowTest Distribution
Adopt ILogger (or Serilog) and log at meaningful points across the projects.+20.1 ptsMediumObservability
Add a SAST step (e.g. CodeQL) or a security analyzer package.+20.1 ptsMediumSecurity & performance tooling
Stamp a version (csproj <Version>, a VERSION file, or GitVersion) or tag releases with semver so builds and releases are traceable.+18.1 ptsMediumRelease Hygiene
Add readiness/liveness probes and a rolling-update (or blue/green) strategy so a bad release is caught and rolled back automatically.+13.3 ptsMediumDeployment & Rollback
Resolve the 50 High finding(s) in Static Analysis (SAST) — start with buildAndDeploy.yml (36), buildMultiplatform.yml (9), buildAndTest.yml (5).+6.0 ptsMediumStatic Analysis (SAST)
Resolve the 1 No SBOM finding(s) in Supply-chain Provenance & Signing.+1.6 ptsLowSupply-chain Provenance & Signing
Resolve the 1 No build provenance finding(s) in Supply-chain Provenance & Signing.+1.6 ptsLowSupply-chain Provenance & Signing

File quality

Per-file score 0–10 — a quality signature. Of 429 files carrying findings, judged against the Production bar: 0% slop · 2% mixed · 98% near-clean.

FileScoreBandWorst signal
.github/workflows/buildAndDeploy.yml4.4MixedStatic Analysis (SAST): High: github-actions-mutable-action-tag
.github/workflows/buildMultiplatform.yml4.4MixedStatic Analysis (SAST): High: github-actions-mutable-action-tag
.github/workflows/buildAndTest.yml4.6MixedStatic Analysis (SAST): High: github-actions-mutable-action-tag
Dockerfile5.6MixedIaC & Container Security: Medium IaC: DS-0001
core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt7.2MixedCode Duplication: Duplicated block (22 lines × 2)
core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt7.8MixedCode Duplication: Duplicated block (48 lines × 3)
core/src/com/unciv/logic/map/PathingMap.kt7.8MixedCode Duplication: Duplicated block (17 lines × 2)
core/src/com/unciv/models/ruleset/nation/Difficulty.kt7.8MixedCode Duplication: Duplicated block (10 lines × 2)
core/src/com/unciv/logic/civilization/Civilization.kt7.8MixedCode Duplication: Duplicated block (8 lines × 2)
core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditSubTabs.kt8.5Near-cleanCode Duplication: Duplicated block (21 lines × 2)
core/src/com/unciv/logic/map/MapPathing.kt8.5Near-cleanCode Duplication: Duplicated block (18 lines × 2)
core/src/com/unciv/ui/screens/mainmenuscreen/EasterEggRulesets.kt8.5Near-cleanCode Duplication: Duplicated block (15 lines × 2)
core/src/com/unciv/logic/automation/civilization/DeclareWarTargetAutomation.kt8.5Near-cleanCode Duplication: Duplicated block (13 lines × 2)
core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt8.5Near-cleanCode Duplication: Duplicated block (10 lines × 2)
core/src/com/unciv/logic/map/TileMap.kt8.5Near-cleanCode Duplication: Duplicated block (9 lines × 2)
core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt8.5Near-cleanCode Duplication: Duplicated block (8 lines × 3)
core/src/com/unciv/logic/map/mapgenerator/MapLandmassGenerator.kt8.5Near-cleanCode Duplication: Duplicated block (7 lines × 2)
core/src/com/unciv/logic/simulation/Simulation.kt8.5Near-cleanCode Duplication: Duplicated block (7 lines × 2)
core/src/com/unciv/logic/trade/TradeEvaluation.kt8.5Near-cleanCode Duplication: Duplicated block (6 lines × 2)
core/src/com/unciv/ui/components/widgets/BorderedTable.kt8.5Near-cleanCode Duplication: Duplicated block (6 lines × 2)

Methodology & how to trust this report

Watchdog is a deep, periodic assessment — run each sprint, monthly, or quarterly, taking the time to go wider and deeper than a quick check and surfacing in one coherent report what you'd otherwise piece together from a dozen separate tools. It scores deterministically: the same commit yields the same score, every run. 32 of 35 evaluated dimensions are computed purely by tools and static analysis (confidence 1.0); 3 documentation/naming judgement(s) are LLM-assisted and labelled advisory. Overall confidence is 0.6 — the weighted average across measured dimensions; it falls as more of the score leans on LLM-assisted judgement and rises when it's fully tool-backed.

Every figure here is one of three kinds, and we label which: ✓ Measured — a deterministic fact (LoC, complexity, coverage); ~ Modeled — an estimate from a stated model (cost, effort, value-at-risk), always a range with its assumptions, never a precise fact; ◐ Advisory — an LLM prose judgement. We never present a modelled estimate as if it were measured. Perfect or absent scores carry their provenance too (ADR-0011): ✓ Tool-verified means the property itself was measured across the surface; ○ Nothing flagged means the probes came back clean — a claim bounded by what a repository can show; ⊘ Not evidenced means a working control (a tested restore, an automated rollback) showed no positive evidence — absence of evidence is not evidence of a control, so it's excluded from the score rather than awarded a spurious 10; ◐ Sampled · advisory marks an LLM verdict over a bounded sample — advisory, never a deterministic measurement.

What we checked — 35 dimensions across the health lenses
D1D2D3D4D5D7D9D12D13D15D16D20D21D25D26D27D28D29D31D34D35D36AX5M1M2M3M4P1P2P3P4P6X1X3X4

Each chip is a dimension scored from real signals across architecture, testing, dependencies, security & compliance, documentation, git-history and code quality — in one coherent pass. A surface report typically covers a handful.

How to trust any code-health report — three questions
  1. Can you open the finding? Real findings cite a repo-relative file and line you can open at the cited line — never an absolute scratch path. Here, 486 of 496 do; the remainder are repo-wide signals — a dimension-level measurement, not a single line. (Every path in this report is repo-relative by construction: paths are normalized at the producer and the report is rejected if any rooted path leaks through.)
  2. Is there a tool behind the number? Every score below names the method that produced it — Roslyn, git, a scanner, or (for a handful of documentation/naming dimensions) an LLM labelled sampled · advisory — not a narrative.
  3. Does re-running give the same result? Run it again on the same commit and the score — and this report, byte for byte — is identical. A report whose numbers move between runs is describing the run, not the code.

This report answers yes to all three. That's the bar to hold any assessment to.

Tools & methods

The actual versions used this run (captured at analysis time) — re-run on the same commit for the identical score.

MethodBacksVersionEvaluator
Roslyn static analysisComplexity, cohesion, coupling, dead code, API surface, layering5.3.0✓ deterministic
Native secret scannerHardcoded secrets / credentials1.0.0✓ deterministic
jscpdCode duplication✓ deterministic
Coverage (coverlet / dotnet-coverage)Line & branch coverage10.0.301✓ deterministic
NuGet / dotnetOutdated, vulnerable & deprecated dependencies10.0.301✓ deterministic
git / LibGit2SharpChurn hotspots, knowledge concentration, history2.43.0 · 0.31.0✓ deterministic
gitleaks · semgrep · trivy · checkovSecrets in history, SAST, CVEs, IaC & container, PII / GDPR1.86.0 · 0.69.3✓ deterministic
LLM (sampled · advisory)Documentation quality, ADR conformance, naming — sampled over a bounded sample; advisory, never a deterministic measurementLocal LLM◐ LLM · sampled · advisory

Every finding is locatable in findings.md. Run 019fd91d-f0a3-7546-903c-2baddde10900.

The exact command behind every deep-scan dimension — tool, version, invocation and retained raw output — is in Appendix B — Reproduction & audit trail.

Run transparency — what happened this run

What ran differently this time — a tool absent, degraded, or that fell back to an estimate. Named openly, not folded silently into the scores. A degraded run also records its exact cause in diagnostics.md.

  • D18 Solution Shape — evaluation did not complete — Dimension evaluation failed — excluded from the score.
  • D19 Documentation Quality — LLM provider failed — The model provider returned an unusable result, so this LLM-assisted dimension fell back to a measurement gap (confidence 0) rather than a penalty. Re-run with a reachable provider to score it.
  • D30 Dependency Vulnerabilities — scanner not present in this environment — The backing tool was not installed where this scan ran, so this dimension was not scored. Install the tool (or run in the hosted environment, where it is always present) for a graded result.
  • D32 Data Compliance (PII/GDPR) — scanner not present in this environment — The backing tool was not installed where this scan ran, so this dimension was not scored. Install the tool (or run in the hosted environment, where it is always present) for a graded result.
  • D33 JS/npm Dependency Vulnerabilities — scanner not present in this environment — The backing tool was not installed where this scan ran, so this dimension was not scored. Install the tool (or run in the hosted environment, where it is always present) for a graded result.
  • D37 Vulnerability-disclosure Policy — scanner not present in this environment — The backing tool was not installed where this scan ran, so this dimension was not scored. Install the tool (or run in the hosted environment, where it is always present) for a graded result.
  • D38 OSV Dependency Vulnerabilities — scanner not present in this environment — The backing tool was not installed where this scan ran, so this dimension was not scored. Install the tool (or run in the hosted environment, where it is always present) for a graded result.

Repo exclusion declarations (.gitattributes linguist-generated/vendored, .editorconfig generated_code): none declared — every source file was scored.

Limitations & what we did not check

Watchdog assesses the repository exactly as committed, and only the repository. By design it does not reach outside the source tree: the live cloud account, the running CI/CD pipeline, the host's branch-protection and approval rules, the production configuration, or a restore actually exercised against a backup are all out of scope. That boundary is a feature, not a gap — a repo-relative, deterministic scan re-runs identically on any commit and every finding opens at a real file and line, where a live audit can neither be reproduced nor traced. The visible consequence is that controls which leave no in-repo evidence are reported as "not evidenced" and excluded from the score rather than awarded a number a static scan cannot justify.

Per-dimension blind spots

For each dimension that was measured, what a static, repo-only scan structurally cannot see — the honest edge of the measurement, not a failure of it.

  • D1 Cyclomatic Complexity: Cyclomatic complexity counts branches statically — it cannot tell an essential decision tree from accidental tangle, nor see complexity that lives in data or configuration (large switch-case token tables, DSL lexers/parsers, data-as-code rule tables) rather than control flow: a tokenizer's many single-character cases read as high complexity though each branch is trivial.
  • D2 Cognitive Complexity: Cognitive-complexity heuristics approximate how hard code is to follow; genuine domain difficulty and well-named intent that eases reading are not captured.
  • D3 God Classes: "God class" is sized by members and responsibilities visible in the type — a deliberately broad facade over a coherent subsystem can read the same as an accidental grab-bag. For front-end JS the file-length check is cohesion-aware (a single-responsibility module — one class/IIFE — earns a 3× threshold), but cohesion is approximated from top-level declarations, not true dependency structure.
  • D4 Code Duplication: Duplication is token-similarity (jscpd) — it finds copy-paste, not semantic duplication expressed differently. Committed machine-written code (EF migration scaffolds, *.Designer.cs, model snapshots) is EXCLUDED — its repetition is the tool's, not the team's — so the score reflects hand-written duplication only; the generated footprint is reported separately under Solution Shape.
  • D5 Coupling: Coupling is measured between projects/assemblies — runtime coupling through DI, reflection, messaging or shared databases is invisible to a static reference graph.
  • D7 Architectural Integrity: Layering is checked against detected/declared rules — an architecture whose boundaries live in convention or in code review, not in a rule a scanner can read, is not enforced here.
  • D9 Test Distribution: The test-pyramid shape is inferred from project/folder naming and references, with a single test host bucketed per-file by its path tier and content signals — a suite that names tiers unconventionally and gives no per-file signal can still be mis-bucketed.
  • D12 Dependency Hygiene: Dependency health reads manifests and lockfiles — a vulnerability in a vendored/copied dependency, or risk from how a dependency is actually used, is outside this view.
  • D13 Secret Scanning: Secret detection is signature- and entropy-based on the current tree — a secret that does not match a known pattern, or one already rotated, will not be flagged (a clean scan is "nothing matched", not "no secrets exist").
  • D15 Churn × Complexity Hotspots: Churn hotspots come from git history — a freshly imported or squashed repository has no churn signal, and recent rewrites can mask a historically risky file.
  • D16 Bus Factor: Bus-factor is a time-decayed model of commit attribution (who has recently, repeatedly worked a file), not comprehension — pairing, review and reading-without-committing spread knowledge it can't see; bot commits and shared accounts still distort it.
  • D20 ADR Quality: ADR quality is an LLM read of the decision records present — it cannot know about decisions made and never recorded, and its verdict is sampled and advisory.
  • D21 Naming Consistency: Naming quality is an LLM judgement over a bounded sample — it assesses clarity/consistency of the names it sees, not domain-correctness, and is advisory.
  • D25 ADR Conformance: ADR conformance is the LLM-scored fraction of sampled code that follows recorded decisions — it checks the decisions that were written down and the slices it sampled, not unrecorded rules or the whole tree.
  • D26 Project Cohesion: Project focus is sized from members/namespaces per project — a project that is broad by deliberate design reads the same as one that has sprawled.
  • D27 Navigability: Indirection/navigability is structural — it measures hops to follow a call, not whether that indirection buys real flexibility or just ceremony.
  • D28 Secrets (history): Secret-history scanning sweeps the git log for known patterns — a secret that predates the available history, or never matched a signature, is not found (clean means "nothing matched in the history we can see").
  • D29 Static Analysis (SAST): SAST findings are pattern-based (semgrep) — it finds classes of bug it has rules for; logic flaws, auth/authorization gaps and issues needing runtime context are out of reach (and clean means "no rule matched").
  • D31 IaC & Container Security: IaC scanning checks Dockerfiles/Terraform/Kubernetes against best-practice rules — it cannot see the live cloud account, runtime configuration, or drift between the committed config and what is actually deployed.
  • D34 Knowledge Freshness: Freshness is decayed commit RECENCY, not comprehension — code read often but rarely committed reads as orphaned, and stable code that genuinely needs no changes is penalised the same as forgotten code; bot/squash commits distort it like the bus factor.
  • D35 Change Coupling: Change coupling is co-change in COMMITS — files split across separate commits, or coupled only through a shared config/build step, read as uncoupled, and a sweeping commit (rename/format) is excluded so it doesn't couple everything. It shows that files change together, not WHY: a high coupling can be a healthy cohesive pair as readily as a hidden leak.
  • M4 Documentation accuracy: Onboarding quality is an LLM read of the docs/setup present — it cannot run the onboarding or measure how long a real new joiner takes; the verdict is sampled and advisory.
  • P4 Deployment & Rollback: Approval/branch-protection rules live in repository settings the scan cannot see — only their in-repo evidence (config files, workflows) is checked, so a control enforced purely in the host's settings reads as "not evidenced".
  • P6 Release Hygiene: Rollback/observability controls are inferred from repo artefacts (pipelines, dashboards-as-code) — controls configured in external tooling, with no in-repo trace, cannot be credited.

The LLM boundary

LLM-set scores this run (4): D20, D21, D25, M4 (model: Local LLM). For these, a model reads a bounded sample and sets the numeric score (documentation, ADR quality, naming, comment value, onboarding) — D25 sets the ADR-conformance fraction over sampled code, D22 judges API accuracy over a sample. These are sampled and advisory by design: they vary at the margins between runs and are never a deterministic measurement. Every other score in this report is tool-computed at confidence 1.0.

Dimensions

D1 · Cyclomatic Complexity4.8 / 10Weak✓ Tool-verified

What it measures: How tangled the control flow is — methods with many branches are hard to test and change.

Method: Cyclomatic complexity per method (1 + decision points), computed exhaustively across production source; test projects separated by convention. Deterministic.

Maturity: DocumentedVerifiedPrevented · effective 4.8 / 10 · rule-coverage 100% · ceiling Prevented

155 method(s) exceeded the cyclomatic complexity threshold of 15; the worst was UniqueTriggerActivation.getTriggerFunction at 328.

What to do

  1. Enforce Cyclomatic Complexity in CI to reach Verified (currently Documented). — Hardens enforcement from Documented toward Prevented — provenance only; does not change the score.

Detailed fixes: d1_recommendation.md.

D2 · Cognitive Complexity2.3 / 10Critical✓ Tool-verified

What it measures: How hard the code is for a person to follow, beyond raw branching.

Method: Cognitive complexity per method (Sonar-style nesting-penalized score), computed exhaustively over production code, excluding test projects. Deterministic.

Maturity: DocumentedVerifiedPrevented · effective 2.3 / 10 · rule-coverage 100% · ceiling Prevented

256 method(s) exceeded the cognitive complexity threshold of 15; the worst was UniqueTriggerActivation.getTriggerFunction at 473.

What to do

  1. Enforce Cognitive Complexity in CI to reach Verified (currently Documented). — Hardens enforcement from Documented toward Prevented — provenance only; does not change the score.

Detailed fixes: d2_recommendation.md.

D3 · God Classes10.0 / 10Exemplary✓ Tool-verified

What it measures: Over-large classes that try to do too much ("god classes").

Method: God-class detection by line and method-count thresholds per logical type (partial classes unified), filtered for generated code and registration/contract false positives. Deterministic.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Prevented

0 god class(es) detected.

✓ On the Gold path — maintain.

Detailed fixes: d3_recommendation.md.

D4 · Code Duplication4.2 / 10Weak✓ Tool-verified

What it measures: Copy-pasted code that should be shared instead.

Method: Code duplication via token-stream sliding windows with type-aware normalization (locals masked, type names preserved), density-scored per KLoC of production code. Deterministic.

Maturity: DocumentedVerifiedPrevented · effective 4.2 / 10 · rule-coverage 100% · ceiling Verified

23 duplicated block group(s) detected.

Duplicated block (8 lines × 2) · ×3core/src/com/unciv/logic/civilization/Civilization.kt:647
Duplicated block (7 lines × 2) · ×3core/src/com/unciv/logic/civilization/Civilization.kt:1040
Duplicated block (10 lines × 2) · ×2core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt:292
Duplicated block (9 lines × 2) · ×2core/src/com/unciv/logic/map/PathingMap.kt:278
Duplicated block (6 lines × 2) · ×2core/src/com/unciv/logic/trade/TradeEvaluation.kt:226

+ 11 more group(s) — more in Appendix A; the complete list is findings.md.

What to do

  1. Resolve the 3 Duplicated block (8 lines × 2) finding(s) in Code Duplication — start with Civilization.kt, Difficulty.kt, UniqueTriggerActivation.kt. — One of this dimension's main actionable groups (3 warning-level).
  2. Resolve the 3 Duplicated block (7 lines × 2) finding(s) in Code Duplication — start with Civilization.kt, MapLandmassGenerator.kt, Simulation.kt. — One of this dimension's main actionable groups (3 warning-level).
  3. Resolve the 2 Duplicated block (10 lines × 2) finding(s) in Code Duplication — start with Difficulty.kt, MapRegions.kt. — One of this dimension's main actionable groups (2 warning-level).

Detailed fixes: d4_recommendation.md · top locations in Appendix A, every location in findings.md.

D5 · Coupling6.9 / 10Adequate✓ Tool-verified

What it measures: Whether volatile projects sit underneath others that depend on them (so their churn ripples upward), and whether project dependencies form cycles. A widely-depended-on but stable shared/kernel project is healthy, not penalised.

Method: Dependency cycles via elementary-DFS over real .csproj references, plus Martin instability (afferent/efferent) per project. Exhaustive over the reference graph, deterministic.

Coverage: Exhaustive · type-level: afferent/efferent coupling + cycles computed over every production type — the population is all types, not a name convention.

Maturity: DocumentedVerifiedPrevented · effective 6.9 / 10 · rule-coverage 100% · ceiling Prevented

0 projects, 0 dependency cycle(s), 0 unstable depended-on project(s).

What to do

  1. Enforce Coupling in CI to reach Verified (currently Documented). — Hardens enforcement from Documented toward Prevented — provenance only; does not change the score.

Detailed fixes: d5_recommendation.md.

D7 · Architectural Integrity10.0 / 10Exemplary✓ Tool-verified

What it measures: Whether the code respects its intended layering / architecture rules.

Method: Enforcement rung (Prevented/Verified/Documented) per checkable ADR via Roslyn, plus dependency cycles via the engine shared with D5/AX3. Deterministic, exact.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Prevented

Of 71 mechanizable ADRs, 35 are prevented by analyzers, 36 by tests, 0 exist only in prose. Coverage: 100 %. Cycles found: 0.

✓ On the Gold path — maintain.

Detailed fixes: d7_recommendation.md.

D9 · Test Distribution0.0 / 10Critical✓ Tool-verified

What it measures: Whether the test suite has a healthy mix of unit / integration / end-to-end tests.

Method: Test projects classified (Unit/Integration/BDD/E2E) from compiled metadata; test methods counted exhaustively across projects with placement-agnostic disk fallback. Deterministic.

Maturity: DocumentedVerifiedPrevented · effective 0.0 / 10 · rule-coverage 100% · ceiling Documented

No test projects found.

No tests found

What to do

  1. Resolve the 1 No tests found finding(s) in Test Distribution. — One of this dimension's main actionable groups (1 recommendation-level).

Detailed fixes: d9_recommendation.md · top locations in Appendix A, every location in findings.md.

D12 · Dependency Hygiene10.0 / 10Exemplary✓ Tool-verified

What it measures: Whether dependencies are current, secure, and not bloated.

Method: Manifest scan via dotnet list package across all projects; worst-signal-per-package deduction (saturating for vulnerabilities, capped-linear for deprecation/outdated) per KLoC. Exhaustive, deterministic.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Verified

0 outdated, 0 vulnerable, 0 deprecated packages.

✓ On the Gold path — maintain.

Detailed fixes: d12_recommendation.md.

D13 · Secret Scanning10.0 / 10Exemplary○ Nothing flagged

What it measures: Whether any secrets (keys, tokens, passwords) have leaked into the code.

Method: In-process native secret scanner (entropy plus signature patterns) across all tracked files; no external tool. A clean result is a measured 10, not no-data zero. Deterministic.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Prevented

Secret scan ran and found no leaked secrets.

✓ On the Gold path — maintain.

Detailed fixes: d13_recommendation.md.

D15 · Churn × Complexity Hotspots10.0 / 10Exemplary✓ Tool-verified

What it measures: Files that change often and are also complex — the riskiest hotspots.

Method: Per production file churn times cyclomatic complexity over a rolling window, computed from git and Roslyn/JS/Razor analysis. Exhaustive, deterministic per commit date.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Documented

No churn × complexity hotspots in the window.

✓ On the Gold path — maintain.

Detailed fixes: d15_recommendation.md.

D16 · Bus Factor10.0 / 10Exemplary✓ Tool-verified

What it measures: Whether knowledge is concentrated in too few people (the "bus factor").

Method: Living knowledge per author via time-decayed commit attribution (6-month half-life, focus weighting) across largest source files. Deterministic, avoids blame's mechanical-refactor false positives.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Documented

No source file's living knowledge is concentrated in a single author.

✓ On the Gold path — maintain.

Detailed fixes: d16_recommendation.md.

D20 · ADR Quality / 10Weak◐ Sampled · advisory

What it measures: Whether architecture decisions are recorded well (context, decision, consequences).

Method: Per-ADR judgment by language model at low temperature with two-pass stability; confidence is share of ADRs evaluated; enforcement-field presence detected deterministically. Advisory.

Maturity: DocumentedVerifiedPrevented · effective Weak / 10 · rule-coverage 100% · ceiling Documented

Evaluated 420 ADR(s) individually; mean quality 3.2/10 (frequently incomplete). 409 flagged with a specific gap.

No context/problem statement; no consequences/trade-offs · ×3fastlane/metadata/android/en-US/changelogs/1111.txt
Consequences/trade-offs are not present in the visible text · ×3fastlane/metadata/android/en-US/changelogs/1206.txt
No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact statement · ×2fastlane/metadata/android/en-US/changelogs/1025.txt
Context/problem is thin: only the modding list ('Trigger uniques from religious beliefs activate correctly', 'Allow comment/unite timed uniques in event choices') plus a vague re-activation note for Thai with diacritics are recorded; no problem statement or consequences · ×2fastlane/metadata/android/en-US/changelogs/1053.txt
No context/problem and no consequences/trade-offs; only a list of fixes with author names · ×2fastlane/metadata/android/en-US/changelogs/700.txt

+ 395 more group(s) — more in Appendix A; the complete list is findings.md.

What to do

  1. Resolve the 3 No context/problem statement; no consequences/trade-offs finding(s) in ADR Quality — start with 1111.txt, 1122.txt, 911.txt. — One of this dimension's main actionable groups (3 warning-level).
  2. Resolve the 3 Consequences/trade-offs are not present in the visible text finding(s) in ADR Quality — start with 1206.txt, 967.txt, 970.txt. — One of this dimension's main actionable groups (3 warning-level).
  3. Resolve the 2 No context/problem and no consequences/trade-offs; the body is a list of… finding(s) in ADR Quality — start with 1025.txt, 827.txt. — One of this dimension's main actionable groups (2 warning-level).

Detailed fixes: d20_recommendation.md · top locations in Appendix A, every location in findings.md.

D21 · Naming Consistency / 10Exemplary◐ Sampled · advisory

What it measures: Whether names — types, methods, variables — are clear and consistent.

Method: Judged by language model at low temperature (0.0-0.1) on a deterministic random symbol sample (fixed size, not exhaustive), with disclosed confidence band. Advisory, sampled.

Maturity: DocumentedVerifiedPrevented · effective Exemplary / 10 · rule-coverage 100% · ceiling Verified

0 naming inconsistencies across 0 sampled symbols.

✓ On the Gold path — maintain.

Detailed fixes: d21_recommendation.md.

D25 · ADR Conformance / 10Exemplary◐ Sampled · advisory

What it measures: Whether the code actually follows the decisions recorded in the project's ADRs.

Method: Judged by language model at low temperature against ADRs plus a deterministic structural code summary; findings linked to repo-rooted ADR paths for traceability. Advisory.

Maturity: DocumentedVerifiedPrevented · effective Exemplary / 10 · rule-coverage 100% · ceiling Verified

2 conform / 0 violate across 420 ADRs.

✓ On the Gold path — maintain.

Detailed fixes: d25_recommendation.md.

D26 · Project Cohesion10.0 / 10Exemplary✓ Tool-verified

What it measures: Whether each project is a focused, coherent unit rather than an oversized grab-bag.

Method: Project size overshoot penalties (LoC / public-type count / namespace count, 2-of-3 flag) weighted by log magnitude. Exhaustive across projects, deterministic, LLM-independent.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Documented

No projects to assess.

✓ On the Gold path — maintain.

Detailed fixes: d26_recommendation.md.

D27 · Navigability10.0 / 10Exemplary✓ Tool-verified

What it measures: How far you must trace to follow a call — low indirection and co-located slices read easier.

Method: Call indirection (interface hops, cross-namespace calls, slice-locality scaled) over a sampled set of method invocations, size-aware baseline. Sampled; confidence discounted by symbol-resolution gaps.

Coverage: Slice locality from the first namespace segments, SAMPLED (≤400 methods) — not exhaustive.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Documented

Too little code to assess navigability.

✓ On the Gold path — maintain.

Detailed fixes: d27_recommendation.md.

D28 · Secrets (history)9.0 / 10Exemplary✓ Tool-verified

What it measures: Whether any secrets were ever committed — scanned across the full git history, not just now.

Method: Git-history secret scan via gitleaks detect over full history in an isolated checkout; each match flagged High. Exhaustive; degrades cleanly when tool absent.

Maturity: DocumentedVerifiedPrevented · effective 9.0 / 10 · rule-coverage 100% · ceiling Documented

1 finding(s): 0 critical, 1 high, 0 medium, 0 low. Remediation for historically-committed secrets is credential rotation — they remain in history regardless of later deletion.

Rotate the exposed credentials — git history can't be un-committed

✓ On the Gold path — maintain.

Detailed fixes: d28_recommendation.md · top locations in Appendix A, every location in findings.md.

D29 · Static Analysis (SAST)0.0 / 10Critical✓ Tool-verified

What it measures: Real static-analysis (SAST) findings — likely security bugs in the code, any language.

Method: Polyglot static analysis via semgrep across the repo using the pinned, image-baked p/security-audit + p/owasp-top-ten rulesets (no scan-time registry fetch); severity rules (ERROR/WARNING/INFO) map to a full-band severity-weighted score. Exhaustive, deterministic; degrades on parse failure.

Coverage: semgrep pattern rules over all files — exhaustive for the rule set, blind to classes of bug without a rule (clean = no rule matched).

Maturity: DocumentedVerifiedPrevented · effective 0.0 / 10 · rule-coverage 100% · ceiling Documented

76 finding(s): 0 critical, 74 high, 2 medium, 0 low.

High: github-actions-mutable-action-tag · ×50.github/workflows/buildAndDeploy.yml:26detected by semgrep finding

What to do

  1. Resolve the 50 High finding(s) in Static Analysis (SAST) — start with buildAndDeploy.yml (36), buildMultiplatform.yml (9), buildAndTest.yml (5). — One of this dimension's main actionable groups (50 issue-level).

Detailed fixes: d29_recommendation.md · top locations in Appendix A, every location in findings.md.

D31 · IaC & Container Security9.7 / 10Exemplary✓ Tool-verified

What it measures: Whether Dockerfiles / Terraform / Kubernetes config follow security best practices.

Method: IaC/container misconfiguration scan via trivy config (Dockerfile/Terraform/K8s/Helm/CloudFormation); severity rules to 0-10 moderate normalizer. NotApplicable without manifests. Exhaustive, deterministic.

Maturity: DocumentedVerifiedPrevented · effective 9.7 / 10 · rule-coverage 100% · ceiling Documented

4 finding(s): 0 critical, 0 high, 3 medium, 1 low.

Medium IaC: DS-0001 · ×3Dockerfiledetected by trivy finding
Low IaC: DS-0026Dockerfiledetected by trivy finding

✓ On the Gold path — maintain.

Detailed fixes: d31_recommendation.md · top locations in Appendix A, every location in findings.md.

D34 · Knowledge Freshness10.0 / 10Exemplary✓ Tool-verified

What it measures: Whether anyone still has living knowledge of each file, or it has been orphaned — last understood long ago by someone now gone quiet. The sibling of the bus factor: D16 asks who owns it, D34 asks whether anyone still knows it.

Method: File orphaning as total living-knowledge decay below one focused-commit's worth within a year, computed per-file from the D16 decay model. Exhaustive, deterministic over fixed history.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Documented

Every significant source file has living knowledge — recently and meaningfully worked.

✓ On the Gold path — maintain.

Detailed fixes: d34_recommendation.md.

D35 · Change Coupling10.0 / 10Exemplary✓ Tool-verified

What it measures: Whether files that change together actually belong together — pairs that repeatedly co-change in git history despite having no explicit code dependency, surfacing the hidden/logical coupling (and boundaries in the wrong place) a static scan can't see.

Method: Pairwise co-occurrence over the per-commit file sets in git history (production source only — tests and generated dropped): Degree-of-Coupling = shared ÷ min individual revisions, reported above noise floors (each file ≥10 revisions, ≥5 shared commits, ≥50% strength); sweeping commits excluded. Deterministic over fixed history.

Coverage: Population: PRODUCTION source files only — test and generated files are dropped before pairing, so a class co-changing with its own test (trivially ~100%) can't drown the real production↔production coupling. Pairs ranked by Degree-of-Coupling; coupling through a build step, config, or non-source file isn't seen.

Maturity: DocumentedVerifiedPrevented · effective 10.0 / 10 · rule-coverage 100% · ceiling Documented

No strong hidden change-coupling between production files.

✓ On the Gold path — maintain.

Detailed fixes: d35_recommendation.md.

D36 · Supply-chain Provenance & Signing2.5 / 10Weak✓ Tool-verified

What it measures: Whether the build pipeline provides supply-chain integrity — generated provenance/attestation, signed artifacts (cosign/sigstore), an SBOM, and pinned build actions. Presence of the configuration, not a runtime guarantee.

Method: Supply-chain provenance/signing read deterministically from CI/build config (.github/workflows, .gitlab-ci.yml, azure-pipelines, Jenkinsfile, .circleci) + the release surface: four signals — generated provenance/attestation (SLSA/in-toto/actions-attest), artifact signing (cosign/sigstore/gitsign), an SBOM (syft/sbom-action/*.spdx.json/*.cdx.json), and SHA-pinned build actions — scored 10·present/denom. NotApplicable without a build pipeline. Detects configuration presence, not runtime enforcement.

Maturity: DocumentedVerifiedPrevented · effective 2.5 / 10 · rule-coverage 100% · ceiling Documented

1/4 supply-chain integrity signals present (provenance, signing, SBOM, pinned actions).

Unpinned build actions
No build provenance
No SBOM

What to do

  1. Resolve the 1 Unpinned build actions finding(s) in Supply-chain Provenance & Signing. — One of this dimension's main actionable groups (1 warning-level).
  2. Resolve the 1 No build provenance finding(s) in Supply-chain Provenance & Signing. — One of this dimension's main actionable groups (1 recommendation-level).
  3. Resolve the 1 No SBOM finding(s) in Supply-chain Provenance & Signing. — One of this dimension's main actionable groups (1 recommendation-level).

Detailed fixes: d36_recommendation.md · top locations in Appendix A, every location in findings.md.

Frontend & cross-cutting dimensions

R = React/JS · M = Maturity · P = Readiness.

AX5 · Architecture & structure10.0 / 10Exemplary✓ Tool-verified

Other · Architecture — Whether the codebase has a recognisable, scale-appropriate structure (a named architectural style, or modular enough for its size) rather than being an ad-hoc ball of mud.

Method: Roslyn plus csproj analysis: architecture style detection (DDD, clean, vertical-slice, CQRS) and structure fitness for repo size. Deterministic.

M1 · Documentation (README)6.7 / 10Adequate✓ Tool-verified

Maturity · Maturity — Whether the repo and its projects have a README, and whether it's substantive and current.

Method: Filesystem scan: README presence, word count, and headings for depth; git history for staleness. Exhaustive across root and project dirs, deterministic.

What to do

  • Add a 'Testing' section to the root README — how to run the test suite.
  • Add an 'Architecture' / 'How it works' section to the root README — the high-level shape.
M2 · Architecture documentation6.0 / 10Adequate✓ Tool-verified

Maturity · Maturity — Whether key decisions (ADRs) and the high-level shape (C4/diagrams) are written down.

Method: Filesystem scan: ADR folder/naming conventions or content, plus Mermaid/PlantUML/C4/architecture.md discovery. Exhaustive, deterministic.

  • No C4/PlantUML/Mermaid diagram or architecture.md — the high-level shape isn't documented.

What to do

  • Add a C4 context/container diagram (Structurizr, PlantUML or Mermaid) or an architecture.md overview.
M3 · Folder & project structure8.0 / 10Strong✓ Tool-verified

Maturity · Maturity — Whether the repo is organised deliberately — src/test separation and consistent project naming.

Method: Filesystem scan: src/test folder separation and namespace-prefix consistency (majority RootNamespace agreement). Exhaustive across projects, deterministic.

  • Projects aren't grouped under a src/ folder — production and tooling code are mixed at the root.

What to do

  • Group production code under src/ (or split deliberately, e.g. backend/ + frontend/) so production and tooling code aren't mixed at the root.
M4 · Documentation accuracy9.0 / 10Exemplary◐ Sampled · advisory

Maturity · Maturity — Whether the README actually describes the code that exists (LLM-judged, advisory).

Method: Judged by language model at low temperature: README accuracy versus actual projects, within a disclosed tolerance. Advisory, not a measured number.

P1 · CI/CD gates10.0 / 10Exemplary○ Nothing flagged

Readiness · Readiness — Whether an automated pipeline builds and tests every change.

Method: Filesystem scan: CI workflow files (.github/workflows, .gitlab-ci.yml, etc.) for build and test stages. Exhaustive, deterministic.

P2 · Observability0.0 / 10Critical✓ Tool-verified

Readiness · Readiness — Whether the code is diagnosable in production — structured logging, tracing/metrics, health checks.

Method: Filesystem/Roslyn scan: structured-logging frameworks (Serilog, NLog), OpenTelemetry, and health-check endpoint patterns. Exhaustive, deterministic.

  • No ILogger/Serilog usage found — production issues will be hard to diagnose.

What to do

  • Adopt ILogger (or Serilog) and log at meaningful points across the projects.
  • Consider OpenTelemetry tracing/metrics and a health-check endpoint for operability.
P3 · Security & performance tooling0.0 / 10Critical✓ Tool-verified

Readiness · Readiness — Whether SAST, secret/dependency scanning and performance benchmarking are wired in (presence, not runtime).

Method: Filesystem/Roslyn scan: CodeQL, Dependabot, secret-scanning, and BenchmarkDotNet presence in pipelines and projects. Exhaustive, deterministic.

  • No static application security testing (CodeQL / security analyzers / codehealth) detected.

What to do

  • Add a SAST step (e.g. CodeQL) or a security analyzer package.
  • Enable Dependabot/Renovate or a dependency-review gate.
  • Add gitleaks/trufflehog in CI to block PRs that introduce committed secrets.
P4 · Deployment & Rollback7.0 / 10Strong✓ Tool-verified

Readiness · Readiness — Whether releases are automated and safely reversible (probes, rolling updates, approval gates) — from manifests/pipeline files, not the live environment.

Method: Filesystem scan: deployment manifests/IaC (K8s YAML, Helm, Terraform) for rolling updates, probes, approval gates, migration hooks. Exhaustive, deterministic.

  • Deployment automation exists but no readiness/liveness probes, rolling-update strategy, lifecycle hooks or migration job were evidenced — a bad release is harder to detect and reverse.

What to do

  • Add readiness/liveness probes and a rolling-update (or blue/green) strategy so a bad release is caught and rolled back automatically.
P6 · Release Hygiene5.0 / 10Adequate✓ Tool-verified

Readiness · Readiness — Whether releases are traceable — a maintained changelog and explicit version stamping.

Method: Filesystem scan: changelog file presence and version tags in csproj or git tags. Exhaustive, deterministic.

What to do

  • Stamp a version (csproj <Version>, a VERSION file, or GitVersion) or tag releases with semver so builds and releases are traceable.
X1 · Async correctness10.0 / 10Exemplary○ Nothing flagged

Other · Code Health — Whether the code avoids sync-over-async (deadlock-prone blocking on tasks) and async void.

Method: Roslyn syntax scan: async methods scanned for .Wait()/.GetAwaiter().GetResult() and async-void outside event handlers. Deterministic, hard fact per invocation.

X3 · Exception handling10.0 / 10Exemplary○ Nothing flagged

Other · Code Health — Whether exceptions are handled rather than silently swallowed or rethrown with lost stack traces.

Method: Roslyn syntax scan: every catch clause counted; empty catches and bare rethrows flagged. Population is all catch clauses, not estimated. Deterministic, hard fact.

X4 · Structured logging10.0 / 10Exemplary○ Nothing flagged

Other · Code Health — Whether log calls use message templates (queryable) rather than interpolated strings.

Method: Roslyn syntax scan: every log call-site counted; interpolated-string first-argument violations flagged. Population is all log calls, not estimated. Deterministic.

Reference — by lens

The score is the rank-weighted fold of these lenses (worst-heaviest), each including its meta-dimensions; a lens with a Critical contributor is capped at Fair (its band reads "gated by …") and is never the strongest area however high its average.

LensScoreRatingImpact
Code Health83%Adequate — gated by D2Capped at Fair by a Critical contributor — resolve it before relying on this lens.
Architecture96%ExemplaryStrongest area.
Maturity74%StrongSolid.
Readiness27%Weak — gated by D9, P2, P3Capped at Fair by a Critical contributor — resolve it before relying on this lens.
Security53%Adequate — gated by D29, D36Capped at Fair by a Critical contributor — resolve it before relying on this lens.
Not included — 56 check(s) not relevant to this codebase

These checks had nothing to measure here (no tests, no git history, the codebase is small, or the architecture style doesn't apply), so they're omitted above rather than scored low.

  • AC1 Text alternatives — No web markup found — accessibility is not applicable to this repository.
  • AC2 Forms & labels — No web markup found — accessibility is not applicable to this repository.
  • AC3 Page structure — No web markup found — accessibility is not applicable to this repository.
  • AC4 Keyboard semantics — No web markup found — accessibility is not applicable to this repository.
  • AC5 ARIA correctness — No web markup found — accessibility is not applicable to this repository.
  • AC6 Visual & motion safety — No web markup found — accessibility is not applicable to this repository.
  • AC7 A11y enforcement — No web markup found — accessibility is not applicable to this repository.
  • AX1 Captive dependencies — no DI registrations detected
  • AX10 Code composition — no source files detected — code composition not applicable
  • AX2 Stateful singletons — no singleton implementations detected
  • AX3 Project dependency cycles — no csproj graph available
  • AX4 Dependency direction — no csproj graph available
  • AX6 Interface segregation — no public interfaces
  • AX7 Slice cohesion — not applicable — not a vertical-slice architecture
  • AX8 Test isolation — no test/production split to check
  • AX9 CQS / query purity — no CQRS query handlers detected — query purity is not applicable to this codebase
  • AXB2 Runtime readiness — no data
  • C1 Data Protection — No personal data detected in the analyzed source — no PII-typed entity/column names (Email, FirstName, DateOfBirth, …), no ASP.NET Identity / user-account model, and no stored user credentials. GDPR data-protection controls are therefore N/A here. If this is intentional, record the no-PII posture in an ADR; if the app does process personal data, name those fields conventionally so this dimension activates.
  • C2 Access Controls — No access-control surface detected in the analyzed source — no web/app surface to authorize (no HTTP API or web-UI project) and no authorization code at all (no [Authorize]/policies, no imperative guard methods). Access control is therefore N/A here — this is a library/CLI, which is authorized by its CALLER, not by itself. If this codebase grows request handlers, the dimension reactivates and a default-deny posture is expected then.
  • C3 Audit Trail — No personal data detected in the analyzed source — no PII-typed entity/column names (Email, FirstName, DateOfBirth, …), no ASP.NET Identity / user-account model, and no stored user credentials. GDPR data-protection controls are therefore N/A here. If this is intentional, record the no-PII posture in an ADR; if the app does process personal data, name those fields conventionally so this dimension activates.
  • C4 Data Retention — No personal data detected in the analyzed source — no PII-typed entity/column names (Email, FirstName, DateOfBirth, …), no ASP.NET Identity / user-account model, and no stored user credentials. GDPR data-protection controls are therefore N/A here. If this is intentional, record the no-PII posture in an ADR; if the app does process personal data, name those fields conventionally so this dimension activates.
  • C5 Data-Subject Rights — No personal data detected in the analyzed source — no PII-typed entity/column names (Email, FirstName, DateOfBirth, …), no ASP.NET Identity / user-account model, and no stored user credentials. GDPR data-protection controls are therefore N/A here. If this is intentional, record the no-PII posture in an ADR; if the app does process personal data, name those fields conventionally so this dimension activates.
  • D10 Test Quality — ~12027 lines of test code exist on disk but weren't loaded from the analyzed solution (excluded from the .sln, or co-located/using a test attribute not loaded here), so test quality couldn't be assessed. Include the tests in the analyzed solution to enable this check.
  • D11 Test Reliability — Test reliability not included
  • D14 License Compliance — license scan produced no result — the tool ran but its JSON output could not be parsed; the offline NuGet fallback resolved nothing
  • D17 Explicit Debt — the C# workspace loaded 0 projects, so explicit-debt density could not be measured
  • D18 Solution Shape — Dimension evaluation failed
  • D19 Documentation Quality — LLM evaluation failed
  • D22 Internal API Consistency — No exposed public API
  • D23 Boundary Type-Coupling — Zero projects and zero LoC mean the codebase is trivial and has no structure to justify boundaries.
  • D24 Comment Value — No inline comments to assess — comment value is not applicable here.
  • D30 Dependency Vulnerabilities — No .NET solution found; no NuGet dependencies to scan for vulnerabilities.
  • D32 Data Compliance (PII/GDPR) — No PII/GDPR ruleset is bundled (the public p/gdpr semgrep pack was retired) — data compliance is not assessed in this scan.
  • D33 JS/npm Dependency Vulnerabilities — No JS/npm manifest or lockfile found outside bin/obj (package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); no JS dependencies to scan.
  • D37 Vulnerability-disclosure Policy — No vulnerability-disclosure policy file found (SECURITY.md, .github/SECURITY.md, docs/SECURITY.md, .well-known/security.txt). A coordinated-disclosure policy may live off-repo, so this is not evidenced rather than failed.
  • D38 OSV Dependency Vulnerabilities — No JS/npm lockfile found outside bin/obj (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); nothing for OSV to scan.
  • D39 IL Efficiency — The target did not build, so no IL was available to measure.
  • D6 Cohesion (LCOM4) — No production classes were analyzable, so cohesion (LCOM4) was not measured (the solution likely failed to load or has no production code).
  • D8 Code Coverage — Coverage not measured — test suite did not build
  • DM1 Domain Modelling — not run — only 1/3 markers (308 value object(s))
  • ED1 Event-Driven — not run — 0/3 markers found
  • ED5 Idempotency — no mutating command handlers or message consumers detected — idempotency check not applicable
  • ES1 Event Sourcing — not run — 0/3 markers found
  • GD1 Unfinished & placeholder code — no source files
  • IC1 Incompleteness & stubs — no C# methods found
  • P12 CI test-gate honesty — no data
  • P5 DR & Backup — not evidenced — repo shows no backup/RTO/RPO controls; absence of evidence is not evidence of a working control
  • P7 Outbound HTTP resilience — not applicable — this isn't a service/API/worker
  • P8 Schema migrations — no EF Core usage detected
  • P9 Domain vs controller coverage — no coverage report found on disk — run tests with `--collect:"XPlat Code Coverage"` (or in CI) to enable this cross-layer check
  • PF1 Benchmark discipline — Performance is assessed only for perf-relevant repos — a packaged library, one that ships benchmarks, or one already using allocation-aware APIs. This repo isn't one, so the Performance lens is not applicable and is excluded from the score.
  • PF2 Allocation hygiene — Performance is assessed only for perf-relevant repos — a packaged library, one that ships benchmarks, or one already using allocation-aware APIs. This repo isn't one, so the Performance lens is not applicable and is excluded from the score.
  • PF3 Async & latency hygiene — Performance is assessed only for perf-relevant repos — a packaged library, one that ships benchmarks, or one already using allocation-aware APIs. This repo isn't one, so the Performance lens is not applicable and is excluded from the score.
  • S1 Web-Security Posture — No web surface detected in the analyzed source — no HTTP API or web-UI project (no controllers/minimal-API endpoints, no Razor/Blazor views) and no web middleware (HTTPS redirection, HSTS, security headers, cookies). Transport security, security headers, secure cookies, CSRF/input-validation and middleware-order controls are therefore N/A here — this is a library/CLI/worker, not a web app. Crypto hygiene was still checked and found nothing to flag. If this codebase becomes web-facing, the dimension reactivates automatically.
  • X2 Cancellation propagation — no async methods found
  • X5 Nullable reference types — no NRT-eligible projects

Appendix A — Findings (grouped)

The findings behind the scores, grouped by severity, then by dimension and kind. The high-severity issues are enumerated in full below; items per group are capped at 25 with any overflow stated explicitly per group, never silently truncated. The complete machine-readable list of every finding (all severities) is the companion findings.md in this report's bundle.

Issue — 51 finding(s)
D29 · Static Analysis (SAST) · High · ×50
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:26 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: run-shell-injection .github/workflows/buildAndDeploy.yml:32 — Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:52 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:54 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:60 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:63 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:82 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:90 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:103 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:113 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:115 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:121 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:124 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:142 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:151 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:162 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:179 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:189 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:191 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:197 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:200 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:222 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:235 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:238 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • High: github-actions-mutable-action-tag .github/workflows/buildAndDeploy.yml:243 — GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
  • + 25 more in this group — see findings.md.
D18 · Solution Shape · Dimension evaluation failed · ×1
  • Dimension evaluation failed — no .NET solution found at target path
Warning — 438 finding(s)
D20 · ADR Quality · No context/problem statement; no consequences/trade-offs · ×3
  • No context/problem statement; no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1111.txt — 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
  • No context/problem statement; no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1122.txt — 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
  • No context/problem statement; no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/911.txt — 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)
D20 · ADR Quality · Consequences/trade-offs are not present in the visible text · ×3
  • Consequences/trade-offs are not present in the visible text fastlane/metadata/android/en-US/changelogs/1206.txt — Add a Consequences section covering how new players will no longer be able to offer negative gold and what happens when existing '-50' buttons break
  • Consequences/trade-offs are not present in the visible text fastlane/metadata/android/en-US/changelogs/967.txt — Add a Consequences section covering trade-offs such as increased cost of unique units and the impact on gameplay when teleport placement is required
  • Consequences/trade-offs are not present in the visible text fastlane/metadata/android/en-US/changelogs/970.txt — Add a Consequences section noting that forcing every timed unique into trigger-based unit actions may break existing conditional triggers and require re-evaluation
D31 · IaC & Container Security · Medium IaC · ×3
  • Medium IaC: DS-0001 Dockerfile — ':latest' tag used
  • Medium IaC: DS-0001 Dockerfile — ':latest' tag used
  • Medium IaC: DS-0013 Dockerfile — 'RUN cd ...' to change directory
D4 · Code Duplication · Duplicated block (8 lines × 2) · ×3
  • Duplicated block (8 lines × 2) core/src/com/unciv/logic/civilization/Civilization.kt:647 — core/src/com/unciv/logic/civilization/Civilization.kt:647-653 | core/src/com/unciv/logic/civilization/Civilization.kt:672-679
  • Duplicated block (8 lines × 2) core/src/com/unciv/models/ruleset/nation/Difficulty.kt:58 — core/src/com/unciv/models/ruleset/nation/Difficulty.kt:58-65 | core/src/com/unciv/models/ruleset/nation/Difficulty.kt:80-87
  • Duplicated block (8 lines × 2) core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:640 — core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:640-647 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:660-667
D4 · Code Duplication · Duplicated block (7 lines × 2) · ×3
  • Duplicated block (7 lines × 2) core/src/com/unciv/logic/civilization/Civilization.kt:1040 — core/src/com/unciv/logic/civilization/Civilization.kt:1040-1046 | core/src/com/unciv/logic/civilization/Civilization.kt:1055-1061
  • Duplicated block (7 lines × 2) core/src/com/unciv/logic/map/mapgenerator/MapLandmassGenerator.kt:289 — core/src/com/unciv/logic/map/mapgenerator/MapLandmassGenerator.kt:289-295 | core/src/com/unciv/logic/map/mapgenerator/MapLandmassGenerator.kt:304-310
  • Duplicated block (7 lines × 2) core/src/com/unciv/logic/simulation/Simulation.kt:262 — core/src/com/unciv/logic/simulation/Simulation.kt:262-268 | core/src/com/unciv/logic/simulation/Simulation.kt:272-278
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact statement · ×2
  • No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact statement fastlane/metadata/android/en-US/changelogs/1025.txt — Add a Context section explaining why each fix matters (e.g. 'paradrops must avoid movement-range overlap' for fixed paradrop) and a Consequences section noting any negative side effects
  • No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact statement fastlane/metadata/android/en-US/changelogs/827.txt — 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
D20 · ADR Quality · Context/problem is thin · ×2
  • Context/problem is thin: only the modding list ('Trigger uniques from religious beliefs activate correctly', 'Allow comment/unite timed uniques in event choices') plus a vague re-activation note for Thai with diacritics are recorded; no problem statement or consequences fastlane/metadata/android/en-US/changelogs/1053.txt — 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
  • 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 fastlane/metadata/android/en-US/changelogs/882.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with author names · ×2
  • No context/problem and no consequences/trade-offs; only a list of fixes with author names fastlane/metadata/android/en-US/changelogs/700.txt — State the problem each fix addresses (e.g. crashing on aircraft rejection, unhandled combat strength zero) and document the trade-offs for each change
  • No context/problem and no consequences/trade-offs; only a list of fixes with author names fastlane/metadata/android/en-US/changelogs/889.txt — 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)
D20 · ADR Quality · Only the decision is stated; context/problem and consequences/trade-offs are absent · ×2
  • Only the decision is stated; context/problem and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/757.txt — 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
  • Only the decision is stated; context/problem and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/815.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of features with author names are present · ×2
  • No context/problem and no consequences/trade-offs; only a list of features with author names are present fastlane/metadata/android/en-US/changelogs/833.txt — 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
  • No context/problem and no consequences/trade-offs; only a list of features with author names are present fastlane/metadata/android/en-US/changelogs/932.txt — Add the problem each listed change addresses (e.g. 'console tiles set/remove is broken') and document any trade-offs such as performance or complexity
D4 · Code Duplication · Duplicated block (10 lines × 2) · ×2
  • Duplicated block (10 lines × 2) core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt:292 — core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt:292-301 | core/src/com/unciv/logic/map/mapgenerator/mapregions/MapRegions.kt:310-319
  • Duplicated block (10 lines × 2) core/src/com/unciv/models/ruleset/nation/Difficulty.kt:68 — core/src/com/unciv/models/ruleset/nation/Difficulty.kt:68-77 | core/src/com/unciv/models/ruleset/nation/Difficulty.kt:106-114
D4 · Code Duplication · Duplicated block (9 lines × 2) · ×2
  • Duplicated block (9 lines × 2) core/src/com/unciv/logic/map/PathingMap.kt:278 — core/src/com/unciv/logic/map/PathingMap.kt:278-286 | core/src/com/unciv/logic/map/PathingMap.kt:288-294
  • Duplicated block (9 lines × 2) core/src/com/unciv/logic/map/TileMap.kt:337 — core/src/com/unciv/logic/map/TileMap.kt:337-345 | core/src/com/unciv/logic/map/TileMap.kt:347-352
D4 · Code Duplication · Duplicated block (6 lines × 2) · ×2
  • Duplicated block (6 lines × 2) core/src/com/unciv/logic/trade/TradeEvaluation.kt:226 — core/src/com/unciv/logic/trade/TradeEvaluation.kt:226-230 | core/src/com/unciv/logic/trade/TradeEvaluation.kt:440-445
  • Duplicated block (6 lines × 2) core/src/com/unciv/ui/components/widgets/BorderedTable.kt:43 — core/src/com/unciv/ui/components/widgets/BorderedTable.kt:43-48 | core/src/com/unciv/ui/components/widgets/BorderedTable.kt:50-55
D19 · Documentation Quality · LLM evaluation failed · ×1
  • LLM evaluation failed — JSON parse error: Expected end of string, but instead reached end of data. Path: $.findings[0].issue | LineNumber: 0 | BytePositionInLine: 1067.
D20 · ADR Quality · Decision is a vague 'for every [countable]' unique modifier and links to base ruleset template; consequences/trade-offs are absent · ×1
  • Decision is a vague 'for every [countable]' unique modifier and links to base ruleset template; consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/1000.txt — State the exact rule (e.g. modifiers must be distinct per type) and document trade-offs such as increased complexity for modders
D20 · ADR Quality · Context/problem is thin (only one sentence) with no consequences; the decision ('Allow mod sounds to be selected as multiplayer notification sound') and its trade-offs are each only a single bullet in a two-person authoring team · ×1
  • Context/problem is thin (only one sentence) with no consequences; the decision ('Allow mod sounds to be selected as multiplayer notification sound') and its trade-offs are each only a single bullet in a two-person authoring team fastlane/metadata/android/en-US/changelogs/1001.txt — 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
D20 · ADR Quality · Decision is a list of features added by contributors but no context/problem and consequences/trade-offs are present · ×1
  • Decision is a list of features added by contributors but no context/problem and consequences/trade-offs are present fastlane/metadata/android/en-US/changelogs/1002.txt — State the problem (e.g. tech picker screen needs only uniques) and document trade-offs such as modOptions complexity or firework cost
D20 · ADR Quality · No context/problem and no consequences; only a crash fix and vague UX/plan notes are present · ×1
  • No context/problem and no consequences; only a crash fix and vague UX/plan notes are present fastlane/metadata/android/en-US/changelogs/1003.txt — Add the original problem (e.g. 'Spies cannot be promoted by [amount] time(s) without crashing') and document trade-offs such as how the modifier affects AI evaluation
D20 · ADR Quality · No consequences/trade-offs section describing the cost of allowing floating tutorials or EmpireOverview persistence · ×1
  • No consequences/trade-offs section describing the cost of allowing floating tutorials or EmpireOverview persistence fastlane/metadata/android/en-US/changelogs/1005.txt — Add a Consequences section covering trade-offs such as tutorial spam, EmpireOverview becoming a persistent moddable blob, and how to manage optional persistence
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only implementation notes and a patch list · ×1
  • No context/problem and no consequences/trade-offs; only implementation notes and a patch list fastlane/metadata/android/en-US/changelogs/1007.txt — 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)
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of war/automation fixes with no framing · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of war/automation fixes with no framing fastlane/metadata/android/en-US/changelogs/1009.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of arbitrary game design notes with no decision statement · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of arbitrary game design notes with no decision statement fastlane/metadata/android/en-US/changelogs/1010.txt — 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
D20 · ADR Quality · 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 'edit existing trade' exploit · ×1
  • 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 'edit existing trade' exploit fastlane/metadata/android/en-US/changelogs/1012.txt — State the original problem (air-unit display performance) and the two concrete exploits fixed ('edit existing trade', console add/remove format), then document the consequences/trade-offs such as how the modding queue cleanup affects future mods
D20 · ADR Quality · Decision is a list of unimplemented unique/visual changes with no context/problem and no consequences; the title 'Modding version!' gives nothing away · ×1
  • Decision is a list of unimplemented unique/visual changes with no context/problem and no consequences; the title 'Modding version!' gives nothing away fastlane/metadata/android/en-US/changelogs/1013.txt — State what problem each change addresses (e.g. 'Fixes the "Withdraws before melee combat" unique so it triggers correctly') and document trade-offs like added complexity of counting filters
D20 · ADR Quality · Decision is narrow and consequences are unstated · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1014.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of vaguely phrased entries (e.g. 'Support for languages using Diacritics') with author names and one AI-behaviour change entry are present · ×1
  • No context/problem and no consequences/trade-offs; only a list of vaguely phrased entries (e.g. 'Support for languages using Diacritics') with author names and one AI-behaviour change entry are present fastlane/metadata/android/en-US/changelogs/1016.txt — 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
D20 · ADR Quality · Context/problem is thin; only the decision and one minor fix are stated with no consequences/trade-offs · ×1
  • Context/problem is thin; only the decision and one minor fix are stated with no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1018.txt — 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
D20 · ADR Quality · Decision is a single one-line commit note ("Added missing deprecation validation for unit uniques") with no context/problem and no consequences; the body clips mid-sentence · ×1
  • Decision is a single one-line commit note ("Added missing deprecation validation for unit uniques") with no context/problem and no consequences; the body clips mid-sentence fastlane/metadata/android/en-US/changelogs/1019.txt — State what problem the decision addresses (e.g. failed deprecation check) and its trade-offs (re-testing, lost data). Add a Consequences section.
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only a 'Fixed X' list of fixes with no rationale or trade-offs appear · ×1
  • Context/problem and consequences/trade-offs are absent; only a 'Fixed X' list of fixes with no rationale or trade-offs appear fastlane/metadata/android/en-US/changelogs/1020.txt — 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
D20 · ADR Quality · Decision and consequences are present but the context/problem is thin ("AI no longer declares war against defeated civs") · ×1
  • Decision and consequences are present but the context/problem is thin ("AI no longer declares war against defeated civs") fastlane/metadata/android/en-US/changelogs/1021.txt — 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
D20 · ADR Quality · No context/problem and no consequences; all entries are fixes with only a by-line noting what was fixed · ×1
  • No context/problem and no consequences; all entries are fixes with only a by-line noting what was fixed fastlane/metadata/android/en-US/changelogs/1023.txt — 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
D20 · ADR Quality · No context/problem statement; the only content is a decision list with no rationale or consequences for each change · ×1
  • No context/problem statement; the only content is a decision list with no rationale or consequences for each change fastlane/metadata/android/en-US/changelogs/1028.txt — 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
D20 · ADR Quality · Only the decision (add CLI data-dir argument) and one spelling fix are stated; context/problem and consequences/trade-offs are absent · ×1
  • Only the decision (add CLI data-dir argument) and one spelling fix are stated; context/problem and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/1029.txt — 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's trade-off (a single patch to every project file)
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of fixes with no rationale or impact fastlane/metadata/android/en-US/changelogs/1030.txt — Add a Context section explaining why each fix matters (e.g. misspelled mod names breaking gameplay) and a Consequences section noting any trade-offs
D20 · ADR Quality · Context/problem is thin ("gain control over tiles" trigger leaves your tiles alone") with no consequences; the two fixes are listed but not tied to a motivating problem · ×1
  • Context/problem is thin ("gain control over tiles" trigger leaves your tiles alone") with no consequences; the two fixes are listed but not tied to a motivating problem fastlane/metadata/android/en-US/changelogs/1033.txt — Add why the "gain control over tiles" trigger matters (e.g. prevents cheating) and document the trade-offs of each fix, such as added complexity or loss of intended behavior
D20 · ADR Quality · Decision is a list of unmet modding features with no context (why these changes are needed) and no consequences/trade-offs · ×1
  • Decision is a list of unmet modding features with no context (why these changes are needed) and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1034.txt — Add Context: explain what each change addresses (e.g. global unit uniqueness for strategy variety, recognizing Tutorials.json in validation)
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only the size gain and four bullet multiplayer features are stated · ×1
  • No context/problem and no consequences/trade-offs; only the size gain and four bullet multiplayer features are stated fastlane/metadata/android/en-US/changelogs/1035.txt — 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)
D20 · ADR Quality · Context/problem is thin (only one short bullet) and consequences/trade-offs are absent; no decision statement · ×1
  • Context/problem is thin (only one short bullet) and consequences/trade-offs are absent; no decision statement fastlane/metadata/android/en-US/changelogs/1037.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of fixes with no decision statement · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of fixes with no decision statement fastlane/metadata/android/en-US/changelogs/1038.txt — State what 'compute missing from minimum stats only when necessary' actually changed (e.g. why not compute them always) and document the trade-offs of doing so
D20 · ADR Quality · No consequences/trade-offs section (e.g. why override-able continuous rendering is removed and whether it breaks existing animation code) · ×1
  • No consequences/trade-offs section (e.g. why override-able continuous rendering is removed and whether it breaks existing animation code) fastlane/metadata/android/en-US/changelogs/1041.txt — Add a Consequences section noting the removal of 'continuous rendering' as an override setting that no longer applies to Actions, and any impact on existing render-loop logic
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes (crash, memory perf, generalized uniques, prep work) with no rationale · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes (crash, memory perf, generalized uniques, prep work) with no rationale fastlane/metadata/android/en-US/changelogs/1042.txt — Add the problem each fix addresses (e.g. 'conquer city automation fails under load') and note any trade-offs such as breaking existing terrain-feature interactions
D20 · ADR Quality · Context/problem is thin (only one decision and two non-constructive rules are stated; no consequences/trade-offs) · ×1
  • Context/problem is thin (only one decision and two non-constructive rules are stated; no consequences/trade-offs) fastlane/metadata/android/en-US/changelogs/1043.txt — Add a Context section explaining why stockpiled-resource-requiring constructions must not be constructed without resources and why purchasing them should consume the stockpile
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1044.txt — Add a Consequences section noting that changing the setting's tab may break existing workflows relying on the advanced-orientation config, and note why mutable rulesets are needed despite the trade-off
D20 · ADR Quality · Decision is a vague one-line rule with no context and no consequences; the body clips mid-sentence "AI prioritizes unit upgrades over purchasing new constructions" before any rationale or trade-offs · ×1
  • Decision is a vague one-line rule with no context and no consequences; the body clips mid-sentence "AI prioritizes unit upgrades over purchasing new constructions" before any rationale or trade-offs fastlane/metadata/android/en-US/changelogs/1045.txt — 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.
D20 · ADR Quality · Decision and consequences are both present but the context/problem is non-existent; no rationale for adding Barbarian variants or kick/skip-multiplayer rules · ×1
  • Decision and consequences are both present but the context/problem is non-existent; no rationale for adding Barbarian variants or kick/skip-multiplayer rules fastlane/metadata/android/en-US/changelogs/1046.txt — 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
D20 · ADR Quality · Informative title but no context/problem and no consequences; the body is a list of features/fixes with no decision statement · ×1
  • Informative title but no context/problem and no consequences; the body is a list of features/fixes with no decision statement fastlane/metadata/android/en-US/changelogs/1048.txt — Give each listed item its own Context line (why this change matters) and a Consequences section on trade-offs
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a vague title 'Significant memory improvements - should allow for much larger maps on memory-constrained devices!' plus two unrelated filler lines · ×1
  • No context/problem and no consequences/trade-offs; only a vague title 'Significant memory improvements - should allow for much larger maps on memory-constrained devices!' plus two unrelated filler lines fastlane/metadata/android/en-US/changelogs/1050.txt — 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
D20 · ADR Quality · Context/problem and consequences are absent; the body is a list of arbitrary tileset/MP-game/modding fixes with no framing · ×1
  • Context/problem and consequences are absent; the body is a list of arbitrary tileset/MP-game/modding fixes with no framing fastlane/metadata/android/en-US/changelogs/1052.txt — 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
D20 · ADR Quality · Decision is a single sentence ('Cannot have 2 research agreements at once due to counteroffers') with no context/problem and no consequences; the rest are unrelated notes (mod trigger, URL parsing, Top tiles) · ×1
  • Decision is a single sentence ('Cannot have 2 research agreements at once due to counteroffers') with no context/problem and no consequences; the rest are unrelated notes (mod trigger, URL parsing, Top tiles) fastlane/metadata/android/en-US/changelogs/1054.txt — State the problem (research agreement concurrency) and its trade-offs (counteroffer handling), then document each of the three listed fixes as separate decisions
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; the body lists only resolved ANR fixes and a protection against incorrectly configured mods · ×1
  • Context/problem and consequences/trade-offs are absent; the body lists only resolved ANR fixes and a protection against incorrectly configured mods fastlane/metadata/android/en-US/changelogs/1055.txt — 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)
D20 · ADR Quality · Only four short bullet rules; no context/problem statement, no explicit decision (which rule is the real one), and no consequences/trade-offs · ×1
  • Only four short bullet rules; no context/problem statement, no explicit decision (which rule is the real one), and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1056.txt — State what problem each rule addresses (e.g. 'Fixes a bug where victory-type uniques fail when a required victory type appears') and document trade-offs for each change
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1057.txt — 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
D20 · ADR Quality · No consequences/trade-offs section describing why escorting civilian units should not allow unit-carrying withdrawal · ×1
  • No consequences/trade-offs section describing why escorting civilian units should not allow unit-carrying withdrawal fastlane/metadata/android/en-US/changelogs/1058.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of features with no rationale · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of features with no rationale fastlane/metadata/android/en-US/changelogs/1059.txt — 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
D20 · ADR Quality · Context/problem is present but the explicit decision and consequences/trade-offs are both clipped by the scanner before any trade-off section appears · ×1
  • Context/problem is present but the explicit decision and consequences/trade-offs are both clipped by the scanner before any trade-off section appears fastlane/metadata/android/en-US/changelogs/1060.txt
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1061.txt — 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
D20 · ADR Quality · No context/problem and no consequences; only two vague bullet fixes with no rationale · ×1
  • No context/problem and no consequences; only two vague bullet fixes with no rationale fastlane/metadata/android/en-US/changelogs/1062.txt — State the problem (e.g. players want to quickly select next units without seeing them) and document the trade-offs of each fix
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1063.txt — 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
D20 · ADR Quality · 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 '1064' gives no signal · ×1
  • 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 '1064' gives no signal fastlane/metadata/android/en-US/changelogs/1064.txt — 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
D20 · ADR Quality · Decision is narrow and only one of the four elements (auto unit cycle wait action) is named; context/problem and consequences are not present · ×1
  • Decision is narrow and only one of the four elements (auto unit cycle wait action) is named; context/problem and consequences are not present fastlane/metadata/android/en-US/changelogs/1066.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the title is a joke (AI · ×1
  • No context/problem and no consequences; the title is a joke (AI: Use Great Artists for Golden Ages) with only one non-joke decision ('Avoid Growth and Food Ranking Improvements') cut by clip marker fastlane/metadata/android/en-US/changelogs/1067.txt — Replace the absurd title with an informative problem statement. Add context (why growth/food ranking matters), the explicit decision, and consequences/trade-offs
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1068.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1070.txt — 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.
D20 · ADR Quality · Context/problem is thin (only one mod change listed) and consequences/trade-offs are absent; the decision 'allow filter uniques to have conditionals' is stated but not justified with a problem statement · ×1
  • Context/problem is thin (only one mod change listed) and consequences/trade-offs are absent; the decision 'allow filter uniques to have conditionals' is stated but not justified with a problem statement fastlane/metadata/android/en-US/changelogs/1072.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a boilerplate title list with no decision or rationale · ×1
  • No context/problem and no consequences/trade-offs; the body is a boilerplate title list with no decision or rationale fastlane/metadata/android/en-US/changelogs/1073.txt — State what problem each rule addresses (e.g. 'Avoid application not responding on Android multiplayer startup') plus why it matters and any trade-offs
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1074.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the list is a patch of fixes with no rationale · ×1
  • No context/problem and no consequences/trade-offs; the list is a patch of fixes with no rationale fastlane/metadata/android/en-US/changelogs/1075.txt — State what each fix addresses (e.g. "crashes when swapping while retreating", "incorrect music state") and document any trade-offs or why they were chosen over alternatives
D20 · ADR Quality · No context/problem and no consequences; the body is a list of mod changes plus an unexplained decision (move capital function) with no rationale · ×1
  • No context/problem and no consequences; the body is a list of mod changes plus an unexplained decision (move capital function) with no rationale fastlane/metadata/android/en-US/changelogs/1076.txt — 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.
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of fixes with no decision statement or rationale · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of fixes with no decision statement or rationale fastlane/metadata/android/en-US/changelogs/1077.txt — 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
D20 · ADR Quality · Only the decision and a single patch note are present; no context/problem and consequences/trade-offs · ×1
  • Only the decision and a single patch note are present; no context/problem and consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1080.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; most entries are resolved/fix/test tags with no rationale · ×1
  • No context/problem and no consequences/trade-offs; most entries are resolved/fix/test tags with no rationale fastlane/metadata/android/en-US/changelogs/1082.txt — State the problem each resolution addresses (e.g. ANR in new game screen, 'Unit built' notification selects wrong unit) and document trade-offs (e.g. decreased base Fort value limits improvements, crop images removes aesthetic detail)
D20 · ADR Quality · Decision and consequences are absent; the body is a list of UI fixes with no context/problem and no trade-offs · ×1
  • Decision and consequences are absent; the body is a list of UI fixes with no context/problem and no trade-offs fastlane/metadata/android/en-US/changelogs/1083.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs sections; the body is a list of features with by-lines only · ×1
  • No context/problem and no consequences/trade-offs sections; the body is a list of features with by-lines only fastlane/metadata/android/en-US/changelogs/1084.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1085.txt — Add a Context section explaining what ANRs each fix addresses and any trade-offs of the alternatives considered
D20 · ADR Quality · Only decisions are present; context/problem and consequences/trade-offs are absent · ×1
  • Only decisions are present; context/problem and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/1086.txt — Add a Context section explaining why the 'faster map update on click' is needed (e.g. player frustration from delayed unit actions) and a Consequences section noting trade-offs like reduced responsiveness or unintended side effects
D20 · ADR Quality · Context/problem is a single sentence ('City-state stat percent bonuses apply correctly') with no rationale and the decisions are listed as bullet points ("Terrain images in fonts no longer flipped", "Pathfinding..."), giving no decision order or trade-offs · ×1
  • Context/problem is a single sentence ('City-state stat percent bonuses apply correctly') with no rationale and the decisions are listed as bullet points ("Terrain images in fonts no longer flipped", "Pathfinding..."), giving no decision order or trade-offs fastlane/metadata/android/en-US/changelogs/1087.txt — Add a Context section explaining why each change matters (e.g. 'Percent bonus calculations fail when applied to uniques' for stat bonuses) and a Consequences section covering the cost of flipping terrain images, loss of flip symmetry, and promotion selection fairness
D20 · ADR Quality · No explicit decision and no consequences/trade-offs; context/problem is only a one-line rule list with no rationale · ×1
  • No explicit decision and no consequences/trade-offs; context/problem is only a one-line rule list with no rationale fastlane/metadata/android/en-US/changelogs/1088.txt — 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
D20 · ADR Quality · Decision is a vague "Show total number of cities in city table" 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 · ×1
  • Decision is a vague "Show total number of cities in city table" 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 fastlane/metadata/android/en-US/changelogs/1089.txt — Replace the vague title with something like "Expose the total number of cities as a read-only column" 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of fixes plus author/patch notes with no decision statement · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of fixes plus author/patch notes with no decision statement fastlane/metadata/android/en-US/changelogs/1090.txt — State what problem each fix addresses (e.g. enemy religion spread converting cities, trade denial notification) and document any consequences (added complexity, new bugs)
D20 · ADR Quality · Only a short list of fixes and no context/problem or consequences; title is vague · ×1
  • Only a short list of fixes and no context/problem or consequences; title is vague fastlane/metadata/android/en-US/changelogs/1092.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs for the four listed fixes; only a decision list with author names is present · ×1
  • No context/problem and no consequences/trade-offs for the four listed fixes; only a decision list with author names is present fastlane/metadata/android/en-US/changelogs/1093.txt — State what each fix addresses (e.g. 'fixes incorrect mod-download error handling in multiplayer') and note any consequences such as increased build complexity or reduced flexibility
D20 · ADR Quality · No context/problem and no consequences; the body is a list of cosmetic/automation fixes with no rationale · ×1
  • No context/problem and no consequences; the body is a list of cosmetic/automation fixes with no rationale fastlane/metadata/android/en-US/changelogs/1094.txt — Add why modded rendering performance matters (e.g. load times) and document trade-offs like texture quality for unmodified content
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1096.txt — 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
D20 · ADR Quality · Decision is an empty one-line title with no context and no consequences; the body lists only a modding change ('modding · ×1
  • Decision is an empty one-line title with no context and no consequences; the body lists only a modding change ('modding:') plus a vague 'Fixed Unciv not starting on MacOS' and nothing about trade-offs fastlane/metadata/android/en-US/changelogs/1098.txt — Add Context: why texture packing was reverted (which bugs were fixed) and Consequences: loss of faster rendering, breakage of mods requiring it.
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a one-line decision ('Triggers a global alert upon build start') with no rationale or impact · ×1
  • No context/problem and no consequences/trade-offs; only a one-line decision ('Triggers a global alert upon build start') with no rationale or impact fastlane/metadata/android/en-US/changelogs/1099.txt — Add the problem (e.g. 'Builders are alerted too early to avoid false positives') and document trade-offs such as alert fatigue or false-positive handling
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with no rationale · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with no rationale fastlane/metadata/android/en-US/changelogs/1100.txt — State the rendering-performance problem being addressed (e.g. frame-rate drops under load) and document the trade-offs of each fix
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of features/fixes with no rationale or negative impact · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of features/fixes with no rationale or negative impact fastlane/metadata/android/en-US/changelogs/1102.txt — State what problem each fix addresses (e.g. 'ensure unexplored tiles are visible') and document any trade-offs (e.g. 'Shuffle Civ may reduce replayability for casual players')
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1103.txt — 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
D20 · ADR Quality · Decision is a single vague sentence ('AI · ×1
  • Decision is a single vague sentence ('AI: choose policy branch at random between those with the least remaining policies') plus two unrelated cosmetic patches; no context/problem and no consequences fastlane/metadata/android/en-US/changelogs/1105.txt — 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
D20 · ADR Quality · 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) · ×1
  • 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) fastlane/metadata/android/en-US/changelogs/1106.txt — Replace with an architecture decision stating the design goal (e.g. 'decouple world-screen and overview tabs so hidden-in-world resources are not shown in the public overview') plus its rationale and consequences
D20 · ADR Quality · Context/problem and consequences are absent; the body is a list of patches with no rationale or trade-offs · ×1
  • Context/problem and consequences are absent; the body is a list of patches with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/1107.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the body is a list of patch notes (bug fixes, new features) with no decision or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of patch notes (bug fixes, new features) with no decision or trade-offs fastlane/metadata/android/en-US/changelogs/1108.txt — 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)
D20 · ADR Quality · Decision is a vague one-line statement ('Sort city religion overview by number of followers') with no context and no consequences; the listed modding changes are also not fully explained · ×1
  • Decision is a vague one-line statement ('Sort city religion overview by number of followers') with no context and no consequences; the listed modding changes are also not fully explained fastlane/metadata/android/en-US/changelogs/1109.txt — State why sorting by follower count matters (e.g. balancing gameplay) and enumerate each mod change with its rationale and trade-offs
D20 · ADR Quality · No context/problem and no consequences; only a bare decision statement plus chore-fix entries · ×1
  • No context/problem and no consequences; only a bare decision statement plus chore-fix entries fastlane/metadata/android/en-US/changelogs/1110.txt — Add a Context section explaining why science overflow rebonusing was removed (e.g. balance concerns) and a Consequences section on the trade-offs
D20 · ADR Quality · Title is a vague placeholder ("Modding · ×1
  • Title is a vague placeholder ("Modding: Warn against Resource uniques cannot use countables that depend on citywide resources") and the two cited examples are not real mods but placeholders; no context/problem and no explicit decision/consequences fastlane/metadata/android/en-US/changelogs/1112.txt — Replace the placeholder title with an informative name (e.g. "Resource Uniqueness Modding: Prevent Citywide-Dependent Countable Usage"), replace the placeholder mod names with actual named mods, and flesh out a real problem statement, the rule it enforces, and its consequences
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of modding patches with no decision or rationale · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of modding patches with no decision or rationale fastlane/metadata/android/en-US/changelogs/1113.txt — 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 + Unavailable for those devices), plus any consequences such as reduced mod compatibility
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1115.txt — Replace with an ADR describing the problem each change addresses and its consequences
D20 · ADR Quality · No context/problem statement; only a list of modding fixes is present · ×1
  • No context/problem statement; only a list of modding fixes is present fastlane/metadata/android/en-US/changelogs/1116.txt — Add the problem motivating this ADR (e.g. inconsistent circle/hexagon tile placement for movable tiles) and its consequences
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of modding fixes with no framing · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of modding fixes with no framing fastlane/metadata/android/en-US/changelogs/1118.txt — 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
D20 · ADR Quality · No consequences/trade-offs section and the decision (e.g. "uniques are never sorted alphabetically") is stated only as a one-line rule with no rationale or negative impact · ×1
  • No consequences/trade-offs section and the decision (e.g. "uniques are never sorted alphabetically") is stated only as a one-line rule with no rationale or negative impact fastlane/metadata/android/en-US/changelogs/1120.txt — Add a Consequences section covering trade-offs of unsorted uniques (user frustration) and the validation fix's own cost
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of arbitrary decisions with no framing · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of arbitrary decisions with no framing fastlane/metadata/android/en-US/changelogs/1124.txt — 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
D20 · ADR Quality · Context/problem is thin (only one-line "Don't choose one-time-action promotions" title and no rationale) while the body is mostly implementation notes with no consequences · ×1
  • Context/problem is thin (only one-line "Don't choose one-time-action promotions" title and no rationale) while the body is mostly implementation notes with no consequences fastlane/metadata/android/en-US/changelogs/1125.txt — 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
D20 · ADR Quality · Title is a one-line emoji-driven bug note ('Disabled android-specific behaviour of text fields since it's broken currently · ×1
  • Title is a one-line emoji-driven bug note ('Disabled android-specific behaviour of text fields since it's broken currently :|') plus 'Fixed city screen buildings panel not fully scrollable' and 'Only add mod search textboxes if there are at least 10 mods (cleaner UI)' - all are feature tickets, but no Context/Decision/consequences section explaining the problem, the explicit decision being implemented, or its consequences fastlane/metadata/android/en-US/changelogs/1126.txt — 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
D20 · ADR Quality · Context/problem is thin (only 'Don't spawn prophet in holy city if it's been taken over') with no rationale and consequences are only hints ('Avoid crashes from ...'); the ranking/modding stats table scrollability claims are also present but not tied to the decision · ×1
  • Context/problem is thin (only 'Don't spawn prophet in holy city if it's been taken over') with no rationale and consequences are only hints ('Avoid crashes from ...'); the ranking/modding stats table scrollability claims are also present but not tied to the decision fastlane/metadata/android/en-US/changelogs/1127.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs for the four listed policies; only a policy-filter countable is named with author · ×1
  • No context/problem and no consequences/trade-offs for the four listed policies; only a policy-filter countable is named with author fastlane/metadata/android/en-US/changelogs/1128.txt — Add a Context section explaining why each policy matters (e.g. 'split atlases can cause frame-rate drops under load') and a Consequences section noting trade-offs like added work or runtime cost
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of unexplained fixes with author names · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of unexplained fixes with author names fastlane/metadata/android/en-US/changelogs/1129.txt — State what each fix addresses (e.g. 'fixes false positives where cities show "0 turns" without researching the resource') and document trade-offs like added complexity or new bugs
D20 · ADR Quality · The title 'Mod checking · ×1
  • The title 'Mod checking: Catch unexpected validation exceptions' 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 fastlane/metadata/android/en-US/changelogs/1131.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only three unrelated patch/fix titles with no decision or rationale · ×1
  • No context/problem and no consequences/trade-offs; only three unrelated patch/fix titles with no decision or rationale fastlane/metadata/android/en-US/changelogs/1132.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of tasks is visible · ×1
  • No context/problem and no consequences/trade-offs; only a list of tasks is visible fastlane/metadata/android/en-US/changelogs/1133.txt — 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)
D20 · ADR Quality · No context/problem and no consequences; only arbitrary slogans ('connect road works when railroads don't exist') and a requirements-simplification list appear · ×1
  • No context/problem and no consequences; only arbitrary slogans ('connect road works when railroads don't exist') and a requirements-simplification list appear fastlane/metadata/android/en-US/changelogs/1134.txt — State the problem (e.g. 'connect road fails under railroad presence') and its consequence (e.g. 'railroad networks must still be traversable by roads'), then document the explicit decisions and trade-offs
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1136.txt — State one architecture decision per line (e.g. "Sprites change to base color on movement" as an explicit rule), describe the problem each fix addresses, and note any trade-offs
D20 · ADR Quality · No context/problem and no consequences/trade-offs for any of the listed fixes; only task/authoring metadata is present · ×1
  • No context/problem and no consequences/trade-offs for any of the listed fixes; only task/authoring metadata is present fastlane/metadata/android/en-US/changelogs/1137.txt — 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
D20 · ADR Quality · Decision is a vague 'better handling of improvement-buildings' with no context/problem and no consequences; the title is uninformative · ×1
  • Decision is a vague 'better handling of improvement-buildings' with no context/problem and no consequences; the title is uninformative fastlane/metadata/android/en-US/changelogs/1138.txt — 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
D20 · ADR Quality · The title 'CPU performance improvements' 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 · ×1
  • The title 'CPU performance improvements' 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 fastlane/metadata/android/en-US/changelogs/1139.txt — 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
D20 · ADR Quality · Decision is a thin list of fixes (localized numbers, nation color validation, settler capture) with no context/problem and no consequences/trade-offs · ×1
  • Decision is a thin list of fixes (localized numbers, nation color validation, settler capture) with no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1140.txt — 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
D20 · ADR Quality · Context/problem is thin (only the two patches listed) and consequences/trade-offs are absent · ×1
  • Context/problem is thin (only the two patches listed) and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/1141.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs for any of the four elements; only titles and a translation-translation filler are present · ×1
  • No context/problem and no consequences/trade-offs for any of the four elements; only titles and a translation-translation filler are present fastlane/metadata/android/en-US/changelogs/1142.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only the decision statements plus a 'By...' note appear · ×1
  • Context/problem and consequences/trade-offs are absent; only the decision statements plus a 'By...' note appear fastlane/metadata/android/en-US/changelogs/1143.txt — Add context (why line-of-sight matters for nukes) and consequences (false-positive tolerance, environment-check cost) under each decision
D20 · ADR Quality · Title 'Better way to brighten colors' is a non-sequitur; no context/problem and no decision in the visible text. The body lists unrelated bug fixes ('Fix AI civilian unit not escaping enemy', 'Fix translation for an unknown civilization') with no consequences. · ×1
  • Title 'Better way to brighten colors' is a non-sequitur; no context/problem and no decision in the visible text. The body lists unrelated bug fixes ('Fix AI civilian unit not escaping enemy', 'Fix translation for an unknown civilization') with no consequences. fastlane/metadata/android/en-US/changelogs/1144.txt — Rename to something like 'Bug fix: Civilian units do not escape enemies' or 'Translation of unknown civilizations'. 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.
D20 · ADR Quality · No context/problem and no consequences; the body is a list of unrelated patches with no decision statement · ×1
  • No context/problem and no consequences; the body is a list of unrelated patches with no decision statement fastlane/metadata/android/en-US/changelogs/1145.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the entries are all single-paragraph decisions with no framing · ×1
  • No context/problem and no consequences; the entries are all single-paragraph decisions with no framing fastlane/metadata/android/en-US/changelogs/1146.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1148.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the body is a list of patch-level fixes with no decision statement or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of patch-level fixes with no decision statement or trade-offs fastlane/metadata/android/en-US/changelogs/1150.txt — State what the ADR addresses (e.g. crash on first turn, missing misspelling corrections) and document the consequences for each fix
D20 · ADR Quality · All three ADRs are single-paragraph decisions with no context/problem and no consequences; the title is uninformative · ×1
  • All three ADRs are single-paragraph decisions with no context/problem and no consequences; the title is uninformative fastlane/metadata/android/en-US/changelogs/1151.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of unrelated bugfix titles with author names · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of unrelated bugfix titles with author names fastlane/metadata/android/en-US/changelogs/1153.txt — Replace the title with an informative problem statement (e.g. 'Allow spy surveillance to proceed without active tech stealing') and add a Context section explaining why this decision matters, plus Consequences covering trade-offs like increased risk of tech exposure or false positives
D20 · ADR Quality · Title is a single vague prompt ('Fix combat conditionals not working correctly') and the body records only two arbitrary AI worker-automation goals with no context/problem or consequences · ×1
  • Title is a single vague prompt ('Fix combat conditionals not working correctly') and the body records only two arbitrary AI worker-automation goals with no context/problem or consequences fastlane/metadata/android/en-US/changelogs/1154.txt — 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
D20 · ADR Quality · Only two fixes; no context/problem and no consequences/trade-offs are stated · ×1
  • Only two fixes; no context/problem and no consequences/trade-offs are stated fastlane/metadata/android/en-US/changelogs/1155.txt — Describe the problem (map editor tile click does not show stats) and its impact, then document each fix's rationale and any trade-offs
D20 · ADR Quality · No context/problem and no consequences; only vague decision statements ('Allow AI to move-and-settle') with arbitrary task lists (Victory Type for Brave New World) under By names · ×1
  • No context/problem and no consequences; only vague decision statements ('Allow AI to move-and-settle') with arbitrary task lists (Victory Type for Brave New World) under By names fastlane/metadata/android/en-US/changelogs/1156.txt — Replace the empty body with a clear problem statement (e.g. 'AI struggles to adapt on high-difficulty maps, so it should settle more easily') and an explicit decision plus trade-offs such as reduced challenge or fairness
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of decisions (city-state icons removed, healing-on-dangerous-tiles fixed) are present · ×1
  • No context/problem and no consequences/trade-offs; only a list of decisions (city-state icons removed, healing-on-dangerous-tiles fixed) are present fastlane/metadata/android/en-US/changelogs/1157.txt — Add the problem motivating each decision (e.g. 'multiple images on last mod is distracting') and document trade-offs such as loss of city-state icon guidance or the cost of heal-on-dangerous-tile
D20 · ADR Quality · Context/problem is thin (only "Handle mods removing techs, adding/removing eras" and "Post-battle movement doesn't occur if during the battle the unit lost movement points" are stated) with no decision or consequences; the AI updates context is a placeholder tag · ×1
  • Context/problem is thin (only "Handle mods removing techs, adding/removing eras" and "Post-battle movement doesn't occur if during the battle the unit lost movement points" are stated) with no decision or consequences; the AI updates context is a placeholder tag fastlane/metadata/android/en-US/changelogs/1158.txt — 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
D20 · ADR Quality · Decision and consequences are both present but the context/problem is non-existent (no problem statement) and trade-offs are absent · ×1
  • Decision and consequences are both present but the context/problem is non-existent (no problem statement) and trade-offs are absent fastlane/metadata/android/en-US/changelogs/1160.txt — 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
D20 · ADR Quality · Only the decision "Added map autosave" and a list of fixes are present; no context/problem and no consequences/trade-offs · ×1
  • Only the decision "Added map autosave" and a list of fixes are present; no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1161.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1162.txt — 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
D20 · ADR Quality · Only two entries in the list are named; the title and body give no context/problem and no consequences · ×1
  • Only two entries in the list are named; the title and body give no context/problem and no consequences fastlane/metadata/android/en-US/changelogs/1163.txt — Give each listed change a descriptive problem statement (e.g. 'Civilopedia lacks global uniqueness for policy/belief') and its trade-offs
D20 · ADR Quality · Context/problem is thin ("Fixed crash on declare war with triggers") and consequences/trade-offs are absent; the decision "can no longer repair improvements in neutral territory (exploit)" is restated as a title but not expanded · ×1
  • Context/problem is thin ("Fixed crash on declare war with triggers") and consequences/trade-offs are absent; the decision "can no longer repair improvements in neutral territory (exploit)" is restated as a title but not expanded fastlane/metadata/android/en-US/changelogs/1164.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a decision (allow weighted AI decisions) with patch notes and change lists · ×1
  • No context/problem and no consequences/trade-offs; only a decision (allow weighted AI decisions) with patch notes and change lists fastlane/metadata/android/en-US/changelogs/1165.txt — State the problem (weighted choices for AI reasoning) and its trade-offs (game balance/decision weight bias), plus any consequences of allowing this feature
D20 · ADR Quality · The body is a list of commit messages with no context/problem and no explicit decision; the title 'Unique validation · ×1
  • The body is a list of commit messages with no context/problem and no explicit decision; the title 'Unique validation: Find possible misspellings for incorrect modifier parameters' is informative but the content is pure authoring notes fastlane/metadata/android/en-US/changelogs/1166.txt — 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
D20 · ADR Quality · Decision is a two-line policy with no context and no consequences; the body is cut by the scanner mid-pairing · ×1
  • Decision is a two-line policy with no context and no consequences; the body is cut by the scanner mid-pairing fastlane/metadata/android/en-US/changelogs/1167.txt — 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.
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a vague title "Avoid rare crash concurrent modification when calculating construction costs" plus two modding examples with no rationale or impact · ×1
  • No context/problem and no consequences/trade-offs; only a vague title "Avoid rare crash concurrent modification when calculating construction costs" plus two modding examples with no rationale or impact fastlane/metadata/android/en-US/changelogs/1168.txt — 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)
D20 · ADR Quality · No context/problem and no consequences/trade-offs for any decision; the three entries are feature tickets with no narrative · ×1
  • No context/problem and no consequences/trade-offs for any decision; the three entries are feature tickets with no narrative fastlane/metadata/android/en-US/changelogs/1169.txt — 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
D20 · ADR Quality · Decision is a conditional rule ('Remove building-improvement if the building is no longer buildable') with addenda but no context/problem and no consequences/trade-offs · ×1
  • Decision is a conditional rule ('Remove building-improvement if the building is no longer buildable') with addenda but no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1170.txt — 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
D20 · ADR Quality · Only the decision and a partial list of fixes are present; no context/problem and consequences/trade-offs · ×1
  • Only the decision and a partial list of fixes are present; no context/problem and consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1171.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs for any of the listed changes; only a 'Fix X' list with no rationale · ×1
  • No context/problem and no consequences/trade-offs for any of the listed changes; only a 'Fix X' list with no rationale fastlane/metadata/android/en-US/changelogs/1172.txt — For each change in the list (e.g. add/change port ability, fix translation bugs) explain what problem it solves or why parallelization matters
D20 · ADR Quality · Only four short fixes listed; no context/problem and no consequences/trade-offs · ×1
  • Only four short fixes listed; no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1173.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of cosmetic fixes with no rationale · ×1
  • No context/problem and no consequences/trade-offs; only a list of cosmetic fixes with no rationale fastlane/metadata/android/en-US/changelogs/1174.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of patch-level tasks with author names · ×1
  • No context/problem and no consequences/trade-offs; only a list of patch-level tasks with author names fastlane/metadata/android/en-US/changelogs/1175.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of feature/bug fixes with no rationale or impact · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of feature/bug fixes with no rationale or impact fastlane/metadata/android/en-US/changelogs/1177.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the body is a list of unrelated modding fixes plus a civilopedia link with no decision · ×1
  • No context/problem and no consequences; the body is a list of unrelated modding fixes plus a civilopedia link with no decision fastlane/metadata/android/en-US/changelogs/1179.txt — 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's rationale, consequences, and any new problems it introduces.
D20 · ADR Quality · Decision is an empty list of fixes with no context/problem and no consequences; the title 'Units that upgrade continue escorting Nation colors unchanged by multiplayer chat' names a design change but does not explain why it was chosen or what trade-offs it carries · ×1
  • Decision is an empty list of fixes with no context/problem and no consequences; the title 'Units that upgrade continue escorting Nation colors unchanged by multiplayer chat' names a design change but does not explain why it was chosen or what trade-offs it carries fastlane/metadata/android/en-US/changelogs/1180.txt — 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
D20 · ADR Quality · Every entry is a short patch/feature bullet with no context/problem and no consequences; the title 'Memory + CPU performance improvements' is vague and the body is entirely feature lists · ×1
  • Every entry is a short patch/feature bullet with no context/problem and no consequences; the title 'Memory + CPU performance improvements' is vague and the body is entirely feature lists fastlane/metadata/android/en-US/changelogs/1181.txt — 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
D20 · ADR Quality · Context/problem is thin; only three AI fixes are listed with no rationale or consequences. No decision and no trade-offs. · ×1
  • Context/problem is thin; only three AI fixes are listed with no rationale or consequences. No decision and no trade-offs. fastlane/metadata/android/en-US/changelogs/1182.txt — 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.
D20 · ADR Quality · Only the decision list appears; context/problem and consequences are absent · ×1
  • Only the decision list appears; context/problem and consequences are absent fastlane/metadata/android/en-US/changelogs/1184.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only bare bullet lists of features appear · ×1
  • Context/problem and consequences/trade-offs are absent; only bare bullet lists of features appear fastlane/metadata/android/en-US/changelogs/1185.txt — 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
D20 · ADR Quality · Context/problem is thin (only "Fix City button problems" listed) with no rationale; consequences/trade-offs are absent · ×1
  • Context/problem is thin (only "Fix City button problems" listed) with no rationale; consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/1188.txt — Add a Context section explaining why the fixes matter and a Consequences section noting any new trade-offs
D20 · ADR Quality · 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's rationale and trade-offs are missing · ×1
  • 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's rationale and trade-offs are missing fastlane/metadata/android/en-US/changelogs/1189.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of change tickets with authors · ×1
  • No context/problem and no consequences/trade-offs; only a list of change tickets with authors fastlane/metadata/android/en-US/changelogs/1190.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1191.txt — 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
D20 · ADR Quality · No single decision is framed as a coherent architectural choice; the entries are mostly feature/bug fixes with no overarching context or consequences · ×1
  • No single decision is framed as a coherent architectural choice; the entries are mostly feature/bug fixes with no overarching context or consequences fastlane/metadata/android/en-US/changelogs/1192.txt — State the problem (e.g. 'unit promotion notifications fail to appear when promoting a non-countable civilization') and the explicit decision (e.g. 'make [resource] of [civ] Civilizations counts so promotions trigger only on actual resources') along with its trade-offs
D20 · ADR Quality · Context/problem is thin ("Fixed crash on unit wander") with no rationale; the decision "Units unset sleep/automation on manual repair commands" is a one-line rule with no consequences and no author context · ×1
  • Context/problem is thin ("Fixed crash on unit wander") with no rationale; the decision "Units unset sleep/automation on manual repair commands" is a one-line rule with no consequences and no author context fastlane/metadata/android/en-US/changelogs/1193.txt — 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
D20 · ADR Quality · 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) · ×1
  • 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) fastlane/metadata/android/en-US/changelogs/1195.txt — 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
D20 · ADR Quality · Title is a vague placeholder ('Fixed map generation on world wrap and 3 continents') 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. · ×1
  • Title is a vague placeholder ('Fixed map generation on world wrap and 3 continents') 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. fastlane/metadata/android/en-US/changelogs/1196.txt — Rephrase the title to state what it fixes (e.g. 'Fix map generation on world wrap so 3 continents are generated') and add a Context section explaining why world-wrap map generation matters, plus Consequences covering tileset loading failure behavior.
D20 · ADR Quality · No Context/Problem statement; no Decision body; consequences/trade-offs not present · ×1
  • No Context/Problem statement; no Decision body; consequences/trade-offs not present fastlane/metadata/android/en-US/changelogs/1197.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1198.txt — Each entry must name the problem it solves (e.g. 'unique food consumption by population across civilizations') and its rationale plus any trade-offs
D20 · ADR Quality · Context/problem is non-existent; only a list of fixes and one vague compatibility note ('compatible with resource - By chenxing61') appears · ×1
  • Context/problem is non-existent; only a list of fixes and one vague compatibility note ('compatible with resource - By chenxing61') appears fastlane/metadata/android/en-US/changelogs/1199.txt — Add the problem each fix addresses (e.g. 'unit promotion notification shows wrong name', 'negative modifiers accumulate beyond limit', 'quests are inconsistent random') so readers understand why they matter, and document consequences like how new fixes break existing behavior
D20 · ADR Quality · Context/problem is thin and the consequences/trade-offs are absent; only resolved policy changes are listed · ×1
  • Context/problem is thin and the consequences/trade-offs are absent; only resolved policy changes are listed fastlane/metadata/android/en-US/changelogs/1200.txt — Add a Context section explaining when overridden branches should not 'stick around' and why the missing-mod detection is needed. Add Consequences noting trade-offs like increased download load vs the crash-risk fix
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/1201.txt — 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
D20 · ADR Quality · No context/problem statement; the only visible content is a list of unrelated game/XP-change patches plus an unidentifiable title 'AI denounce automation - By unciv-loof', with no decision or consequences · ×1
  • No context/problem statement; the only visible content is a list of unrelated game/XP-change patches plus an unidentifiable title 'AI denounce automation - By unciv-loof', with no decision or consequences fastlane/metadata/android/en-US/changelogs/1202.txt — 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
D20 · ADR Quality · Context/problem is thin ("Catch base terrains with occursOn in ruleset validation" and "Removing improvement-creating buildings where the no city tile has the improvement, no longer crashes") but the explicit decision and consequences/trade-offs are cut by a clip marker mid-sentence; the remaining content is unreviewable · ×1
  • Context/problem is thin ("Catch base terrains with occursOn in ruleset validation" and "Removing improvement-creating buildings where the no city tile has the improvement, no longer crashes") but the explicit decision and consequences/trade-offs are cut by a clip marker mid-sentence; the remaining content is unreviewable fastlane/metadata/android/en-US/changelogs/1204.txt — 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
D20 · ADR Quality · Decision is a bare 'changed default max RAM from 1GB to 4GB' with no context or consequences; the remaining entries are feature/spy restrictions and a NaturalWonders change without any contextual problem statement · ×1
  • Decision is a bare 'changed default max RAM from 1GB to 4GB' with no context or consequences; the remaining entries are feature/spy restrictions and a NaturalWonders change without any contextual problem statement fastlane/metadata/android/en-US/changelogs/1205.txt — 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
D20 · ADR Quality · Context/problem is thin ("Ignore free promotions for promotion path costs") and the decision "Allow gaining free promotions before gaining XP" contradicts the cost-first rationale; consequences/trade-offs are absent · ×1
  • Context/problem is thin ("Ignore free promotions for promotion path costs") and the decision "Allow gaining free promotions before gaining XP" contradicts the cost-first rationale; consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/1209.txt — 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
D20 · ADR Quality · Only two bugfix decisions; context/problem and consequences/trade-offs are absent · ×1
  • Only two bugfix decisions; context/problem and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/1210.txt — 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
D20 · ADR Quality · No context/problem and no explicit decision; only task lists with no rubric for prioritization · ×1
  • No context/problem and no explicit decision; only task lists with no rubric for prioritization fastlane/metadata/android/en-US/changelogs/1211.txt — State the problem each entry addresses (e.g. 'Fix embassy trade logic bug so a civ cannot be forced to accept an unreasonable demand') and document the decision (e.g. 'Add a peace treaty sign-off check that rejects demands after signing') along with its consequences
D20 · ADR Quality · Context/problem is thin ("Barbarian encampments removed when tile enters civ territory") but the explicit decision "Desktop executables · ×1
  • Context/problem is thin ("Barbarian encampments removed when tile enters civ territory") but the explicit decision "Desktop executables: Max JVM RAM *actually* increased to 4GB" 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 fastlane/metadata/android/en-US/changelogs/1212.txt — Clarify each of the listed fixes with context/problem and consequences so they all fall under one decision
D20 · ADR Quality · 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 ('Add back option...') · ×1
  • 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 ('Add back option...') fastlane/metadata/android/en-US/changelogs/1213.txt — State the problem each decision addresses (e.g. 'unitset rendering is disabled by default but should be optional' or 'mod selections reset after warning closes') and document trade-offs such as why forcing resets would break existing behavior
D20 · ADR Quality · Context/problem is thin ("Custom maps are retained when starting a new game from an old one") and the decision "Spectators can see the building list again" is stated but no consequences/trade-offs; only unciv-loof and Ambeco fixes appear in body · ×1
  • Context/problem is thin ("Custom maps are retained when starting a new game from an old one") and the decision "Spectators can see the building list again" is stated but no consequences/trade-offs; only unciv-loof and Ambeco fixes appear in body fastlane/metadata/android/en-US/changelogs/1214.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of ruleset-specific error-ignoring benefits with no rationale or negative side effects · ×1
  • No context/problem and no consequences/trade-offs; only a list of ruleset-specific error-ignoring benefits with no rationale or negative side effects fastlane/metadata/android/en-US/changelogs/1215.txt — Add the problem (e.g. unique errors distract from gameplay) and document the trade-offs of ignoring those errors
D20 · ADR Quality · The body is a list of vaguely related tasks with no context/problem statement and no consequences/trade-offs · ×1
  • The body is a list of vaguely related tasks with no context/problem statement and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1216.txt — 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
D20 · ADR Quality · No context/problem statement; the four items listed are only decisions with no rationale or consequences · ×1
  • No context/problem statement; the four items listed are only decisions with no rationale or consequences fastlane/metadata/android/en-US/changelogs/1218.txt — 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)
D20 · ADR Quality · Title is a vague placeholder ('rendering improvements for large maps') and the body is a jumbled list of unrelated bugfixes with no context/problem and no consequences · ×1
  • Title is a vague placeholder ('rendering improvements for large maps') and the body is a jumbled list of unrelated bugfixes with no context/problem and no consequences fastlane/metadata/android/en-US/changelogs/1219.txt — Rewrite the title to state the real problem (e.g. 'Large map rendering performance under load') 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
D20 · ADR Quality · No context/problem and no consequences; only two vague improvement bullet points ("Battle Table" on small screens", "CPU performance improvements") appear in the body · ×1
  • No context/problem and no consequences; only two vague improvement bullet points ("Battle Table" on small screens", "CPU performance improvements") appear in the body fastlane/metadata/android/en-US/changelogs/1220.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the body is a list of unrelated patch tickets with no decision statement · ×1
  • No context/problem and no consequences; the body is a list of unrelated patch tickets with no decision statement fastlane/metadata/android/en-US/changelogs/1222.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the body is a list of arbitrary features with no decision or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of arbitrary features with no decision or trade-offs fastlane/metadata/android/en-US/changelogs/1224.txt — State what problem each feature solves (e.g. 'notify players when open-world content loads') and document the consequences (e.g. 'music track selection feels forced, not unique to the scenario')
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with 'By' attribution · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with 'By' attribution fastlane/metadata/android/en-US/changelogs/1225.txt — State the problem (double buttons for great people) and the specific mod/constant being fixed ('0 for certain constants'), plus any consequences such as breaking existing behavior or requiring rework
D20 · ADR Quality · Context/problem is non-existent; the only content is a by-line list of unrelated patches with no decision or consequences · ×1
  • Context/problem is non-existent; the only content is a by-line list of unrelated patches with no decision or consequences fastlane/metadata/android/en-US/changelogs/1226.txt — 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
D20 · ADR Quality · No explicit decision and no consequences/trade-offs; context is a list of features with no stated problem or decision · ×1
  • No explicit decision and no consequences/trade-offs; context is a list of features with no stated problem or decision fastlane/metadata/android/en-US/changelogs/1227.txt — 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
D20 · ADR Quality · No single decision and no consequences; the entries are all improvement/feature names with author tags (e.g. "Memory reduction for large maps") · ×1
  • No single decision and no consequences; the entries are all improvement/feature names with author tags (e.g. "Memory reduction for large maps") fastlane/metadata/android/en-US/changelogs/1229.txt — Replace each entry with a one-line Context+Decision+Consequences line: e.g. "Context: 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."
D20 · ADR Quality · Decision is a one-line fix with no context/problem and no consequences; the title is uninformative · ×1
  • Decision is a one-line fix with no context/problem and no consequences; the title is uninformative fastlane/metadata/android/en-US/changelogs/1231.txt — Expand each entry to state the problem it addresses (e.g. "Crash when removing encampments" for the first) and document trade-offs such as how the change affects gameplay or resource management
D20 · ADR Quality · No context/problem statement (why conditional worker uniques are problematic) and no consequences/trade-offs · ×1
  • No context/problem statement (why conditional worker uniques are problematic) and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1232.txt — 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
D20 · ADR Quality · No context/problem statement; only a vague title and a one-line decision with no consequences · ×1
  • No context/problem statement; only a vague title and a one-line decision with no consequences fastlane/metadata/android/en-US/changelogs/1234.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of contributors and fixes are present · ×1
  • No context/problem and no consequences/trade-offs; only a list of contributors and fixes are present fastlane/metadata/android/en-US/changelogs/1235.txt — State the problem (e.g. duplicate EventChoice entries causing duplication) and document the consequences (reduced modding flexibility for uniques requiring >=0)
D20 · ADR Quality · The body is a list of arbitrary patch-level fixes with no context/problem and no explicit decision; the title 'Fixed stockpiled resource trade not actually transferring' is a vague placeholder · ×1
  • The body is a list of arbitrary patch-level fixes with no context/problem and no explicit decision; the title 'Fixed stockpiled resource trade not actually transferring' is a vague placeholder fastlane/metadata/android/en-US/changelogs/1236.txt — State what the original problem was (e.g. players thought resources were transferred but they weren't), describe the fix, and document consequences/trade-offs
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with authorship and some minor non-consequential notes are present · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with authorship and some minor non-consequential notes are present fastlane/metadata/android/en-US/changelogs/1237.txt — State the problem each fix addresses (e.g. recursive citywide-resource count, missing -NC sounds) and document the trade-offs for each proposed change
D20 · ADR Quality · The body is a chaotic mix of unrelated architecture decisions (don't wipe city-state relations on liberation; freeze Demographics rankings to turn-start snapshots) and a separate 'fix · ×1
  • The body is a chaotic mix of unrelated architecture decisions (don't wipe city-state relations on liberation; freeze Demographics rankings to turn-start snapshots) and a separate 'fix: MP upload no longer causes improvements to advance' with its own subsections, with no context/problem or consequences fastlane/metadata/android/en-US/changelogs/1238.txt — Reorganize the body into a coherent problem/context section followed by an explicit decision and its consequences
D20 · ADR Quality · The body is a list of PR-style fixes with no context/problem and no consequences/trade-offs · ×1
  • The body is a list of PR-style fixes with no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/1239.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with no rationale or impact explained · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with no rationale or impact explained fastlane/metadata/android/en-US/changelogs/1241.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/701.txt — Convert the entries into a single Decision section describing what was changed (e.g. production calculation, swapping carriers) along with the motivation behind it
D20 · ADR Quality · Decision is an arbitrary rule ('Don't allow trade routes through enemy cities') with no context and no consequences; the body is a patch log with author/commit notes · ×1
  • Decision is an arbitrary rule ('Don't allow trade routes through enemy cities') with no context and no consequences; the body is a patch log with author/commit notes fastlane/metadata/android/en-US/changelogs/703.txt — Replace the arbitrary decision with a real problem statement (e.g. 'Allow trade routes only between allied cities to prevent economic exploitation') and document the consequences (gameplay penalty, balance impact)
D20 · ADR Quality · No single decision and no consequences; the entries are mostly feature/bug fixes with no problem statement or trade-offs · ×1
  • No single decision and no consequences; the entries are mostly feature/bug fixes with no problem statement or trade-offs fastlane/metadata/android/en-US/changelogs/704.txt — State the explicit architectural decision (e.g. 'allow city connections via open borders and own harbors only') and its rationale, plus a Consequences section on trade-offs such as reduced diplomacy flexibility
D20 · ADR Quality · Decision and consequences are both present but the context/problem is thin (only one sentence) and there is no trade-off section · ×1
  • Decision and consequences are both present but the context/problem is thin (only one sentence) and there is no trade-off section fastlane/metadata/android/en-US/changelogs/705.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/706.txt — 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)
D20 · ADR Quality · No single decision is framed as the ADR's 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 · ×1
  • No single decision is framed as the ADR's 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 fastlane/metadata/android/en-US/changelogs/707.txt — State the named problem (proxy issues, unclear victory screen names, unmet Civ/Capital visibility) and the unified decision that all these fixes serve together
D20 · ADR Quality · No single decision is framed as the ADR's 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 · ×1
  • No single decision is framed as the ADR's 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 fastlane/metadata/android/en-US/changelogs/708.txt — 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's consequence as a decision plus its trade-offs
D20 · ADR Quality · No context/problem and no consequences/trade-offs for any decision; the body is a list of patches with no rationale · ×1
  • No context/problem and no consequences/trade-offs for any decision; the body is a list of patches with no rationale fastlane/metadata/android/en-US/changelogs/709.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only the decision (memory allowance) is stated with patch authors · ×1
  • No context/problem and no consequences/trade-offs; only the decision (memory allowance) is stated with patch authors fastlane/metadata/android/en-US/changelogs/710.txt — 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)
D20 · ADR Quality · Every line is a one-word title plus author and a vague/empty body; no context/problem, no explicit decision, no consequences · ×1
  • Every line is a one-word title plus author and a vague/empty body; no context/problem, no explicit decision, no consequences fastlane/metadata/android/en-US/changelogs/711.txt — Each entry must carry its own problem statement (e.g. 'Fix MP refresher not working after rate limit') and the actual decision it records
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with by-line authoring is present · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with by-line authoring is present fastlane/metadata/android/en-US/changelogs/714.txt — 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
D20 · ADR Quality · All entries are feature/task tickets with no context/problem and no decision; the title is a placeholder ("Implement 'wait' command - by doublep") · ×1
  • All entries are feature/task tickets with no context/problem and no decision; the title is a placeholder ("Implement 'wait' command - by doublep") fastlane/metadata/android/en-US/changelogs/716.txt — Convert each ticket to an ADR: state the problem/context, the explicit decision (e.g. "Add a wait command that pauses for input"), and its consequences/trade-offs
D20 · ADR Quality · No context/problem and no consequences; the body is a list of arbitrary patches with no rationale or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of arbitrary patches with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/717.txt — 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
D20 · ADR Quality · No single context/problem and no explicit decision; the entries are all "By..." stubs with only cosmetic/fix notes · ×1
  • No single context/problem and no explicit decision; the entries are all "By..." stubs with only cosmetic/fix notes fastlane/metadata/android/en-US/changelogs/719.txt — 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
D20 · ADR Quality · No context/problem statement and no consequences/trade-offs; only a decision line "Autoassign population when the manual assignment fails" with no rationale or impact · ×1
  • No context/problem statement and no consequences/trade-offs; only a decision line "Autoassign population when the manual assignment fails" with no rationale or impact fastlane/metadata/android/en-US/changelogs/720.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of patch-level fixes with author names only · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of patch-level fixes with author names only fastlane/metadata/android/en-US/changelogs/721.txt — State what problem each listed change addresses (e.g. 'fix teleportation bugs so units can move normally') and document any trade-offs or remaining open issues
D20 · ADR Quality · Only resolved crash and a few unrelated patch notes; no context/problem and no consequences · ×1
  • Only resolved crash and a few unrelated patch notes; no context/problem and no consequences fastlane/metadata/android/en-US/changelogs/722.txt — 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)
D20 · ADR Quality · Decision is a single short statement with no context and no consequences; the author's personal additions (multiplayer sound, crash fix) are not part of an ADR · ×1
  • Decision is a single short statement with no context and no consequences; the author's personal additions (multiplayer sound, crash fix) are not part of an ADR fastlane/metadata/android/en-US/changelogs/723.txt — 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
D20 · ADR Quality · Title '725' is the document number; no meaningful title describing what it addresses. Context/problem and consequences are absent. · ×1
  • Title '725' is the document number; no meaningful title describing what it addresses. Context/problem and consequences are absent. fastlane/metadata/android/en-US/changelogs/725.txt — Give a descriptive title (e.g., "Liberating City-States from Civilizations" or "Key Handling Improvements") and flesh out each listed bug with its problem statement, why it matters, and the consequences.
D20 · ADR Quality · This is a list of patch notes/commit messages with no context/problem statement, no explicit decision (the 'By' lines are the fixes), and no consequences/trade-offs · ×1
  • This is a list of patch notes/commit messages with no context/problem statement, no explicit decision (the 'By' lines are the fixes), and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/726.txt — 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.
D20 · ADR Quality · Context/problem is thin (only one visible line per decision) and consequences/trade-offs are absent; only a single author lists fixes · ×1
  • Context/problem is thin (only one visible line per decision) and consequences/trade-offs are absent; only a single author lists fixes fastlane/metadata/android/en-US/changelogs/728.txt — 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
D20 · ADR Quality · Context/problem is thin (only one decision listed for each Azzurite and OptimizedForDensity tag) with no consequences; the Skekdog note 'Better exploring AI for ruins' is a non-technical framing rather than an explicit decision · ×1
  • Context/problem is thin (only one decision listed for each Azzurite and OptimizedForDensity tag) with no consequences; the Skekdog note 'Better exploring AI for ruins' is a non-technical framing rather than an explicit decision fastlane/metadata/android/en-US/changelogs/731.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only release notes and patch-level fixes with author names appear · ×1
  • Context/problem and consequences/trade-offs are absent; only release notes and patch-level fixes with author names appear fastlane/metadata/android/en-US/changelogs/733.txt — 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
D20 · ADR Quality · Title '734' 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 · ×1
  • Title '734' 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 fastlane/metadata/android/en-US/changelogs/734.txt — 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
D20 · ADR Quality · Decision "Removed deprecated uniques" 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 · ×1
  • Decision "Removed deprecated uniques" 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 fastlane/metadata/android/en-US/changelogs/735.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only resolved ANRs and the fixes listed are present · ×1
  • No context/problem and no consequences/trade-offs; only resolved ANRs and the fixes listed are present fastlane/metadata/android/en-US/changelogs/737.txt — 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
D20 · ADR Quality · All four elements present but the context/problem and consequences/trade-offs are thin/omitted; only the decision list is visible · ×1
  • All four elements present but the context/problem and consequences/trade-offs are thin/omitted; only the decision list is visible fastlane/metadata/android/en-US/changelogs/738.txt — 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)
D20 · ADR Quality · Context/problem is thin ("Can no longer receive negative gold offers from AI") and consequences/trade-offs are absent; the body is a list of three short fixes with no rationale · ×1
  • Context/problem is thin ("Can no longer receive negative gold offers from AI") and consequences/trade-offs are absent; the body is a list of three short fixes with no rationale fastlane/metadata/android/en-US/changelogs/739.txt — Add context for each fix (e.g. "Negative gold offers disrupt economy") and document trade-offs (e.g. "Minor reweight may slightly reduce AI aggression") under each decision
D20 · ADR Quality · No context/problem and no consequences; the body is a single short decision line ('HexaRealm is now default tileset') plus a 'Replace "moveTo" in unit overview with "Moving"' change note · ×1
  • No context/problem and no consequences; the body is a single short decision line ('HexaRealm is now default tileset') plus a 'Replace "moveTo" in unit overview with "Moving"' change note fastlane/metadata/android/en-US/changelogs/740.txt — 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.
D20 · ADR Quality · 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) · ×1
  • 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) fastlane/metadata/android/en-US/changelogs/743.txt — Convert to a real decision record: state the problem being solved, the explicit decision (e.g. 'allow HexaRealm to render jungles on hills'), and its consequences/trade-offs
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/744.txt — 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
D20 · ADR Quality · Every entry is a one-line task with no context/problem and no consequences; the title '745' gives no signal · ×1
  • Every entry is a one-line task with no context/problem and no consequences; the title '745' gives no signal fastlane/metadata/android/en-US/changelogs/745.txt — Convert each bullet to an explanatory Context/Decision/Consequences section for each change, or give the ADR a descriptive title
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only the decisions (unit type, resuming bug fix, occupied cities +2 unhappiness) and a one-line add-missing-string note appear · ×1
  • Context/problem and consequences/trade-offs are absent; only the decisions (unit type, resuming bug fix, occupied cities +2 unhappiness) and a one-line add-missing-string note appear fastlane/metadata/android/en-US/changelogs/746.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only load-on-download decision with arbitrary numbered list items · ×1
  • No context/problem and no consequences/trade-offs; only load-on-download decision with arbitrary numbered list items fastlane/metadata/android/en-US/changelogs/747.txt — 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)
D20 · ADR Quality · No context/problem and no explicit decision; all entries are fixes tagged with by-line authors · ×1
  • No context/problem and no explicit decision; all entries are fixes tagged with by-line authors fastlane/metadata/android/en-US/changelogs/749.txt — Each entry is a fix but there is no problem statement or proposed policy in the body, so it is an incomplete ADR
D20 · ADR Quality · No context/problem and no consequences; the four entries are feature/task tickets with no decision or trade-offs · ×1
  • No context/problem and no consequences; the four entries are feature/task tickets with no decision or trade-offs fastlane/metadata/android/en-US/changelogs/750.txt — Replace each ticketed entry with a dedicated ADR: one explaining the problem (e.g. 'JAR deployment on macOS is not supported by current tools') and the explicit decision (e.g. 'Add Homebrew+macdeployit support for JAR packaging'), plus consequences/trade-offs
D20 · ADR Quality · Only the decisions are present; context/problem and consequences/trade-offs are absent · ×1
  • Only the decisions are present; context/problem and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/751.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/752.txt — State the problem (e.g. 'no longer show a happy face while loading') and the decision (show Unciv icon instead) before listing bug-fixes, then document each fix's consequence
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with authors and some vague titles · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with authors and some vague titles fastlane/metadata/android/en-US/changelogs/753.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the title is a vague banner with no decision · ×1
  • No context/problem and no consequences; the title is a vague banner with no decision fastlane/metadata/android/en-US/changelogs/754.txt — State what desktop download format (fullscreen vs. windowed) is required for gameplay fidelity, why moddable skins matter, and the politics overview screen's role in balancing realism and accessibility
D20 · ADR Quality · No context/problem and no consequences; only a list of fixes with author names and vague game state references · ×1
  • No context/problem and no consequences; only a list of fixes with author names and vague game state references fastlane/metadata/android/en-US/changelogs/755.txt — 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
D20 · ADR Quality · Title is a vague placeholder ("Slight performance improvements") and body contains only the commit hash "Create Cannot Move Unique By itanasi" with no context/problem or consequences · ×1
  • Title is a vague placeholder ("Slight performance improvements") and body contains only the commit hash "Create Cannot Move Unique By itanasi" with no context/problem or consequences fastlane/metadata/android/en-US/changelogs/756.txt — Replace the placeholder title with an actual problem statement. Replace the commit line with the decision text plus its rationale and any trade-offs
D20 · ADR Quality · Context/problem is thin; each entry is a one-line resolution with no rationale or consequences. The title 'Fixed Temple of Artemis production bonuses' gives nothing about the problem. · ×1
  • Context/problem is thin; each entry is a one-line resolution with no rationale or consequences. The title 'Fixed Temple of Artemis production bonuses' gives nothing about the problem. fastlane/metadata/android/en-US/changelogs/758.txt — For each decision state what it fixes (e.g. 'resolves a cached conditional unique causing tile yield corruption') and its trade-offs, then give an informative title.
D20 · ADR Quality · Title is a list of fixes with no overarching decision; context/problem and consequences are absent · ×1
  • Title is a list of fixes with no overarching decision; context/problem and consequences are absent fastlane/metadata/android/en-US/changelogs/759.txt — Give the ADR an informative title (e.g. "Fixed memory leaks, Great Person Picker responsiveness, stat-construction obsolescence, and FantasyHex era variants") and state the problem/context under which each fix was applied, plus its consequences/trade-offs
D20 · ADR Quality · Decision is a list of fixes with no context/problem and no consequences/trade-offs · ×1
  • Decision is a list of fixes with no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/760.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only bare feature lists · ×1
  • No context/problem and no consequences/trade-offs; only bare feature lists fastlane/metadata/android/en-US/changelogs/761.txt — 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
D20 · ADR Quality · Context/problem is thin ("Fixed rare thread crashes" and "Added many new before/after X turns") with no trade-offs; the decision "Generalized ruins reward limitations with 'only available when'" is a minor one-line fix buried in a list · ×1
  • Context/problem is thin ("Fixed rare thread crashes" and "Added many new before/after X turns") with no trade-offs; the decision "Generalized ruins reward limitations with 'only available when'" is a minor one-line fix buried in a list fastlane/metadata/android/en-US/changelogs/762.txt — 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
D20 · ADR Quality · Context/problem is thin (only "Fixed promotions for mods conflicting with base ruleset promotions" in title) and consequences/trade-offs are absent; the body contains only a single patch plus vague diplomacy line · ×1
  • Context/problem is thin (only "Fixed promotions for mods conflicting with base ruleset promotions" in title) and consequences/trade-offs are absent; the body contains only a single patch plus vague diplomacy line fastlane/metadata/android/en-US/changelogs/763.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the body is a list of unrelated cosmetic/functional changes with no rationale or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of unrelated cosmetic/functional changes with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/764.txt — Add a Context section explaining why each change was made (e.g. 'fixes a bug where unexplored tiles were erroneously shown') and a Consequences section noting any unintended side effects
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/765.txt — 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
D20 · ADR Quality · Context/problem is non-existent; the only entries are feature items and a vague 'Removed single-pixel gap in top bar' plus an absolute units name · ×1
  • Context/problem is non-existent; the only entries are feature items and a vague 'Removed single-pixel gap in top bar' plus an absolute units name fastlane/metadata/android/en-US/changelogs/766.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a feature list with no rationale · ×1
  • No context/problem and no consequences/trade-offs; only a feature list with no rationale fastlane/metadata/android/en-US/changelogs/767.txt — 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
D20 · ADR Quality · Context/problem is thin ("Fixed city-state type in civilopedia" gives no problem statement) but the body contains only a decision and an incomplete consequence section; trade-offs are not stated · ×1
  • Context/problem is thin ("Fixed city-state type in civilopedia" gives no problem statement) but the body contains only a decision and an incomplete consequence section; trade-offs are not stated fastlane/metadata/android/en-US/changelogs/768.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of changes with authors · ×1
  • No context/problem and no consequences/trade-offs; only a list of changes with authors fastlane/metadata/android/en-US/changelogs/769.txt — 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
D20 · ADR Quality · No context/problem (why the yield scaling down) and no consequences/trade-offs · ×1
  • No context/problem (why the yield scaling down) and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/771.txt — 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
D20 · ADR Quality · Decision is a single bullet list of fixes with no context/problem and no consequences/trade-offs · ×1
  • Decision is a single bullet list of fixes with no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/772.txt — 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)
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/774.txt — 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
D20 · ADR Quality · Only three short bullet entries; no context/problem and no consequences/trade-offs for any decision · ×1
  • Only three short bullet entries; no context/problem and no consequences/trade-offs for any decision fastlane/metadata/android/en-US/changelogs/776.txt — Add a Context section explaining why each entry matters (e.g. 'Air Carrier upgrade must not destroy onboard units that support it') and a Consequences section noting trade-offs like portrait storage cost or flag visibility
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of features with by-line contributors are present · ×1
  • No context/problem and no consequences/trade-offs; only a list of features with by-line contributors are present fastlane/metadata/android/en-US/changelogs/777.txt — 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
D20 · ADR Quality · No context/problem statement; only the solved bug ('players can no longer get citystate nations when selecting mod') is named with a linked commit list. No consequences/trade-offs. · ×1
  • No context/problem statement; only the solved bug ('players can no longer get citystate nations when selecting mod') is named with a linked commit list. No consequences/trade-offs. fastlane/metadata/android/en-US/changelogs/779.txt — 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.
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only rework/fix lists with no rationale · ×1
  • No context/problem and no consequences/trade-offs; only rework/fix lists with no rationale fastlane/metadata/android/en-US/changelogs/780.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/782.txt — 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
D20 · ADR Quality · No context/problem statement and no consequences/trade-offs; only a list of fixes with author names · ×1
  • No context/problem statement and no consequences/trade-offs; only a list of fixes with author names fastlane/metadata/android/en-US/changelogs/786.txt — State the problem (e.g. double-unit construction, lost next-unit return) and its impact before listing fixes
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of unrelated patches with no decision or rationale · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of unrelated patches with no decision or rationale fastlane/metadata/android/en-US/changelogs/787.txt — State what problem each ADR addresses (e.g. 'AI moves civilians off capital to prevent overpopulation') and its trade-offs (loss of civilian safety, shipping route disruption) under an informative title
D20 · ADR Quality · The body is a list of unrelated patch notes and no context/problem or explicit decision (the modding/unique-parameters rule) appears · ×1
  • The body is a list of unrelated patch notes and no context/problem or explicit decision (the modding/unique-parameters rule) appears fastlane/metadata/android/en-US/changelogs/789.txt — 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
D20 · ADR Quality · Context/problem is thin ("Calculate movement correctly for road + railroad combinations") and consequences/trade-offs are absent; the body is a list of feature tickets with no decision statement · ×1
  • Context/problem is thin ("Calculate movement correctly for road + railroad combinations") and consequences/trade-offs are absent; the body is a list of feature tickets with no decision statement fastlane/metadata/android/en-US/changelogs/790.txt — 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
D20 · ADR Quality · Context/problem is thin (only "AI tries to stop civs who are about to win Scientific/Cultural victory" and "No double copies of offers on AI trade counterproposals"), with consequences/trade-offs only implied rather than stated · ×1
  • Context/problem is thin (only "AI tries to stop civs who are about to win Scientific/Cultural victory" and "No double copies of offers on AI trade counterproposals"), with consequences/trade-offs only implied rather than stated fastlane/metadata/android/en-US/changelogs/791.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are both absent; only a one-line decision ('Units are not displaced to enemy land when kicked out of borders') with no rationale or impact statement · ×1
  • Context/problem and consequences/trade-offs are both absent; only a one-line decision ('Units are not displaced to enemy land when kicked out of borders') with no rationale or impact statement fastlane/metadata/android/en-US/changelogs/792.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the list is a feature/bug fix dump with no rationale · ×1
  • No context/problem and no consequences/trade-offs; the list is a feature/bug fix dump with no rationale fastlane/metadata/android/en-US/changelogs/793.txt — 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
D20 · ADR Quality · Decision is a list of modding and gameplay fixes but no context/problem and no consequences/trade-offs are stated · ×1
  • Decision is a list of modding and gameplay fixes but no context/problem and no consequences/trade-offs are stated fastlane/metadata/android/en-US/changelogs/794.txt — Add the problem motivating each change (e.g. overlap/flag-fading) and its consequence/trade-off for each fix
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the visible content is a list of fixes with no decision statement or rationale · ×1
  • No context/problem and no consequences/trade-offs; the visible content is a list of fixes with no decision statement or rationale fastlane/metadata/android/en-US/changelogs/795.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/797.txt — State the problem each fix addresses in its own sentence and note any trade-offs or implementation details
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only feature bullet points plus a vague 'Resolved health bar overflow problems' appear · ×1
  • Context/problem and consequences/trade-offs are absent; only feature bullet points plus a vague 'Resolved health bar overflow problems' appear fastlane/metadata/android/en-US/changelogs/798.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the title names a framework but it is an empty body · ×1
  • No context/problem and no consequences; the title names a framework but it is an empty body fastlane/metadata/android/en-US/changelogs/799.txt — 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
D20 · ADR Quality · Context/problem is thin (e.g. 'Displayed Great Person point requirements always take game speed into account') and consequences/trade-offs are absent; the visible elements are a policy title plus two decisions with no framing · ×1
  • Context/problem is thin (e.g. 'Displayed Great Person point requirements always take game speed into account') and consequences/trade-offs are absent; the visible elements are a policy title plus two decisions with no framing fastlane/metadata/android/en-US/changelogs/800.txt — 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)
D20 · ADR Quality · Decision is a vague one-line promise with no context (why map types need better generation) and no consequences; the title is uninformative · ×1
  • Decision is a vague one-line promise with no context (why map types need better generation) and no consequences; the title is uninformative fastlane/metadata/android/en-US/changelogs/801.txt — 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
D20 · ADR Quality · Only the decisions are listed; no context/problem and no consequences/trade-offs for any of them · ×1
  • Only the decisions are listed; no context/problem and no consequences/trade-offs for any of them fastlane/metadata/android/en-US/changelogs/802.txt — 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
D20 · ADR Quality · Decision is narrow and only one concrete action ('Do not allow placing of 'repair' in map editor') with no context/problem or consequences; the title is vague · ×1
  • Decision is narrow and only one concrete action ('Do not allow placing of 'repair' in map editor') with no context/problem or consequences; the title is vague fastlane/metadata/android/en-US/changelogs/803.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/804.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only a decision list with author names appears · ×1
  • Context/problem and consequences/trade-offs are absent; only a decision list with author names appears fastlane/metadata/android/en-US/changelogs/805.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with no rationale or impact · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with no rationale or impact fastlane/metadata/android/en-US/changelogs/806.txt — 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)
D20 · ADR Quality · No context/problem and no explicit decision; the entries are all single-paragraph task tickets with no rationale or trade-offs · ×1
  • No context/problem and no explicit decision; the entries are all single-paragraph task tickets with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/807.txt — State each ticket's problem (e.g. 'the policies screen header is unresponsive') and its design goal under a Context section, then document consequences such as how autosaving affects gameplay
D20 · ADR Quality · Context/problem is thin (only one sentence) with no consequences; the decision 'Cannot alter city build queue in between turns' is a rule but its rationale/trade-offs are not stated · ×1
  • Context/problem is thin (only one sentence) with no consequences; the decision 'Cannot alter city build queue in between turns' is a rule but its rationale/trade-offs are not stated fastlane/metadata/android/en-US/changelogs/808.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/809.txt — Add a Context section explaining what 'dead population working tiles' 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
D20 · ADR Quality · Decision is a single sentence ('Fixed air sweep crash') with no context/problem and no consequences; the visible text is mostly author/patch notes rather than an ADR · ×1
  • Decision is a single sentence ('Fixed air sweep crash') with no context/problem and no consequences; the visible text is mostly author/patch notes rather than an ADR fastlane/metadata/android/en-US/changelogs/811.txt — 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
D20 · ADR Quality · No context/problem and no explicit decision; only a 'Resolved - fixed Guruship belief' line plus a list of fixes with no rationale or consequences · ×1
  • No context/problem and no explicit decision; only a 'Resolved - fixed Guruship belief' line plus a list of fixes with no rationale or consequences fastlane/metadata/android/en-US/changelogs/812.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a decision list plus vague 'Improve UX' tag · ×1
  • No context/problem and no consequences/trade-offs; only a decision list plus vague 'Improve UX' tag fastlane/metadata/android/en-US/changelogs/813.txt — 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)
D20 · ADR Quality · No context/problem and no consequences; the body is a list of cosmetic/feature changes with no rationale or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of cosmetic/feature changes with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/816.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/817.txt — Add a Context section explaining why each change matters and a Consequences section noting any unintended side effects
D20 · ADR Quality · No single decision is framed as a coherent architectural rule; the entries are scattered triggers and patches with no context/problem and no consequences · ×1
  • No single decision is framed as a coherent architectural rule; the entries are scattered triggers and patches with no context/problem and no consequences fastlane/metadata/android/en-US/changelogs/818.txt — State each ADR's problem (e.g. 'ensure camera does not move outside explored regions') and its explicit consequence (e.g. 'prevent players from straying into unvisited zones'), then document all decisions in a unified decision section
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of patch-level fixes with no decision statement · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of patch-level fixes with no decision statement fastlane/metadata/android/en-US/changelogs/819.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/823.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a modding list with author fixes are present · ×1
  • No context/problem and no consequences/trade-offs; only a modding list with author fixes are present fastlane/metadata/android/en-US/changelogs/824.txt — 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)
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of features with author names · ×1
  • No context/problem and no consequences/trade-offs; only a list of features with author names fastlane/metadata/android/en-US/changelogs/825.txt — State the problem (e.g. limited action types or inconsistent moddability) and its consequences (e.g. increased complexity, reduced discoverability), then document each feature's trade-off
D20 · ADR Quality · Only the title and two short commit entries are present; no context/problem and no explicit decision · ×1
  • Only the title and two short commit entries are present; no context/problem and no explicit decision fastlane/metadata/android/en-US/changelogs/828.txt — 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
D20 · ADR Quality · No context/problem statement; the four listed items are all fixes/updates with no rationale or problem framing · ×1
  • No context/problem statement; the four listed items are all fixes/updates with no rationale or problem framing fastlane/metadata/android/en-US/changelogs/829.txt — Add a Context section explaining what the Industrial Era Settler expansion is addressing and why each of the four items matters
D20 · ADR Quality · No context/problem and no consequences; only the decision "Add Replay feature in VictoryScreen" is stated with no rationale or trade-offs · ×1
  • No context/problem and no consequences; only the decision "Add Replay feature in VictoryScreen" is stated with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/830.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only a list of fixes is present · ×1
  • Context/problem and consequences/trade-offs are absent; only a list of fixes is present fastlane/metadata/android/en-US/changelogs/832.txt — Add the problem each fix addresses (e.g. SelectBox scroll pane transparency) and its consequences (performance cost, repaint/reflow impact)
D20 · ADR Quality · Decision and consequences are present but the context/problem is thin (e.g. 'Fixed ... trigger activating for all units' with no rationale) and trade-offs of the changes are not stated · ×1
  • Decision and consequences are present but the context/problem is thin (e.g. 'Fixed ... trigger activating for all units' with no rationale) and trade-offs of the changes are not stated fastlane/metadata/android/en-US/changelogs/835.txt — 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
D20 · ADR Quality · No context/problem and no consequences; only trigger examples and a vague 'Better multiplayer button location' are listed · ×1
  • No context/problem and no consequences; only trigger examples and a vague 'Better multiplayer button location' are listed fastlane/metadata/android/en-US/changelogs/837.txt — 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
D20 · ADR Quality · No context/problem and no explicit decision; the body is a list of feature tickets with no overarching ADR framing · ×1
  • No context/problem and no explicit decision; the body is a list of feature tickets with no overarching ADR framing fastlane/metadata/android/en-US/changelogs/838.txt — State what problem this ADR addresses (e.g. per-turn cost estimation or fog-of-war inconsistency) and document the explicit decision it records
D20 · ADR Quality · Context/problem is thin (only 'Archipelago creates water again') and consequences/trade-offs are non-existent; the body lists only a patch list with no rationale · ×1
  • Context/problem is thin (only 'Archipelago creates water again') and consequences/trade-offs are non-existent; the body lists only a patch list with no rationale fastlane/metadata/android/en-US/changelogs/839.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/840.txt — Add a Context section explaining why each fix matters (e.g. 'desktop window size 0/0 causes UI freeze') and a Consequences section noting any new bugs or balancing concerns
D20 · ADR Quality · Only the decision ('Music player controls') is present; context/problem and consequences are absent · ×1
  • Only the decision ('Music player controls') is present; context/problem and consequences are absent fastlane/metadata/android/en-US/changelogs/841.txt — 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
D20 · ADR Quality · No context/problem and no consequences; only a list of fixes is present · ×1
  • No context/problem and no consequences; only a list of fixes is present fastlane/metadata/android/en-US/changelogs/843.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/845.txt — 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.
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a 'Fix ...' list of fixes with author names is present · ×1
  • No context/problem and no consequences/trade-offs; only a 'Fix ...' list of fixes with author names is present fastlane/metadata/android/en-US/changelogs/846.txt — 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)
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/849.txt — State the problem each fix addresses (e.g. untranslatable 'in this city' label, double icons, random Retreat chance bug) and document consequences such as increased runtime or added complexity of translation
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only vague motivation ('Show garrison in city screen') and a list of unrelated features · ×1
  • No context/problem and no consequences/trade-offs; only vague motivation ('Show garrison in city screen') and a list of unrelated features fastlane/metadata/android/en-US/changelogs/850.txt — State the concrete problem (e.g. players cannot tell if an alive civ is producing) and document the trade-offs of each listed feature
D20 · ADR Quality · This is a patch log with no context/problem statement or explicit decision; only resolved issues are listed · ×1
  • This is a patch log with no context/problem statement or explicit decision; only resolved issues are listed fastlane/metadata/android/en-US/changelogs/852.txt — 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
D20 · ADR Quality · Context/problem is thin (only one decision with no rationale) and consequences/trade-offs are absent · ×1
  • Context/problem is thin (only one decision with no rationale) and consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/855.txt — 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's inability to explore new regions or how it handles tile-adjacent events
D20 · ADR Quality · Context/problem is thin ("Units sprites move towards the enemy they're attacking") and only one concrete decision ('Removed deprecated settings') with no consequences; the remaining entries are author notes/commit messages · ×1
  • Context/problem is thin ("Units sprites move towards the enemy they're attacking") and only one concrete decision ('Removed deprecated settings') with no consequences; the remaining entries are author notes/commit messages fastlane/metadata/android/en-US/changelogs/856.txt — 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
D20 · ADR Quality · Decision and consequences are present but the context/problem is thin (only 'terrainFilter now accommodates nationFilter for tile owner') with no trade-offs; the listed modding improvements are features rather than a documented decision · ×1
  • Decision and consequences are present but the context/problem is thin (only 'terrainFilter now accommodates nationFilter for tile owner') with no trade-offs; the listed modding improvements are features rather than a documented decision fastlane/metadata/android/en-US/changelogs/857.txt — 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
D20 · ADR Quality · All three titles are placeholder stubs (Norwegian Ski Infantry, Mehal Sefari, Carolean) and the author names; no real subject or decision is visible · ×1
  • All three titles are placeholder stubs (Norwegian Ski Infantry, Mehal Sefari, Carolean) and the author names; no real subject or decision is visible fastlane/metadata/android/en-US/changelogs/858.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/859.txt — Record the problem each entry addresses (e.g. 'buildings across cities not visible', 'vanilla ruleset errors') and state the explicit policy/decision (show Strategic resources by trade without tech research) with its rationale and any consequences
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of bug fixes with no rationale or impact · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of bug fixes with no rationale or impact fastlane/metadata/android/en-US/changelogs/862.txt — Add a Context section explaining what caused the concurrency bug (e.g. two workers on the same tile both claiming it's unimproved) and a Consequences section noting trade-offs like longer rework for future tiles
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only the fixes listed are present · ×1
  • No context/problem and no consequences/trade-offs; only the fixes listed are present fastlane/metadata/android/en-US/changelogs/865.txt — 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
D20 · ADR Quality · No context/problem and no consequences; the body is a list of unrelated features with no decision or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of unrelated features with no decision or trade-offs fastlane/metadata/android/en-US/changelogs/867.txt — 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
D20 · ADR Quality · Decision is a list of fixes with no context/problem statement or consequences · ×1
  • Decision is a list of fixes with no context/problem statement or consequences fastlane/metadata/android/en-US/changelogs/869.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; the body is a list of feature names with no rationale or impact statement · ×1
  • Context/problem and consequences/trade-offs are absent; the body is a list of feature names with no rationale or impact statement fastlane/metadata/android/en-US/changelogs/870.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of features/fixes is present · ×1
  • No context/problem and no consequences/trade-offs; only a list of features/fixes is present fastlane/metadata/android/en-US/changelogs/872.txt — Add the problem motivating this ADR (e.g. 'Players cannot load the game when there are no saved games') and document the consequences (e.g. 'Loading will take longer during startup')
D20 · ADR Quality · Context/problem and consequences are absent; the body is a list of arbitrary items with no narrative ordering (e.g. 'Worker will now replace improvements...') · ×1
  • Context/problem and consequences are absent; the body is a list of arbitrary items with no narrative ordering (e.g. 'Worker will now replace improvements...') fastlane/metadata/android/en-US/changelogs/873.txt — 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
D20 · ADR Quality · Context/problem is thin (only one sentence) and consequences/trade-offs are absent; the body is a list of features/fixes with no rationale · ×1
  • Context/problem is thin (only one sentence) and consequences/trade-offs are absent; the body is a list of features/fixes with no rationale fastlane/metadata/android/en-US/changelogs/874.txt — 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
D20 · ADR Quality · Every entry is a separate short fix with no context/problem statement or consequences; the title 'Pillaged improvements have a visual indication on the icon' is uninformative and the body is a list of unrelated fixes · ×1
  • Every entry is a separate short fix with no context/problem statement or consequences; the title 'Pillaged improvements have a visual indication on the icon' is uninformative and the body is a list of unrelated fixes fastlane/metadata/android/en-US/changelogs/875.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes with author names is present · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes with author names is present fastlane/metadata/android/en-US/changelogs/877.txt — 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
D20 · ADR Quality · Context/problem is thin (only one decision listed and no consequences) with a weak title ('878') · ×1
  • Context/problem is thin (only one decision listed and no consequences) with a weak title ('878') fastlane/metadata/android/en-US/changelogs/878.txt — 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
D20 · ADR Quality · Decision is a list of AI behaviors with no context/problem and no consequences; the modding note is peripheral · ×1
  • Decision is a list of AI behaviors with no context/problem and no consequences; the modding note is peripheral fastlane/metadata/android/en-US/changelogs/880.txt — 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
D20 · ADR Quality · Decision is a list of bug-fix tickets with no context/problem and no consequences/trade-offs · ×1
  • Decision is a list of bug-fix tickets with no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/881.txt — State the original performance problem (e.g. automated state loss) and the decision (fix trigger-on-friendship run twice, resolve nested-bracket translation bugs)
D20 · ADR Quality · Only the first decision ('Removing old buildings on enemy capital ... no longer crashes') and its fixes are recorded; the context/problem and consequences/trade-offs sections are missing · ×1
  • Only the first decision ('Removing old buildings on enemy capital ... no longer crashes') and its fixes are recorded; the context/problem and consequences/trade-offs sections are missing fastlane/metadata/android/en-US/changelogs/883.txt — 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
D20 · ADR Quality · No single decision document; the entries are fixes listed by author rather than an ADR with context/problem, explicit decision, consequences/trade-offs · ×1
  • No single decision document; the entries are fixes listed by author rather than an ADR with context/problem, explicit decision, consequences/trade-offs fastlane/metadata/android/en-US/changelogs/884.txt — 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)
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/886.txt — Add a Context section explaining why the building-filter requirement is needed and a Consequences section on trade-offs such as false-positive detection
D20 · ADR Quality · No context/problem and no consequences; the body is a list of ad-hoc notes ("Display resource uniques in civilopedia", "Memory improvements") with no decision or trade-offs · ×1
  • No context/problem and no consequences; the body is a list of ad-hoc notes ("Display resource uniques in civilopedia", "Memory improvements") with no decision or trade-offs fastlane/metadata/android/en-US/changelogs/890.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of vaguely phrased items ("Little Promotion UX improvements", "Fix issues from gaining free beliefs") · ×1
  • No context/problem and no consequences/trade-offs; only a list of vaguely phrased items ("Little Promotion UX improvements", "Fix issues from gaining free beliefs") fastlane/metadata/android/en-US/changelogs/892.txt — 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)
D20 · ADR Quality · All four entries are task tickets with no context/problem and no consequences; the title is a placeholder ("BaseUnit unique-finding always takes Type uniques into account") · ×1
  • All four entries are task tickets with no context/problem and no consequences; the title is a placeholder ("BaseUnit unique-finding always takes Type uniques into account") fastlane/metadata/android/en-US/changelogs/894.txt — Convert each to an ADR: for "BaseUnit unique-finding always takes Type uniques into account", 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.
D20 · ADR Quality · No single decision and no consequences; the entries are fixes/behaviours listed by authors with no unified ADR title · ×1
  • No single decision and no consequences; the entries are fixes/behaviours listed by authors with no unified ADR title fastlane/metadata/android/en-US/changelogs/895.txt — Give each an informative title (e.g. "Fix: Water-movement units" or "Better Fog Busting AI") and a Decision section stating what change is made, plus Consequences noting trade-offs
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/896.txt — Convert the list into an ADR: state the problem being solved (e.g. 'AI workers should only remove harmful civ-specific replacements'), document which features were removed/added, and note any trade-offs
D20 · ADR Quality · Context/problem is non-existent; only a bare list of improvements and fixes plus author names appears · ×1
  • Context/problem is non-existent; only a bare list of improvements and fixes plus author names appears fastlane/metadata/android/en-US/changelogs/899.txt — State the real problem being solved (e.g. inaccurate preview for Forest + Lumber Mill edge case) and why each fix matters
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of vague bullet points with no decision or rationale · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of vague bullet points with no decision or rationale fastlane/metadata/android/en-US/changelogs/900.txt — 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
D20 · ADR Quality · Only two short bullet items; no context/problem and no consequences/trade-offs · ×1
  • Only two short bullet items; no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/901.txt — 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
D20 · ADR Quality · All four elements (context/problem, explicit decision, consequences/trade-offs, informative title) are absent; the entries are all patch notes with no narrative · ×1
  • All four elements (context/problem, explicit decision, consequences/trade-offs, informative title) are absent; the entries are all patch notes with no narrative fastlane/metadata/android/en-US/changelogs/903.txt — Replace each entry with a one-paragraph problem statement plus an explicit decision and its consequences. For example: 'Context: 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.'
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/904.txt — Add the problem motivating each listed change and the trade-offs/consequences of the decisions
D20 · ADR Quality · No context/problem statement; the body is a list of resolved ANR errors with no rationale or decision framing · ×1
  • No context/problem statement; the body is a list of resolved ANR errors with no rationale or decision framing fastlane/metadata/android/en-US/changelogs/906.txt — Begin each bullet with a one-line problem (e.g. 'Fix promotions appearing in wartime') and a proposed fix ('Allow promotions to be visible only when they are actually available'), then document consequences such as test cost and any new trade-offs
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/907.txt — State the problem (e.g. autopromotion for automated units is not enforced by default) and the explicit decision (add "Jump To Destination" button for moving units) so consequences/trade-offs follow
D20 · ADR Quality · All four elements are present but the context/problem and consequences/trade-offs sections are missing; only a 'Fix · ×1
  • All four elements are present but the context/problem and consequences/trade-offs sections are missing; only a 'Fix:' line with no problem statement and no trade-off discussion appear in any visible text fastlane/metadata/android/en-US/changelogs/908.txt — Add an explicit Context section explaining why the decision (e.g. 'Civilopedia search is broken for religions') and a Consequences section covering translation quality, performance cost of pillaged tiles, and whether defensive pact UI remains fully localized
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only arbitrary patch notes (unique promotion free, cities get resource list of other cities) appear · ×1
  • No context/problem and no consequences/trade-offs; only arbitrary patch notes (unique promotion free, cities get resource list of other cities) appear fastlane/metadata/android/en-US/changelogs/909.txt — 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)
D20 · ADR Quality · Consequences/trade-offs are absent despite the decision naming a real problem · ×1
  • Consequences/trade-offs are absent despite the decision naming a real problem fastlane/metadata/android/en-US/changelogs/910.txt — Add a Consequences section covering trade-offs such as the cost of manually re-adding missing buildings and how often to check for staleness
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/913.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only arbitrary column/status/fix items appear · ×1
  • No context/problem and no consequences/trade-offs; only arbitrary column/status/fix items appear fastlane/metadata/android/en-US/changelogs/914.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/915.txt — 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
D20 · ADR Quality · Context/problem is thin (only the performance goals and a few modding notes) with no trade-offs; the author's by-line fixes are not decisions but references · ×1
  • Context/problem is thin (only the performance goals and a few modding notes) with no trade-offs; the author's by-line fixes are not decisions but references fastlane/metadata/android/en-US/changelogs/916.txt — Add a Context section explaining why validation/loading speed matters for gameplay and how JSON schemas help modders without breaking existing workflows
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of patch-level fixes with vague authoring notes · ×1
  • No context/problem and no consequences/trade-offs; only a list of patch-level fixes with vague authoring notes fastlane/metadata/android/en-US/changelogs/917.txt — 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.
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of modding fixes with no rationale or impact statement · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of modding fixes with no rationale or impact statement fastlane/metadata/android/en-US/changelogs/920.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are not visible; the body lists only fixes under author names · ×1
  • Context/problem and consequences/trade-offs are not visible; the body lists only fixes under author names fastlane/metadata/android/en-US/changelogs/921.txt — 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
D20 · ADR Quality · Decision is a vague 'Automated units can fortify/set up/other actions' 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 · ×1
  • Decision is a vague 'Automated units can fortify/set up/other actions' 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 fastlane/metadata/android/en-US/changelogs/922.txt — 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.
D20 · ADR Quality · Decision and consequences are present but context/problem is thin; only one concrete decision (allow zero-tech games to be 'before' the Ancient Era) is stated with no trade-offs · ×1
  • Decision and consequences are present but context/problem is thin; only one concrete decision (allow zero-tech games to be 'before' the Ancient Era) is stated with no trade-offs fastlane/metadata/android/en-US/changelogs/923.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only a list of changes is present · ×1
  • Context/problem and consequences/trade-offs are absent; only a list of changes is present fastlane/metadata/android/en-US/changelogs/925.txt — 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
D20 · ADR Quality · Consequences/trade-offs are absent despite a strong context and decision; the body is a list of bug fixes with no trade-off section · ×1
  • Consequences/trade-offs are absent despite a strong context and decision; the body is a list of bug fixes with no trade-off section fastlane/metadata/android/en-US/changelogs/926.txt — 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
D20 · ADR Quality · Context/problem is thin (only "mods with atlases that reference non-existent files will no longer cause crashes" and a "Reorg SpecialistAllocationTable" fix) but the decision "Negative tile damage cannot heal more than max health" is explicit; consequences/trade-offs are not visible before the clip · ×1
  • Context/problem is thin (only "mods with atlases that reference non-existent files will no longer cause crashes" and a "Reorg SpecialistAllocationTable" fix) but the decision "Negative tile damage cannot heal more than max health" is explicit; consequences/trade-offs are not visible before the clip fastlane/metadata/android/en-US/changelogs/927.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/928.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of features and authoring notes are present · ×1
  • No context/problem and no consequences/trade-offs; only a list of features and authoring notes are present fastlane/metadata/android/en-US/changelogs/929.txt — Add the problem motivating each change (e.g. 'unit triggers fail on non-target units') and its consequences (e.g. increased modding complexity, new bug window) for each decision
D20 · ADR Quality · The body is a list of patch-level modding changes and no context/problem or consequences/trade-offs · ×1
  • The body is a list of patch-level modding changes and no context/problem or consequences/trade-offs fastlane/metadata/android/en-US/changelogs/930.txt — 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's new behavior)
D20 · ADR Quality · No context/problem and no consequences/trade-offs for any of the listed changes; only a header with 'Initial scenario/dev console!' and chore lists · ×1
  • No context/problem and no consequences/trade-offs for any of the listed changes; only a header with 'Initial scenario/dev console!' and chore lists fastlane/metadata/android/en-US/changelogs/931.txt — State each change's 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a vague decision ('Cities you haven't bombarded with will auto-bombard at turn end') plus authoring notes · ×1
  • No context/problem and no consequences/trade-offs; only a vague decision ('Cities you haven't bombarded with will auto-bombard at turn end') plus authoring notes fastlane/metadata/android/en-US/changelogs/938.txt — State the problem (e.g. imbalance from untargeted bombardments) and its consequence (overpowered attackers), then document trade-offs of the auto-bombard mechanic
D20 · ADR Quality · Context/problem and consequences are absent; only task lists (fix crash, add unique) appear · ×1
  • Context/problem and consequences are absent; only task lists (fix crash, add unique) appear fastlane/metadata/android/en-US/changelogs/939.txt — State the problem each listed change addresses (e.g. trade notification crash, duplicate unit rename popup) and its consequences/trade-offs
D20 · ADR Quality · Decision is a list of unrelated tasks with no context/problem and no consequences; the title is a placeholder · ×1
  • Decision is a list of unrelated tasks with no context/problem and no consequences; the title is a placeholder fastlane/metadata/android/en-US/changelogs/941.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/942.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/943.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/944.txt — 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
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; each entry is a one-line task with no rationale or impact statement · ×1
  • Context/problem and consequences/trade-offs are absent; each entry is a one-line task with no rationale or impact statement fastlane/metadata/android/en-US/changelogs/945.txt — For each listed change (key bindings fix, coast spread algorithm, road automation) add the problem it addresses and its trade-off
D20 · ADR Quality · Decision and consequences are present but the context/problem is thin (only "Fixed tech dependency related crash" and a single "Unit by default not selected on turn start" with no rationale) plus the body ends in an unverifiable list of patch notes without any trade-offs · ×1
  • Decision and consequences are present but the context/problem is thin (only "Fixed tech dependency related crash" and a single "Unit by default not selected on turn start" with no rationale) plus the body ends in an unverifiable list of patch notes without any trade-offs fastlane/metadata/android/en-US/changelogs/947.txt — 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
D20 · ADR Quality · Title is a joke ('Added experimental scenarios!') and the body is a jumbled list of unrelated fixes with no context/problem and no consequences; 'immersion mode' fix is a non-idiomatic placeholder · ×1
  • Title is a joke ('Added experimental scenarios!') and the body is a jumbled list of unrelated fixes with no context/problem and no consequences; 'immersion mode' fix is a non-idiomatic placeholder fastlane/metadata/android/en-US/changelogs/948.txt — Rename to something meaningful (e.g. "Android status bar disappears in immersion mode") and reorganize into real Context/Problem, Decision, Consequences sections
D20 · ADR Quality · Decision and consequences are present but the context/problem is thin (only 'Trigger 'capture city' as a unit trigger' and two worker AI changes) with no trade-offs · ×1
  • Decision and consequences are present but the context/problem is thin (only 'Trigger 'capture city' as a unit trigger' and two worker AI changes) with no trade-offs fastlane/metadata/android/en-US/changelogs/949.txt — 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
D20 · ADR Quality · Context/problem is thin ("Updating server URL allows checking connection immediately") and the decision "New Citizen Focus Options - by Itanasi" with its two fixes is a feature list rather than an explicit decision statement; consequences/trade-offs are not present · ×1
  • Context/problem is thin ("Updating server URL allows checking connection immediately") and the decision "New Citizen Focus Options - by Itanasi" with its two fixes is a feature list rather than an explicit decision statement; consequences/trade-offs are not present fastlane/metadata/android/en-US/changelogs/950.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only a list of fixes is visible · ×1
  • No context/problem and no consequences/trade-offs; only a list of fixes is visible fastlane/metadata/android/en-US/changelogs/951.txt — Add a Context section explaining the problem (e.g. rare pillage crashes, vector-smoothing need) and a Consequences section noting any new trade-offs
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/952.txt — For each listed action (e.g. 'Add unique to allow for generalized great generals'), add a sentence explaining the context (why matching names matters, e.g. gameplay balance) and the consequences of the change
D20 · ADR Quality · Context/problem is thin ("Console · ×1
  • Context/problem is thin ("Console: autocomplete ALL THE THINGS!" with no problem statement) and the four listed changes are feature patches rather than a unified decision; consequences/trade-offs are absent fastlane/metadata/android/en-US/changelogs/953.txt — 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
D20 · ADR Quality · This is a list of short commit/PR titles with no context/problem and no explicit decision; the body is empty · ×1
  • This is a list of short commit/PR titles with no context/problem and no explicit decision; the body is empty fastlane/metadata/android/en-US/changelogs/956.txt — 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.
D20 · ADR Quality · Context/problem and consequences/trade-offs are absent; only the decision lines appear ("Cannot be traded" unique accepts Civ conditionals) with no rationale or impact · ×1
  • Context/problem and consequences/trade-offs are absent; only the decision lines appear ("Cannot be traded" unique accepts Civ conditionals) with no rationale or impact fastlane/metadata/android/en-US/changelogs/957.txt — 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
D20 · ADR Quality · Context/problem is thin; only the decision and two patch notes are present · ×1
  • Context/problem is thin; only the decision and two patch notes are present fastlane/metadata/android/en-US/changelogs/958.txt — 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
D20 · ADR Quality · Context/problem and consequences are absent; only a vague 'user option' title plus two unrelated patches (road priority rework, spectators seeing diplomacy screen) appear · ×1
  • Context/problem and consequences are absent; only a vague 'user option' title plus two unrelated patches (road priority rework, spectators seeing diplomacy screen) appear fastlane/metadata/android/en-US/changelogs/959.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/960.txt — Add a Context section explaining why each fix matters and a Consequences section noting any operational or design costs
D20 · ADR Quality · No context/problem statement; only a list of features added and no consequences/trade-offs · ×1
  • No context/problem statement; only a list of features added and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/961.txt — Add the problem motivating each feature (e.g. 'Players want to know when a modded unit is unavailable') and document any trade-offs such as increased complexity or resource cost
D20 · ADR Quality · Decision 'unify unit and civ triggers' is present but the context/problem (why unify triggers) and consequences/trade-offs are not visible in the excerpt · ×1
  • Decision 'unify unit and civ triggers' is present but the context/problem (why unify triggers) and consequences/trade-offs are not visible in the excerpt fastlane/metadata/android/en-US/changelogs/963.txt — 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
D20 · ADR Quality · Decision is a single vague 'copy to clipboard' button on map errors; no context/problem and no consequences/trade-offs · ×1
  • Decision is a single vague 'copy to clipboard' button on map errors; no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/964.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/965.txt — 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
D20 · ADR Quality · The decision "Korean science boost only applies for buildings *in capital*" is a rule with no context (why the filter must be city-based) and no consequences; the body clips mid-sentence · ×1
  • The decision "Korean science boost only applies for buildings *in capital*" is a rule with no context (why the filter must be city-based) and no consequences; the body clips mid-sentence fastlane/metadata/android/en-US/changelogs/966.txt — 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)}
D20 · ADR Quality · Decision is a single line ('Allow lower-case "all" for all filters') with no context/problem and no consequences/trade-offs · ×1
  • Decision is a single line ('Allow lower-case "all" for all filters') with no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/968.txt — Add the problem (e.g. 'the filter "All" was typed as lowercase and did not match intended intent') so readers know why it matters, and document any trade-offs such as false-positive behavior from accidental case
D20 · ADR Quality · Decision is a single sentence ('AutoAssign Population with Food Converts to Production') that names the change but gives no context/problem and no consequences/trade-offs · ×1
  • Decision is a single sentence ('AutoAssign Population with Food Converts to Production') that names the change but gives no context/problem and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/969.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; the body is a list of feature requests with no decision or rationale · ×1
  • No context/problem and no consequences/trade-offs; the body is a list of feature requests with no decision or rationale fastlane/metadata/android/en-US/changelogs/971.txt — 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)
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/972.txt — Add the problem motivating AI for land-based nukes (e.g. balancing against air/underwater) and note any trade-offs such as increased complexity
D20 · ADR Quality · No context/problem and no explicit decision; the body is a list of features/fixes with no rationale or trade-offs · ×1
  • No context/problem and no explicit decision; the body is a list of features/fixes with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/973.txt — 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
D20 · ADR Quality · 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 "Changed tech trigger to accept tech filters" is a vague placeholder · ×1
  • 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 "Changed tech trigger to accept tech filters" is a vague placeholder fastlane/metadata/android/en-US/changelogs/974.txt — 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
D20 · ADR Quality · Context/problem and consequences are absent; the body is a list of feature requests with no rationale or trade-offs · ×1
  • Context/problem and consequences are absent; the body is a list of feature requests with no rationale or trade-offs fastlane/metadata/android/en-US/changelogs/975.txt — 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
D20 · ADR Quality · Title 'Added Events, moddable choices for triggering uniques!' is an empty banner; no context/problem and no consequences/trade-offs are stated · ×1
  • Title 'Added Events, moddable choices for triggering uniques!' is an empty banner; no context/problem and no consequences/trade-offs are stated fastlane/metadata/android/en-US/changelogs/976.txt — Add a Context section explaining the problem (e.g. escorting conflict) and a Consequences section on trade-offs such as balancing new triggers
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/978.txt — 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
D20 · ADR Quality · The four elements are present but the context/problem is only a one-line summary of each fix (e.g. "Fixed crash entering trade from overview on other player's turn") and no consequences/trade-offs for each decision · ×1
  • The four elements are present but the context/problem is only a one-line summary of each fix (e.g. "Fixed crash entering trade from overview on other player's turn") and no consequences/trade-offs for each decision fastlane/metadata/android/en-US/changelogs/979.txt — Add a Context section for each fix stating what it fixes and why, then a Consequences section noting any new risks or workarounds
D20 · ADR Quality · No context/problem and no consequences; only two short patch notes (multi filter support for BuildingFilter, fixed ConditionalBuilding error message) plus a 'Better tundra color' by Caballero-Arepa appear in the body · ×1
  • No context/problem and no consequences; only two short patch notes (multi filter support for BuildingFilter, fixed ConditionalBuilding error message) plus a 'Better tundra color' by Caballero-Arepa appear in the body fastlane/metadata/android/en-US/changelogs/980.txt — 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.
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/982.txt — 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
D20 · ADR Quality · The body is a list of patch-level change proposals with no context/problem and no consequences/trade-offs for each; the title 'Hide battle table after attack if we can move, but not attack again' is informative but the rest are uncontexted action items · ×1
  • The body is a list of patch-level change proposals with no context/problem and no consequences/trade-offs for each; the title 'Hide battle table after attack if we can move, but not attack again' is informative but the rest are uncontexted action items fastlane/metadata/android/en-US/changelogs/983.txt — 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
D20 · ADR Quality · Context/problem and consequences are absent; the body is a list of arbitrary game mechanics with no narrative framing · ×1
  • Context/problem and consequences are absent; the body is a list of arbitrary game mechanics with no narrative framing fastlane/metadata/android/en-US/changelogs/984.txt — Describe what performance improvement this addresses (e.g. reduced frame drops or smoother diplomacy) and note any trade-offs such as balancing cost
D20 · ADR Quality · Decision is a vague "Resolved edge-case crashes" and the body lists only work/fix tickets without context/problem or consequences · ×1
  • Decision is a vague "Resolved edge-case crashes" and the body lists only work/fix tickets without context/problem or consequences fastlane/metadata/android/en-US/changelogs/985.txt — 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
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/986.txt — 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
D20 · ADR Quality · No context/problem and no consequences/trade-offs; only two features listed by each author · ×1
  • No context/problem and no consequences/trade-offs; only two features listed by each author fastlane/metadata/android/en-US/changelogs/987.txt — 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
D20 · ADR Quality · Title is a vague placeholder ('989') with no problem statement and the body contains only two unrelated commands ("Do not preselect custom map option and defer map file loading"; "Fix Puppets building wonders - By SeventhM") · ×1
  • Title is a vague placeholder ('989') with no problem statement and the body contains only two unrelated commands ("Do not preselect custom map option and defer map file loading"; "Fix Puppets building wonders - By SeventhM") fastlane/metadata/android/en-US/changelogs/989.txt — Replace the placeholder title with an actual context/problem, state the explicit decision, and document consequences/trade-offs
D20 · ADR Quality · Decision and consequences are present but the context/problem is thin (e.g. "Autoplay can run on a different thread" as a decision with no rationale) and trade-offs fall below the visible scope · ×1
  • Decision and consequences are present but the context/problem is thin (e.g. "Autoplay can run on a different thread" as a decision with no rationale) and trade-offs fall below the visible scope fastlane/metadata/android/en-US/changelogs/990.txt — 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
D20 · ADR Quality · The visible text is a mix of resolved tickets and a fix note with no context/problem statement for the original decision · ×1
  • The visible text is a mix of resolved tickets and a fix note with no context/problem statement for the original decision fastlane/metadata/android/en-US/changelogs/992.txt — 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
D20 · ADR Quality · No consequences/trade-offs section; the body lists features fixed and added but does not address any negative impact or alternative trade-off · ×1
  • No consequences/trade-offs section; the body lists features fixed and added but does not address any negative impact or alternative trade-off fastlane/metadata/android/en-US/changelogs/993.txt — 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 "Open terrain" is fixed
D20 · ADR Quality · 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 · ×1
  • 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 fastlane/metadata/android/en-US/changelogs/994.txt — 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
D20 · ADR Quality · No context/problem statement (why conditionals are needed) and no consequences/trade-offs · ×1
  • No context/problem statement (why conditionals are needed) and no consequences/trade-offs fastlane/metadata/android/en-US/changelogs/995.txt — 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
D20 · ADR Quality · No context/problem statement; each entry is a feature/todo (espionage UI, election rigging, tutorial, wiki link) with no rationale or problem framing · ×1
  • No context/problem statement; each entry is a feature/todo (espionage UI, election rigging, tutorial, wiki link) with no rationale or problem framing fastlane/metadata/android/en-US/changelogs/996.txt — Add a Context section explaining why these features matter and the problems they solve
D20 · ADR Quality · Decision is a vague 'no longer pillage' with no context and consequences; the listed console changes (tile setowner, civ removepolicy) are not explained in body · ×1
  • Decision is a vague 'no longer pillage' with no context and consequences; the listed console changes (tile setowner, civ removepolicy) are not explained in body fastlane/metadata/android/en-US/changelogs/997.txt — 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
D20 · ADR Quality · Consequences/trade-offs are absent despite a strong decision (forbidding capital city indicators entirely) · ×1
  • Consequences/trade-offs are absent despite a strong decision (forbidding capital city indicators entirely) fastlane/metadata/android/en-US/changelogs/998.txt — 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
D36 · Supply-chain Provenance & Signing · Unpinned build actions · ×1
  • Unpinned build actions — CI references GitHub Actions by a floating ref (@main / @tag) rather than a pinned commit SHA, weakening build integrity.
D4 · Code Duplication · Duplicated block (48 lines × 3) · ×1
  • Duplicated block (48 lines × 3) core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:701 — 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
D4 · Code Duplication · Duplicated block (22 lines × 2) · ×1
  • Duplicated block (22 lines × 2) core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:255 — core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:255-276 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:343-364
D4 · Code Duplication · Duplicated block (21 lines × 2) · ×1
  • Duplicated block (21 lines × 2) core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditSubTabs.kt:142 — core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditSubTabs.kt:142-162 | core/src/com/unciv/ui/screens/mapeditorscreen/tabs/MapEditorEditSubTabs.kt:196-216
D4 · Code Duplication · Duplicated block (18 lines × 2) · ×1
  • Duplicated block (18 lines × 2) core/src/com/unciv/logic/map/MapPathing.kt:89 — core/src/com/unciv/logic/map/MapPathing.kt:89-105 | core/src/com/unciv/logic/map/MapPathing.kt:123-140
D4 · Code Duplication · Duplicated block (17 lines × 2) · ×1
  • Duplicated block (17 lines × 2) core/src/com/unciv/logic/map/PathingMap.kt:448 — core/src/com/unciv/logic/map/PathingMap.kt:448-460 | core/src/com/unciv/logic/map/PathingMap.kt:464-480
D4 · Code Duplication · Duplicated block (15 lines × 2) · ×1
  • Duplicated block (15 lines × 2) core/src/com/unciv/ui/screens/mainmenuscreen/EasterEggRulesets.kt:85 — core/src/com/unciv/ui/screens/mainmenuscreen/EasterEggRulesets.kt:85-99 | core/src/com/unciv/ui/screens/mainmenuscreen/EasterEggRulesets.kt:102-116
D4 · Code Duplication · Duplicated block (14 lines × 2) · ×1
  • Duplicated block (14 lines × 2) core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:862 — core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:862-874 | core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:881-894
D4 · Code Duplication · Duplicated block (13 lines × 2) · ×1
  • Duplicated block (13 lines × 2) core/src/com/unciv/logic/automation/civilization/DeclareWarTargetAutomation.kt:42 — core/src/com/unciv/logic/automation/civilization/DeclareWarTargetAutomation.kt:42-54 | core/src/com/unciv/logic/automation/civilization/DeclareWarTargetAutomation.kt:71-82
D4 · Code Duplication · Duplicated block (12 lines × 2) · ×1
  • Duplicated block (12 lines × 2) core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:96 — core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:96-107 | core/src/com/unciv/logic/multiplayer/apiv2/EndpointImplementations.kt:144-155
D4 · Code Duplication · Duplicated block (9 lines × 3) · ×1
  • Duplicated block (9 lines × 3) core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt:181 — 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
D4 · Code Duplication · Duplicated block (8 lines × 3) · ×1
  • Duplicated block (8 lines × 3) core/src/com/unciv/logic/automation/civilization/ReligionAutomation.kt:101 — 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
D8 · Code Coverage · Coverage not measured · ×1
  • Coverage not measured — test suite did not build — Coverage NOT MEASURED: the repo's 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.
Recommendation — 6 finding(s)
D11 · Test Reliability · Test reliability not included · ×1
  • Test reliability not included — No test projects found, so reliability couldn't be assessed.
D28 · Secrets (history) · Rotate the exposed credentials · ×1
  • Rotate the exposed credentials — git history can't be un-committed — Some of these secrets are in git HISTORY: deleting the file does not remove them (the commit persists on every clone, fork and backup). The remediation is to ROTATE each historically-exposed credential and treat it as compromised — not to delete the file. Rewriting history is disruptive and unreliable across existing forks. (Working-tree-only secrets — no commit — can instead be removed from the file and moved to a secret store.)
D31 · IaC & Container Security · Low IaC · ×1
  • Low IaC: DS-0026 Dockerfile — No HEALTHCHECK defined
D36 · Supply-chain Provenance & Signing · No build provenance · ×1
  • No build provenance — No SLSA provenance generation or build attestation found in CI (e.g. slsa-github-generator, actions/attest-build-provenance).
D36 · Supply-chain Provenance & Signing · No SBOM · ×1
  • No SBOM — No SBOM generation or committed SBOM found (e.g. syft / anchore/sbom-action / *.spdx.json / *.cdx.json).
D9 · Test Distribution · No tests found · ×1
  • No tests found — No test projects found in the repository.
Info — 1 finding(s)
D22 · Internal API Consistency · No exposed public API · ×1
  • No exposed public API — No intentionally-exposed types (IsPackable or .Contracts) to evaluate.

Appendix B — Reproduction & audit trail

Every external tool invocation behind a deep-scan dimension — the tool, its captured version, the exact command, how many findings it yielded, and a link to the retained raw output. To reproduce any finding: check out the same commit and run the command shown (repo-relative — never an absolute scratch path). The complete raw scanner output is retained verbatim under artifacts/raw/ (indexed in artifacts/raw/index.json); per-invocation exit codes and wall-clock durations are in sidecar.json — kept out of this table so the rendered report stays byte-identical across runs of the same commit.

DimensionToolVersionCommandFindingsRaw output
D28 · Secrets (history)gitleaksgitleaks detect --no-banner --report-format json --report-path /dev/stdout --exit-code 0 --source .1artifacts/raw/gitleaks-history.json
D29 · Static Analysis (SAST)semgrepsemgrep --config /opt/semgrep-rules/security-audit.yml --config /opt/semgrep-rules/owasp-top-ten.yml --json --quiet --timeout 0 --metrics off .76artifacts/raw/semgrep.json
D30 · Dependency Vulnerabilitiesdotnet (no .NET solution)dotnet (no .NET solution): not present in this environment0
D31 · IaC & Container Securitytrivytrivy config --format json --quiet .4artifacts/raw/trivy-config.json
D32 · Data Compliance (PII/GDPR)semgrepsemgrep: not applicable — No PII/GDPR ruleset is bundled (the public p/gdpr semgrep pack was retired) — data compliance is not assessed in this scan.0
D33 · JS/npm Dependency Vulnerabilitiestrivytrivy: not applicable — No JS/npm manifest or lockfile found outside bin/obj (package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); no JS dependencies to scan.0
D37 · Vulnerability-disclosure Policydisclosuredisclosure: not applicable — No vulnerability-disclosure policy file found (SECURITY.md, .github/SECURITY.md, docs/SECURITY.md, .well-known/security.txt). A coordinated-disclosure policy may live off-repo, so this is not evidenced rather than failed.0
D38 · OSV Dependency Vulnerabilitiesosv-scannerosv-scanner: not applicable — No JS/npm lockfile found outside bin/obj (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb); nothing for OSV to scan.0

Run 019fd91d-f0a3-7546-903c-2baddde10900 · every finding is also locatable in findings.md, and the complete scoring record (with exit codes + durations) in sidecar.json.

Downloadable artifacts

Machine-readable and reproducible from this commit + frozen rubric — drop them straight into a contract appendix, a CRA dossier, or a downstream SCA / VEX tool.

⬇ Findings, MITRE CWE-tagged .sarif⬇ Health changelog .md