NAEOS menyediakan validasi komprehensif di beberapa level untuk menangkap error lebih awal dan menerapkan konsistensi di seluruh proyek Anda.

Level Validasi

┌─────────────────────────────────────────────┐
│              Sistem Validasi                 │
├──────────┬──────────┬──────────┬────────────┤
│   Spec   │  Module  │ Service  │  Policy    │
│  Valid.  │  Valid.  │  Valid.  │  Valid.   │
└──────────┴──────────┴──────────┴────────────┘

Validasi Spesifikasi

Penggunaan CLI

# Validasi spesifikasi
naeos validate --input-file spec.yaml

# Lint spesifikasi (pengecekan gaya tambahan)
naeos lint --input-file spec.yaml

# Output sebagai JSON
naeos validate --input-file spec.yaml --output json

Go API

import "github.com/NAEOS-foundation/naeos/internal/lint"

result, err := lint.ValidateSpec(specContent)
if err != nil {
    log.Fatal(err)
}

if !result.Valid {
    for _, issue := range result.Issues {
        fmt.Printf("[%s] %s\n", issue.Severity, issue.Message)
    }
}

Validasi Module

Deteksi Duplikat

Mendeteksi modul dengan nama yang sama:

validator := parser.NewSpecValidator()
issues := validator.ValidateModules(modules)

// Issues akan menyertakan "module-duplicate" jika ada duplikat

Deteksi Circular Dependency

Mendeteksi circular dependency antar modul:

modules := []parser.Module{
    {Name: "a", Dependencies: []string{"b"}},
    {Name: "b", Dependencies: []string{"a"}},
}

issues := validator.ValidateModules(modules)
// Issues akan menyertakan "circular-dependency"

Deteksi Dangling Dependency

Mendeteksi referensi ke modul yang tidak ada:

modules := []parser.Module{
    {Name: "auth", Dependencies: []string{"nonexistent"}},
}

issues := validator.ValidateModules(modules)
// Issues akan menyertakan "dependency-not-found"

Validasi Service

Deteksi Konflik Port

Mendeteksi beberapa layanan menggunakan port yang sama:

services := []parser.Service{
    {Name: "api", Port: 8080},
    {Name: "web", Port: 8080},
}

issues := validator.ValidateServices(services)
// Issues akan menyertakan "service-port-conflict"

Validasi Range Port

Memastikan port berada dalam rentang valid (1–65535):

services := []parser.Service{
    {Name: "bad", Port: 99999},
}

issues := validator.ValidateServices(services)
// Issues akan menyertakan "service-port-range"

Validasi Versi Skema

Pemeriksaan Otomatis Saat Parse

Parser secara otomatis memvalidasi versi skema:

# Spesifikasi ini akan diperiksa terhadap versi minimum 0.1.0
version: 0.3.0

Pemeriksaan Manual

result := parser.CheckSpecVersion("0.3.0")
if !result.Valid {
    fmt.Println(result.Message)
    // "Schema version 0.3.0 is not supported. Minimum: 0.1.0"
}

Validasi Kebijakan

Aturan Default

import "github.com/NAEOS-foundation/naeos/internal/governance/policy"

evaluator := policy.NewEvaluator()
rules := policy.DefaultRules()

ctx := map[string]any{
    "project":  "my-app",
    "modules":  3,
    "services": 2,
}

results, err := evaluator.EvaluateRules(rules, ctx)
for _, r := range results {
    fmt.Printf("[%s] %s: %s\n", r.RuleID, r.Action, r.Message)
}

Aturan Kustom

rules := []policy.Rule{
    {
        RuleID:    "require-architecture",
        Condition: "exists:architecture",
        Priority:  1,
        Action:    "block",
        Scope:     "spec",
        Enabled:   true,
    },
    {
        RuleID:    "max-modules",
        Condition: "lt:module_count,50",
        Priority:  2,
        Action:    "warn",
        Scope:     "spec",
        Enabled:   true,
    },
}

Hasil Validasi

type ValidationResult struct {
    Valid        bool
    Issues       []ValidationIssue
    Warnings     []ValidationIssue
    ModuleCount  int
    ServiceCount int
}

type ValidationIssue struct {
    Severity string  // "error", "warning", "info"
    Rule     string
    Message  string
    Line     int
}

Integrasi Pipeline

Validasi berjalan secara otomatis sebagai bagian dari pipeline:

# Pipeline lengkap menyertakan validasi
naeos run --input spec.yaml

# Mode validasi saja
naeos validate --input-file spec.yaml

Lewati Validasi Tertentu

# Lewati validasi module
naeos run --input spec.yaml --skip-validation

# Lewati pemeriksaan tertentu
naeos validate --input-file spec.yaml --skip circular-deps

Lihat juga: Governance, Pipeline Engine, Bahasa Spesifikasi