arch — repository architecture

SkillDev tools

Lets your agent answer questions about the FlexPrice repo structure, layers, dependencies, and code flows.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the arch — repository architecture skill

About this capability

FlexPrice repo architecture — docs/ layering, deps, hotspots, flows, Graphify. Say arch, repo architecture, FLEXPRICE structure, onboarding codebase.

What this skill tells your AI

The instructions your AI receives, as published by flexprice/flexprice in .cursor/skills/arch/SKILL.md and read by ahel’s review.

Use when navigating cmd/, internal/, ent/ (billing, metering, Temporal, Kafka, integrations).

Other repos: repo-architecture-intelligence (~/.cursor/skills/repo-architecture-intelligence/SKILL.md).

Sibling skills: README (apitest, devenv, godev, openapi, pr, gh, compose).

Canonical documentation map

DocPurpose
docs/REPO_MAP.mdDirectory census, deployment modes, major systems
docs/ARCHITECTURE.mdPrinciples, infra choices, layering, conventions
docs/DEPENDENCY_GRAPH.mdFan-in/out, messaging DAG, coupling notes
docs/HOTSPOTS.mdLarge files & structural risks
docs/FLOWS/*.mdEnd-to-end narratives for critical paths

Rule: Prefer these artifacts over improvised mental models. If docs drift from code during your change, patch the relevant markdown.

How to analyze architecture quickly

  1. Identify deployment surfacecmd/server/main.go + deployment.mode. Determine whether edits affect API-only paths, Kafka consumers, or Temporal workers (registerRouterHandlers & startTemporalWorker branches).
  2. Locate the bounded context — map feature → domain package (internal/domain/<ctx>) → repository impl (repository/ent vs repository/clickhouse) → service (internal/ee/service/<file>) → handler (internal/api/v1).
  3. Check async edges — list Kafka topics touched (search config keys under internal/config) and Temporal workflow names (internal/temporal/workflows).
  4. Assess coupling — if you need half of ServiceParams, consider narrowing new code’s dependencies deliberately.

How to reason about dependencies

  • Follow canonical direction: handlers → services → (domain interfaces + repos/integrations) → storage/IO (see diagram in docs/DEPENDENCY_GRAPH.md).
  • Watch logical cycles: Temporal registration reconstructs some services independently of Fx (internal/temporal/registration.go).
  • Question globals: prefer replacing new uses of GetGlobalTemporalService with injected interfaces when editing those call sites safely.

How to persist repository memory

After meaningful structural edits:

Change typeUpdate
New package / major subsystemREPO_MAP.md (+ ARCHITECTURE.md boundaries if philosophical)
New topic/consumer or couplingDEPENDENCY_GRAPH.md + YAML pointer
Emerging risk/god file growthHOTSPOTS.md entry
Flow behavior changeRelevant docs/FLOWS/<name>.md

Treat docs as durable context for future automation and onboarding.

How to refactor safely

  1. Freeze scope — isolate one bounded context or one pipeline stage.
  2. Add or extend characterization tests closest to seams you cut (heavy services deserve targeted tests despite size).
  3. Avoid splitting multi-thousand-line files blindly — extract cohesive types/helpers with stable interfaces (subscription.go, invoice.go, billing.go).
  4. For schema changes — always make generate-ent + deliberate migration rollout; annotate operational risk if backfill jobs required.
  5. For messaging — verify consumer group uniqueness and DLQ configuration when adjusting handler semantics (internal/pubsub/router).

Anti-patterns to flag during review

  • Domain importing repositories or Gin types.
  • Handlers querying Ent directly.
  • Silent topic renames without consumer coordination.
  • New global singletons hiding dependencies.

Signals

GitHub stars
5k
Forks
495
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
arch
Source
github.com/flexprice/flexprice