# internal/core/reviewmaterial

Package reviewmaterial projects the task-owned material surface shared by status, handoff, and API-style adapters.

## StatusUnchanged

```go
const (
	StatusUnchanged                   = "unchanged"
	StatusChanged                     = "changed"
	StatusCurrentUnavailable          = "current_unavailable"
	StatusReviewedMaterialUnavailable = "reviewed_material_unavailable"
	StatusUnreviewed                  = "unreviewed"
)
```

## StatusChanged

```go
const (
	StatusUnchanged                   = "unchanged"
	StatusChanged                     = "changed"
	StatusCurrentUnavailable          = "current_unavailable"
	StatusReviewedMaterialUnavailable = "reviewed_material_unavailable"
	StatusUnreviewed                  = "unreviewed"
)
```

## StatusCurrentUnavailable

```go
const (
	StatusUnchanged                   = "unchanged"
	StatusChanged                     = "changed"
	StatusCurrentUnavailable          = "current_unavailable"
	StatusReviewedMaterialUnavailable = "reviewed_material_unavailable"
	StatusUnreviewed                  = "unreviewed"
)
```

## StatusReviewedMaterialUnavailable

```go
const (
	StatusUnchanged                   = "unchanged"
	StatusChanged                     = "changed"
	StatusCurrentUnavailable          = "current_unavailable"
	StatusReviewedMaterialUnavailable = "reviewed_material_unavailable"
	StatusUnreviewed                  = "unreviewed"
)
```

## StatusUnreviewed

```go
const (
	StatusUnchanged                   = "unchanged"
	StatusChanged                     = "changed"
	StatusCurrentUnavailable          = "current_unavailable"
	StatusReviewedMaterialUnavailable = "reviewed_material_unavailable"
	StatusUnreviewed                  = "unreviewed"
)
```

## Project

```go
func Project(input Input) Projection
```

Project derives the shared task-material read model.

## Input

```go
type Input struct {
	Model                    spec.Model
	Ledger                   session.Session
	Scope                    []string
	CurrentSnapshot          []string
	HasCurrentSnapshot       bool
	Authority                reviewgate.Authority
	CurrentMaterialDigest    string
	HasCurrentMaterialDigest bool
}
```

Input is the complete read-only material projection input.

- `Model: spec.Model`: 
- `Ledger: session.Session`: 
- `Scope: []string`: 
- `CurrentSnapshot: []string`: 
- `HasCurrentSnapshot: bool`: 
- `Authority: reviewgate.Authority`: 
- `CurrentMaterialDigest: string`: 
- `HasCurrentMaterialDigest: bool`: 

## Projection

```go
type Projection struct {
	Scope                  []string `json:"scope,omitempty"`
	BaselinePaths          []string `json:"baseline_paths,omitempty"`
	TaskChanges            []string `json:"task_changes,omitempty"`
	AmbientDrift           []string `json:"ambient_drift,omitempty"`
	ReviewedScope          []string `json:"reviewed_scope,omitempty"`
	ReviewedMaterialDigest string   `json:"reviewed_material_digest,omitempty"`
	CurrentMaterialDigest  string   `json:"current_material_digest,omitempty"`
	MaterialStatus         string   `json:"material_status,omitempty"`
}
```

Projection describes the task-owned workspace surface and its review freshness.

- `Scope: []string` (json:"scope,omitempty"): 
- `BaselinePaths: []string` (json:"baseline_paths,omitempty"): 
- `TaskChanges: []string` (json:"task_changes,omitempty"): 
- `AmbientDrift: []string` (json:"ambient_drift,omitempty"): 
- `ReviewedScope: []string` (json:"reviewed_scope,omitempty"): 
- `ReviewedMaterialDigest: string` (json:"reviewed_material_digest,omitempty"): 
- `CurrentMaterialDigest: string` (json:"current_material_digest,omitempty"): 
- `MaterialStatus: string` (json:"material_status,omitempty"): 

## Empty

```go
func (p Projection) Empty() bool
```

Empty reports whether the projection has no useful material evidence.
