# internal/core/reconcile

Package reconcile projects session evidence onto living task specs.

## PhaseBlockFields

```go
var PhaseBlockFields = map[string]string{
	"status":     "projected phase state",
	"reason":     "human-readable source reason",
	"updated_at": "source event timestamp",
	"source_id":  "session entry identifier",
}
```

PhaseBlockFields documents the session-backed fields projected into phase state.

## FromSession

```go
func FromSession(model spec.Model, ledger session.Session) spec.Model
```

FromSession projects replayed session state into a spec model.

## Idempotent

```go
func Idempotent(current Projection) Projection
```

Idempotent returns a normalized projection without changing semantic state.

## Projection

```go
type Projection struct {
	TaskID string
	Lines  []string
}
```

Projection is the session-derived view that can be replayed into a spec.

- `TaskID: string`: 
- `Lines: []string`:
