# internal/core/harden

Package harden models provider-backed pre-approval hardening.

## SubmitToolName

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## VerdictPass

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## VerdictNeedsRevision

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## DecisionKeep

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## DecisionShrink

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## DecisionReframe

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## DecisionReject

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## ResultClean

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## ResultAdvisory

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## ResultBlocks

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## ResultNotApplicable

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## StatusOpen

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## StatusFixed

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## StatusAcceptedRisk

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## StatusSuperseded

```go
const (
	// SubmitToolName is the provider submission channel for harden dossiers.
	SubmitToolName = "submit_harden"

	// VerdictPass means the draft contract is ready for approval.
	VerdictPass = "pass"
	// VerdictNeedsRevision means the draft needs contract edits before approval.
	VerdictNeedsRevision = "needs_revision"

	// DecisionKeep means the draft should proceed in its current shape.
	DecisionKeep = "keep"
	// DecisionShrink means the goal is valid but the draft is too large.
	DecisionShrink = "shrink"
	// DecisionReframe means the goal is valid but the architecture is wrong.
	DecisionReframe = "reframe"
	// DecisionReject means the draft should not be approved.
	DecisionReject = "reject"

	// ResultClean means the dimension was checked and no concern was found.
	ResultClean = "clean"
	// ResultAdvisory means the dimension has useful non-blocking feedback.
	ResultAdvisory = "advisory"
	// ResultBlocks means the dimension found work that must be resolved before approval.
	ResultBlocks = "blocks"
	// ResultNotApplicable means the dimension was checked and does not apply.
	ResultNotApplicable = "n/a"

	// StatusOpen marks an unresolved blocking observation.
	StatusOpen = "open"
	// StatusFixed marks a blocking observation resolved by a spec edit.
	StatusFixed = "fixed"
	// StatusAcceptedRisk marks a blocking observation intentionally accepted.
	StatusAcceptedRisk = "accepted_risk"
	// StatusSuperseded marks a blocking observation made irrelevant by later spec changes.
	StatusSuperseded = "superseded"
)
```

## ErrInvalidDossier

```go
var ErrInvalidDossier = errors.New("invalid harden dossier")
```

ErrInvalidDossier wraps malformed or semantically invalid harden output.

## RequiredDimensions

```go
var RequiredDimensions = []string{
	"design",
	"scope",
	"path",
	"command",
	"timing",
	"rollback",
}
```

RequiredDimensions are the hardening dimensions every round must cover.

## DossierSchemaJSON

```go
func DossierSchemaJSON() string
```

DossierSchemaJSON returns the semantic HardenDossier JSON Schema.

## EncodeDossier

```go
func EncodeDossier(dossier Dossier) string
```

EncodeDossier serializes a dossier for transport and storage.

## MissingDimensions

```go
func MissingDimensions(observations []Observation) []string
```

MissingDimensions returns required dimensions not covered by the observations.

## NormalizeDossier

```go
func NormalizeDossier(dossier Dossier) Dossier
```

NormalizeDossier fills derived defaults without hiding invalid provider shape.

## ObservationBlocksApproval

```go
func ObservationBlocksApproval(observation Observation) bool
```

ObservationBlocksApproval reports whether an observation keeps harden not-ready.

## ParseText

```go
func ParseText(text string) (Dossier, error)
```

ParseText parses one strict JSON HardenDossier.

## RequiredDimensionList

```go
func RequiredDimensionList() string
```

RequiredDimensionList formats the canonical dimension order for user-facing instructions and errors.

## ShapeRequiresRevision

```go
func ShapeRequiresRevision(shape Shape) bool
```

ShapeRequiresRevision reports whether the shape decision blocks approval.

## StrictDossierSchemaJSON

```go
func StrictDossierSchemaJSON() string
```

StrictDossierSchemaJSON returns the Codex/OpenAI structured-output variant.

## SubmitToolDescription

```go
func SubmitToolDescription() string
```

SubmitToolDescription is the canonical provider-facing harden submission contract shared by MCP and protocol adapters.

## ValidDimension

```go
func ValidDimension(dimension string) bool
```

ValidDimension reports whether a harden dimension is supported.

## ValidObservationStatus

```go
func ValidObservationStatus(status string) bool
```

ValidObservationStatus reports whether an observation status is supported.

## ValidResult

```go
func ValidResult(result string) bool
```

ValidResult reports whether an observation result is supported.

## ValidShapeDecision

```go
func ValidShapeDecision(decision string) bool
```

ValidShapeDecision reports whether a shape decision is supported.

## ValidVerdict

```go
func ValidVerdict(verdict string) bool
```

ValidVerdict reports whether the derived harden verdict is supported.

## ValidateDossier

```go
func ValidateDossier(dossier Dossier) error
```

ValidateDossier verifies provider output shape and the harden gate contract.

## ValidateShape

```go
func ValidateShape(shape Shape) error
```

ValidateShape verifies the harden design-shape decision.

## VerdictFromDossier

```go
func VerdictFromDossier(dossier Dossier) string
```

VerdictFromDossier derives harden verdict from coverage and unresolved blocks.

## Dossier

```go
type Dossier struct {
	Summary      string         `json:"summary"`
	Shape        Shape          `json:"shape"`
	Observations []Observation  `json:"observations"`
	Provider     string         `json:"provider,omitempty"`
	Model        string         `json:"model,omitempty"`
	SessionID    string         `json:"session_id,omitempty"`
	OutputFormat string         `json:"output_format,omitempty"`
	EventSummary map[string]int `json:"event_summary,omitempty"`
	Raw          string         `json:"-"`
}
```

Dossier is the normalized harden-provider payload consumed by scafld.

- `Summary: string` (json:"summary"): 
- `Shape: Shape` (json:"shape"): 
- `Observations: []Observation` (json:"observations"): 
- `Provider: string` (json:"provider,omitempty"): 
- `Model: string` (json:"model,omitempty"): 
- `SessionID: string` (json:"session_id,omitempty"): 
- `OutputFormat: string` (json:"output_format,omitempty"): 
- `EventSummary: map[string]int` (json:"event_summary,omitempty"): 
- `Raw: string` (json:"-"): 

## Observation

```go
type Observation struct {
	Dimension    string `json:"dimension"`
	Result       string `json:"result"`
	Anchor       string `json:"anchor"`
	Note         string `json:"note,omitempty"`
	Question     string `json:"question,omitempty"`
	Recommended  string `json:"recommended,omitempty"`
	IfUnanswered string `json:"if_unanswered,omitempty"`
	Default      string `json:"default,omitempty"`
	Status       string `json:"status,omitempty"`
}
```

Observation records one grounded hardening claim.

- `Dimension: string` (json:"dimension"): 
- `Result: string` (json:"result"): 
- `Anchor: string` (json:"anchor"): 
- `Note: string` (json:"note,omitempty"): 
- `Question: string` (json:"question,omitempty"): 
- `Recommended: string` (json:"recommended,omitempty"): 
- `IfUnanswered: string` (json:"if_unanswered,omitempty"): 
- `Default: string` (json:"default,omitempty"): 
- `Status: string` (json:"status,omitempty"): 

## Request

```go
type Request struct {
	TaskID  string
	Prompt  string
	Context reviewcontext.Packet
}
```

Request is the provider-facing hardening prompt request.

- `TaskID: string`: 
- `Prompt: string`: 
- `Context: reviewcontext.Packet`: 

## Shape

```go
type Shape struct {
	Decision    string `json:"decision"`
	TrueShape   string `json:"true_shape"`
	MinimalPlan string `json:"minimal_plan"`
	SharedOwner string `json:"shared_owner"`
	// AdapterBoundaries names adapter surfaces only when the task crosses one.
	// Empty is valid for tasks fully owned by one core/app surface.
	AdapterBoundaries []string `json:"adapter_boundaries"`
	RequiredSpecEdits []string `json:"required_spec_edits"`
}
```

Shape records the design gate's answer to whether the draft should exist.

- `Decision: string` (json:"decision"): 
- `TrueShape: string` (json:"true_shape"): 
- `MinimalPlan: string` (json:"minimal_plan"): 
- `SharedOwner: string` (json:"shared_owner"): 
- `AdapterBoundaries: []string` (json:"adapter_boundaries"): AdapterBoundaries names adapter surfaces only when the task crosses one. Empty is valid for tasks fully owned by one core/app surface.
- `RequiredSpecEdits: []string` (json:"required_spec_edits"):
