Files
WeHub Mirror 2bba424313
Integration Tests - PostgreSQL + Elasticsearch + Redis / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Detect Changes (push) Has been cancelled
Java Checkstyle / java-checkstyle (push) Has been cancelled
Maven Collate Tests / maven-collate-ci (push) Has been cancelled
OpenMetadata Service Unit Tests / Detect Changes (push) Has been cancelled
Publish Package to Maven Central Repository / publish-maven-packages (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Build Integration Test Runtime (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Integration Test Lane (global-state) (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Integration Test Lane (multi-node) (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Integration Test Lane (parallel) (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Integration Test Lane (retry-queue) (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / ${{ github.event_name == 'pull_request_target' && github.event.action == 'labeled' && github.event.label.name != 'safe to test' && 'integration-tests-postgres-elasticsearch-redis (ignored label)' || 'integration-tests-postgres-elasticsearch-redis' }} (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Build Integration Test Runtime (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Integration Test Lane (global-state) (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / Build Integration Test Runtime (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / Integration Test Lane (global-state) (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / Integration Test Lane (multi-node) (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / Integration Test Lane (parallel) (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / Integration Test Lane (retry-queue) (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / ${{ github.event_name == 'pull_request_target' && github.event.action == 'labeled' && github.event.label.name != 'safe to test' && 'integration-tests-mysql-elasticsearch (ignored label)' || 'integration-tests-mysql-elasticsearch' }} (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Integration Test Lane (parallel) (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Integration Test Lane (retry-queue) (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / ${{ github.event_name == 'pull_request_target' && github.event.action == 'labeled' && github.event.label.name != 'safe to test' && 'integration-tests-postgres-opensearch (ignored label)' || 'integration-tests-postgres-opensearch' }} (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests (push) Has been cancelled
OpenMetadata Service Unit Tests / k8s_operator-unit-tests (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests-status (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Integration Test Lane (multi-node) (push) Has been cancelled
WeHub snapshot of bae3e29f60050c5970ef31185b76f560fdee41b7
2026-08-07 16:54:16 +08:00

6.9 KiB
Raw Permalink Blame History

Tech Debt Ledger

Findings from a one-time repository audit worth fixing. Ordered by impact ÷ size (biggest payoff per unit of effort first) — so small fixes that unblock a golden principle or close a hazard rank above large architectural refactors.

Agent? = can an agent fix it unsupervised (mechanical, verifiable) vs. supervised (needs judgment/review) vs. no (human/native-speaker/architectural).

Tier 1 — Quick wins (high impact, tiny size) — do first

# Finding Location Why it matters Size Agent?
1 1 file with a bare except: ingestion/.../database/hive/custom_hive_connection.py:181 The only blocker to gating ruff E722 (Golden Principle #5) 1 line unsupervised
2 3 hand-written UI files missing the Apache header LineageTable.interface.ts, mocks/rests/applicationAPI.mock.ts, EntityLineage/.../LineageLayers.interface.ts Trips the license gate; yarn license-header-fix fixes it trivial unsupervised
3 21 Java files with wildcard imports attachments/AzureAssetService.java (3), PersonaResource.java, StoredProcedureResource.java, … Unblocks making no-wildcard blocking; violations are in files edited this month (will regress) ~21 files, mechanical unsupervised
4 POM hygiene: duplicate deps + declared-order inversion openmetadata-spec/pom.xml (declares common twice), openmetadata-dist/pom.xml (declares openmetadata-ui twice); <modules> lists spec before its dep common Minor, but spec→common contradicts the "foundation is first" reading of the reactor list tiny unsupervised
5 Stale MCP namespace in a skill .claude/skills/playwright-validation/SKILL.md:59,63,67,68mcp__playwright__* (real server is mcp__playwright-test__*) The only reference that fails at tool-call time, not just read time 4 lines unsupervised
6 AGENTS.md still carries contradictions corrected in CLAUDE.md AGENTS.md:12 (Webpack→Vite), :105/:223 (use Ant Design), :13 (Python 3.10-3.12) CLAUDE.md was fixed; AGENTS.md (Codex's entry doc) still misleads small doc edit unsupervised
7 openmetadata-shaded-deps has no "do not edit" marker module has only POMs + a build artifact; not in any instruction doc An agent "upgrading" it breaks the es.*/os.* relocation → cascading compile failures 1 rule/note unsupervised

Tier 2 — Medium (real value, bounded but not trivial)

# Finding Location Why it matters Size Agent?
8 No secret scanner + no key-extension gitignore CI (.github/workflows), .gitignore Nothing catches a committed secret; fixture dirs are Snyk-excluded — an agent could commit a real key undetected medium supervised (workflow edit needs auth)
9 Migration append-only is unenforced bootstrap/sql/migrations/**; no CI check, no runtime checksum-abort Editing an applied migration silently no-ops on existing DBs / drifts on fresh installs, with no error medium supervised (workflow edit needs auth)
10 CodeQL runs on workflow_dispatch only .github/workflows/codeql.yml SAST does not run on PRs — a whole class of checks never gates contributions small config supervised (workflow edit needs auth)
11 ~86 broad-excepts that silently swallow ingestion/src/metadata/** (the ~5.5% with no log/re-raise) The genuinely risky subset of the (sanctioned) broad-except idiom ~86 sites, per-site judgment supervised
12 mssql ↔ azuresql circular sibling import database/mssql/connection.py:44database/azuresql/connection.py The one connector import cycle; the rest are clean (timescale→postgres is legit subclassing) small supervised
13 any outside generated/ 461 files (top-5 are generated) Erodes type safety; blocked from becoming a blocking lint until generated/ is excluded and re-measured large but incremental supervised
14 basedpyright baseline of 11,927 findings .basedpyright/baseline.json (926 files) The ratchet holds (no new errors) but the debt is large; each burn-down shrinks it very large, incremental supervised

Tier 3 — Large / architectural (high impact, large size) — plan, don't rush

# Finding Location Why it matters Size Agent?
15 Java package cycles: resources ↔ jdbi3 (130/99), 18/21 pairs cyclic openmetadata-service/src/main/java/org/openmetadata/service/** The repo's own #1 principle (acyclic layering) is violated inside the core backend; much is misplaced value types (resources.feeds.MessageParser.EntityLink) that belong in a shared package large refactor no (architectural)
16 Frontend components ↔ utils cycle (130-module SCC) openmetadata-ui/.../src (28 cyclic SCCs, 50 direct 2-cycles) No import-boundary tooling; barrel/*.interface.ts mutual references + utils importing components large no (architectural)
17 Generated-type leakage: 1,292 direct importers vs 93 in rest/ openmetadata-ui/.../src/components,pages No anti-corruption layer; the stricter form of Golden Principle #3 sits at ~7% large no (architectural)
18 Ant Design migration stalled 864 UI files (18.3%), 68.5% edited ≤90d The stated "use ui-core-components" direction isn't progressing; can't be a blocking rule until it does very large, ongoing no (program of work)
19 ~250396 untranslated English strings per non-en locale × 19 openmetadata-ui/.../src/locale/languages/*.json Reviewable defect CLAUDE.md flags; CI checks key-sync, not translation large no (native speakers)
20 py-tests required check ≈ 69 min work-median CI The dominant PR wall-clock (ranked #1 by cost in the CI run-history analysis); a candidate for sharding/scoping large CI work supervised
21 playwright-postgresql-e2e 82% pass (least-reliable required check) CI The required check most likely to fail for non-code reasons; re-run flakiness is ~0-measurable (fixed by new commits), so it hides as a low pass rate investigation no

Conflicts surfaced (not resolved here)

  • "Lint-clean" ≠ "well-layered." openmetadata-service is 100% on spotless/logging and ~99% on wildcard imports, yet is the most internally tangled module (18/21 cyclic package pairs). The two signals disagree about the module's health — see quality.md.
  • Generated is model citizen and worst offender at once. #3 (pure sink, 100%) and #17 (leakage, ~7%) are about the same generated/ tree from opposite directions. Fixing #17 is a large refactor; #3 is already true. Don't let "#3 holds" imply the generated boundary is clean.
  • Broad-except: Python idiom vs Java ban. #11 (fix silent swallows) must not become "ban broad except" — that idiom is 75.5% of Python handlers, by design.