# Session 09: Server Core — Initialization & Configuration

## Summary

First half of server.go: server construction, validation, account configuration, resolver setup, trusted keys, and the `Start()` method. This is the server bootstrap path.

## Scope

| Go File | Features | Feature IDs | Go LOC |
|---------|----------|-------------|--------|
| server/server.go (lines 85–2575) | ~76 | 2974–3050 | ~1,950 |
| **Total** | **~76** | | **~1,950** |

### Key Features

- `New`, `NewServer`, `NewServerFromConfig` — constructors
- `validateOptions`, `validateCluster`, `validatePinnedCerts` — config validation
- `configureAccounts`, `configureResolver`, `checkResolvePreloads` — account setup
- `processTrustedKeys`, `initStampedTrustedKeys` — JWT trust chain
- `Start` — main server startup (313 LOC)
- Compression helpers (`selectCompressionMode`, `s2WriterOptions`, etc.)
- Account lookup/register/update methods

## .NET Classes

- `NatsServer` (partial — initialization, configuration, accounts)

## Test Files

| Test File | Tests | Test IDs |
|-----------|-------|----------|
| server/server_test.go (partial) | ~20 | 2866–2885 |
| **Total** | **~20** | |

## Dependencies

- Session 01 (Foundation Types)
- Session 03 (Configuration — ServerOptions)
- Session 04 (Logging)
- Session 05 (Subscription Index)
- Session 06 (Authentication)

## .NET Target Location

- `dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.cs` (partial class)
- Consider: `NatsServer.Init.cs`, `NatsServer.Accounts.cs`

## Notes

- `Server.Start()` is 313 LOC — the single largest function. Port carefully.
- Account configuration deeply intertwines with JWT and resolver subsystems
- Many methods reference route, gateway, and leafnode structures (forward declarations needed)
