docs: ensure newline before lists across docs for MkDocs rendering
All checks were successful
CI / Test (pull_request) Successful in 27s
CI / Lint (pull_request) Successful in 20s
CI / Build (pull_request) Successful in 16s
CI / Format Check (pull_request) Successful in 2s

This commit is contained in:
2025-11-06 10:56:50 +01:00
parent a1586cb302
commit b4b918cba8
23 changed files with 33 additions and 1 deletions

View File

@@ -5,6 +5,7 @@ Superseded by [ADR-0034: Go Version Upgrade to 1.25.3](./0034-go-version-upgrade
## Context ## Context
Go releases new versions regularly with new features, performance improvements, and security fixes. We need to choose a Go version that: Go releases new versions regularly with new features, performance improvements, and security fixes. We need to choose a Go version that:
- Provides necessary features for the platform - Provides necessary features for the platform
- Has good ecosystem support - Has good ecosystem support
- Is stable and production-ready - Is stable and production-ready

View File

@@ -5,6 +5,7 @@ Accepted
## Context ## Context
The platform follows a microservices architecture where each service has its own database connection. The ORM/library must: The platform follows a microservices architecture where each service has its own database connection. The ORM/library must:
- Support PostgreSQL (primary database) - Support PostgreSQL (primary database)
- Provide type-safe query building - Provide type-safe query building
- Support code generation (reduces boilerplate) - Support code generation (reduces boilerplate)

View File

@@ -10,6 +10,7 @@ The platform needs to scale independently, support team autonomy, and enable fle
Design the platform as **microservices architecture from day one**: Design the platform as **microservices architecture from day one**:
1. **Core Services**: Core business services are separate microservices: 1. **Core Services**: Core business services are separate microservices:
- **Auth Service** (`cmd/auth-service/`): JWT token generation/validation - **Auth Service** (`cmd/auth-service/`): JWT token generation/validation
- **Identity Service** (`cmd/identity-service/`): User CRUD, password management - **Identity Service** (`cmd/identity-service/`): User CRUD, password management
- **Authz Service** (`cmd/authz-service/`): Permission resolution, authorization - **Authz Service** (`cmd/authz-service/`): Permission resolution, authorization

View File

@@ -66,6 +66,7 @@ All communication goes through service clients - no direct in-process calls even
## Development Mode ## Development Mode
For local development, services run in the same repository but as separate processes: For local development, services run in the same repository but as separate processes:
- Each service has its own entry point (`cmd/{service}/`) - Each service has its own entry point (`cmd/{service}/`)
- Services communicate via service clients (gRPC or HTTP) - no direct in-process calls - Services communicate via service clients (gRPC or HTTP) - no direct in-process calls
- Docker Compose orchestrates all services - Docker Compose orchestrates all services

View File

@@ -10,6 +10,7 @@ The platform follows a microservices architecture where each service (Auth, Iden
- **Option 2**: Separate repositories (each service in its own repository) - **Option 2**: Separate repositories (each service in its own repository)
The decision affects: The decision affects:
- Code sharing and dependencies - Code sharing and dependencies
- Development workflow - Development workflow
- CI/CD complexity - CI/CD complexity

View File

@@ -5,6 +5,7 @@ Accepted
## Context ## Context
The platform follows a microservices architecture where each service is independently deployable. We need a central entry point that handles: The platform follows a microservices architecture where each service is independently deployable. We need a central entry point that handles:
- Request routing to backend services - Request routing to backend services
- Authentication and authorization at the edge - Authentication and authorization at the edge
- Rate limiting and throttling - Rate limiting and throttling

View File

@@ -5,6 +5,7 @@ Accepted
## Context ## Context
The platform follows a microservices architecture where services need to discover and communicate with each other. We need a service discovery mechanism that: The platform follows a microservices architecture where services need to discover and communicate with each other. We need a service discovery mechanism that:
- Enables services to find each other dynamically - Enables services to find each other dynamically
- Supports health checking and automatic deregistration - Supports health checking and automatic deregistration
- Works in both development (Docker Compose) and production (Kubernetes) environments - Works in both development (Docker Compose) and production (Kubernetes) environments

View File

@@ -5,6 +5,7 @@ Accepted
## Context ## Context
ADR-0002 established Go 1.24.3 as the minimum required version. Since then: ADR-0002 established Go 1.24.3 as the minimum required version. Since then:
- Go 1.25.3 has been released with new features, performance improvements, and security fixes - Go 1.25.3 has been released with new features, performance improvements, and security fixes
- The project requires access to newer language features and tooling improvements - The project requires access to newer language features and tooling improvements
- Dependencies may benefit from Go 1.25.3 optimizations - Dependencies may benefit from Go 1.25.3 optimizations

View File

@@ -5,6 +5,7 @@ This directory contains Architecture Decision Records (ADRs) for the Go Platform
## What are ADRs? ## What are ADRs?
ADRs document important architectural decisions made during the project. They help: ADRs document important architectural decisions made during the project. They help:
- Track why decisions were made - Track why decisions were made
- Understand the context and constraints - Understand the context and constraints
- Review decisions when requirements change - Review decisions when requirements change
@@ -13,6 +14,7 @@ ADRs document important architectural decisions made during the project. They he
## ADR Format ## ADR Format
Each ADR follows this structure: Each ADR follows this structure:
- **Status**: Proposed | Accepted | Rejected | Superseded - **Status**: Proposed | Accepted | Rejected | Superseded
- **Context**: The situation that led to the decision - **Context**: The situation that led to the decision
- **Decision**: What was decided - **Decision**: What was decided

View File

@@ -14,6 +14,7 @@ This document provides a comprehensive overview of the Go Platform architecture,
## High-Level Architecture ## High-Level Architecture
The Go Platform follows a **microservices architecture** where each service is independently deployable from day one: The Go Platform follows a **microservices architecture** where each service is independently deployable from day one:
- **Core Kernel**: Infrastructure only (config, logger, DI, health, metrics, observability) - no business logic - **Core Kernel**: Infrastructure only (config, logger, DI, health, metrics, observability) - no business logic
- **Core Services**: Auth Service, Identity Service, Authz Service, Audit Service - separate microservices - **Core Services**: Auth Service, Identity Service, Authz Service, Audit Service - separate microservices
- **API Gateway**: Single entry point for all external traffic, handles routing and authentication - **API Gateway**: Single entry point for all external traffic, handles routing and authentication

View File

@@ -35,7 +35,8 @@ Go Platform is a microservices platform designed to support multiple business do
- **[Data Flow Patterns](architecture/data-flow-patterns.md)**: How data flows through the system - **[Data Flow Patterns](architecture/data-flow-patterns.md)**: How data flows through the system
### Architecture Decision Records (ADRs) ### Architecture Decision Records (ADRs)
All architectural decisions are documented in [ADR records](adr/README.md), organized by implementation epic: All architectural decisions are documented in [ADR records](adr/README.md), organized by implementation epic:
- **Epic 0**: Project Setup & Foundation - **Epic 0**: Project Setup & Foundation
- **Epic 1**: Core Kernel & Infrastructure - **Epic 1**: Core Kernel & Infrastructure
- **Epic 2**: Authentication & Authorization - **Epic 2**: Authentication & Authorization
@@ -46,6 +47,7 @@ All architectural decisions are documented in [ADR records](adr/README.md), orga
### Implementation Tasks ### Implementation Tasks
Detailed task definitions for each epic are available in the [Stories section](stories/README.md): Detailed task definitions for each epic are available in the [Stories section](stories/README.md):
- **[Epic 0: Project Setup & Foundation](stories/epic0/README.md)** - [Implementation Summary](stories/epic0/SUMMARY.md) - **[Epic 0: Project Setup & Foundation](stories/epic0/README.md)** - [Implementation Summary](stories/epic0/SUMMARY.md)
- **[Epic 1: Core Kernel & Infrastructure](stories/epic1/README.md)** - [Implementation Summary](stories/epic1/SUMMARY.md) - **[Epic 1: Core Kernel & Infrastructure](stories/epic1/README.md)** - [Implementation Summary](stories/epic1/SUMMARY.md)
- Epic 2: Authentication & Authorization - Epic 2: Authentication & Authorization

View File

@@ -49,6 +49,7 @@ Core business services are implemented as separate, independently deployable ser
| **API Gateway** | `cmd/api-gateway/` | Request routing, authentication, rate limiting, CORS | N/A (entry point) | | **API Gateway** | `cmd/api-gateway/` | Request routing, authentication, rate limiting, CORS | N/A (entry point) |
Each service: Each service:
- Has its own `go.mod` (or shared workspace) - Has its own `go.mod` (or shared workspace)
- Manages its own database connection pool and schema - Manages its own database connection pool and schema
- Exposes gRPC server (and optional HTTP) - Exposes gRPC server (and optional HTTP)

View File

@@ -244,6 +244,7 @@ func main() {
``` ```
Services communicate via service clients: Services communicate via service clients:
- All inter-service communication uses gRPC (primary) or HTTP (fallback) - All inter-service communication uses gRPC (primary) or HTTP (fallback)
- Service discovery via service registry - Service discovery via service registry
- Each service manages its own database connection - Each service manages its own database connection

View File

@@ -85,6 +85,7 @@ Tasks are organized by epic and section. Each task file follows the naming conve
## Task Status Tracking ## Task Status Tracking
To track task completion: To track task completion:
1. Update the Status field in each task file 1. Update the Status field in each task file
2. Update checkboxes in the main plan.md 2. Update checkboxes in the main plan.md
3. Reference task IDs in commit messages: `[0.1.1] Initialize Go module` 3. Reference task IDs in commit messages: `[0.1.1] Initialize Go module`

View File

@@ -36,6 +36,7 @@ Tasks are organized by epic, with each major task section having its own detaile
## Task Status ## Task Status
Each task file includes: Each task file includes:
- **Task ID**: Unique identifier (e.g., `0.1.1`) - **Task ID**: Unique identifier (e.g., `0.1.1`)
- **Title**: Descriptive task name - **Title**: Descriptive task name
- **Epic**: Implementation epic - **Epic**: Implementation epic
@@ -50,6 +51,7 @@ Each task file includes:
## Task Tracking ## Task Tracking
Tasks can be tracked using: Tasks can be tracked using:
- GitHub Issues (linked from tasks) - GitHub Issues (linked from tasks)
- Project boards - Project boards
- Task management tools - Task management tools

View File

@@ -19,6 +19,7 @@ This story implements a complete logging system using Zap that provides structur
### 1. Logger Interface (`pkg/logger/logger.go`) ### 1. Logger Interface (`pkg/logger/logger.go`)
Define `Logger` interface with: Define `Logger` interface with:
- `Debug(msg string, fields ...Field)` - Debug level logging - `Debug(msg string, fields ...Field)` - Debug level logging
- `Info(msg string, fields ...Field)` - Info level logging - `Info(msg string, fields ...Field)` - Info level logging
- `Warn(msg string, fields ...Field)` - Warning level logging - `Warn(msg string, fields ...Field)` - Warning level logging
@@ -30,6 +31,7 @@ Define `Logger` interface with:
### 2. Zap Implementation (`internal/logger/zap_logger.go`) ### 2. Zap Implementation (`internal/logger/zap_logger.go`)
Implement `Logger` interface using Zap: Implement `Logger` interface using Zap:
- Structured JSON logging for production mode - Structured JSON logging for production mode
- Human-readable console logging for development mode - Human-readable console logging for development mode
- Configurable log levels (debug, info, warn, error) - Configurable log levels (debug, info, warn, error)
@@ -40,6 +42,7 @@ Implement `Logger` interface using Zap:
### 3. Request ID Middleware (`internal/logger/middleware.go`) ### 3. Request ID Middleware (`internal/logger/middleware.go`)
Gin middleware for request correlation: Gin middleware for request correlation:
- Generate unique request ID per HTTP request - Generate unique request ID per HTTP request
- Add request ID to request context - Add request ID to request context
- Add request ID to all logs within request context - Add request ID to all logs within request context

View File

@@ -19,6 +19,7 @@ This story sets up the complete CI/CD pipeline using GitHub Actions and provides
### 1. GitHub Actions Workflow (`.github/workflows/ci.yml`) ### 1. GitHub Actions Workflow (`.github/workflows/ci.yml`)
Complete CI pipeline with: Complete CI pipeline with:
- Go 1.24 setup - Go 1.24 setup
- Go module caching for faster builds - Go module caching for faster builds
- Linting with golangci-lint or staticcheck - Linting with golangci-lint or staticcheck
@@ -30,6 +31,7 @@ Complete CI pipeline with:
### 2. Comprehensive Makefile ### 2. Comprehensive Makefile
Developer-friendly Makefile with commands: Developer-friendly Makefile with commands:
- `make test` - Run all tests - `make test` - Run all tests
- `make test-coverage` - Run tests with coverage report - `make test-coverage` - Run tests with coverage report
- `make lint` - Run linters - `make lint` - Run linters

View File

@@ -19,6 +19,7 @@ This story implements the dependency injection system using Uber FX and creates
### 1. DI Container (`internal/di/container.go`) ### 1. DI Container (`internal/di/container.go`)
FX-based dependency injection container: FX-based dependency injection container:
- Initialize FX container - Initialize FX container
- Register Config and Logger providers - Register Config and Logger providers
- Basic lifecycle hooks (OnStart, OnStop) - Basic lifecycle hooks (OnStart, OnStop)
@@ -27,12 +28,14 @@ FX-based dependency injection container:
### 2. DI Providers (`internal/di/providers.go`) ### 2. DI Providers (`internal/di/providers.go`)
Provider functions for core services: Provider functions for core services:
- `ProvideConfig() fx.Option` - Configuration provider - `ProvideConfig() fx.Option` - Configuration provider
- `ProvideLogger() fx.Option` - Logger provider - `ProvideLogger() fx.Option` - Logger provider
- Provider functions return FX options for easy composition - Provider functions return FX options for easy composition
### 3. Application Entry Point (`cmd/platform/main.go`) ### 3. Application Entry Point (`cmd/platform/main.go`)
Main application bootstrap: Main application bootstrap:
- Load configuration - Load configuration
- Initialize DI container with core services - Initialize DI container with core services
- Set up basic application lifecycle - Set up basic application lifecycle

View File

@@ -28,6 +28,7 @@ This story extends the basic DI container to support core kernel services only:
### 2. Provider Functions (`internal/di/providers.go`) ### 2. Provider Functions (`internal/di/providers.go`)
Complete provider functions for core kernel services only: Complete provider functions for core kernel services only:
- `ProvideConfig() fx.Option` - Configuration provider - `ProvideConfig() fx.Option` - Configuration provider
- `ProvideLogger() fx.Option` - Logger provider - `ProvideLogger() fx.Option` - Logger provider
- `ProvideHealthCheckers() fx.Option` - Health check registry provider - `ProvideHealthCheckers() fx.Option` - Health check registry provider

View File

@@ -114,6 +114,7 @@ go run cmd/platform/main.go
- `config/default.yaml` - Add database config with schema isolation settings - `config/default.yaml` - Add database config with schema isolation settings
**Note:** Entity schemas are created in Epic 2: **Note:** Entity schemas are created in Epic 2:
- `services/identity/ent/schema/user.go` - User entity (Identity Service) - `services/identity/ent/schema/user.go` - User entity (Identity Service)
- `services/authz/ent/schema/role.go` - Role entity (Authz Service) - `services/authz/ent/schema/role.go` - Role entity (Authz Service)
- `services/authz/ent/schema/permission.go` - Permission entity (Authz Service) - `services/authz/ent/schema/permission.go` - Permission entity (Authz Service)

View File

@@ -19,6 +19,7 @@ This story defines service client interfaces for all core services (Auth, Identi
### 1. Service Client Interfaces (`pkg/services/`) ### 1. Service Client Interfaces (`pkg/services/`)
Define interfaces for all core services: Define interfaces for all core services:
- `AuthServiceClient` in `pkg/services/auth.go`: - `AuthServiceClient` in `pkg/services/auth.go`:
- `Login(ctx, email, password) (*TokenResponse, error)` - `Login(ctx, email, password) (*TokenResponse, error)`
- `RefreshToken(ctx, refreshToken) (*TokenResponse, error)` - `RefreshToken(ctx, refreshToken) (*TokenResponse, error)`

View File

@@ -19,6 +19,7 @@ This story extends the Authz Service (implemented in Story 2.3) with role manage
### 1. gRPC Service Extensions (`api/proto/authz.proto`) ### 1. gRPC Service Extensions (`api/proto/authz.proto`)
Extend Authz Service proto with role management RPCs: Extend Authz Service proto with role management RPCs:
- `CreateRoleRequest` / `CreateRoleResponse` - Create new role - `CreateRoleRequest` / `CreateRoleResponse` - Create new role
- `GetRoleRequest` / `GetRoleResponse` - Get role details - `GetRoleRequest` / `GetRoleResponse` - Get role details
- `ListRolesRequest` / `ListRolesResponse` - List all roles (with pagination) - `ListRolesRequest` / `ListRolesResponse` - List all roles (with pagination)

View File

@@ -19,6 +19,7 @@ This story implements the foundation for microservices architecture by creating
### 1. Service Client Interfaces (`pkg/services/`) ### 1. Service Client Interfaces (`pkg/services/`)
Define service client interfaces for all core services: Define service client interfaces for all core services:
- `IdentityServiceClient` - User and identity operations - `IdentityServiceClient` - User and identity operations
- `AuthServiceClient` - Authentication operations - `AuthServiceClient` - Authentication operations
- `AuthzServiceClient` - Authorization operations - `AuthzServiceClient` - Authorization operations
@@ -29,6 +30,7 @@ Define service client interfaces for all core services:
### 2. Service Client Factory (`internal/services/factory.go`) ### 2. Service Client Factory (`internal/services/factory.go`)
Factory pattern for creating service clients: Factory pattern for creating service clients:
- Create gRPC clients (primary) - Create gRPC clients (primary)
- Create HTTP clients (fallback) - Create HTTP clients (fallback)
- Support service registry integration - Support service registry integration