release

package
v0.50.17 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 29, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PlanSchemaVersion     = "qamesh.release_plan.v1"
	IndexSchemaVersion    = "qamesh.release_index.v1"
	RoadmapSchemaVersion  = "qamesh.release_roadmap.v1"
	BlockingMatrixVersion = "qamesh.release_blocking.v1"
)

@AX:NOTE [AUTO] @AX:SPEC: SPEC-QAMESH-004: schema version strings are persisted in release plan, index, roadmap, and blocker matrix JSON.

Variables

View Source
var (
	ErrInvalidProfile = errors.New("invalid qa release profile")
	ErrReleaseBlocked = errors.New("qa release blocked")
)

Functions

func RedactionRules

func RedactionRules() []string

@AX:NOTE [AUTO] @AX:SPEC: SPEC-QAMESH-004: redaction rule labels must match command-preview masking behavior and JSON contract expectations.

func ReleaseLanes

func ReleaseLanes() []string

@AX:ANCHOR [AUTO] @AX:SPEC: SPEC-QAMESH-004: canonical release lane IDs and order drive plan, execution, roadmap, and tests. @AX:REASON: BuildPlan, Execute, Roadmap, and release guidance expect these lane IDs and ordering to remain stable.

func ValidateProfile

func ValidateProfile(profile string) error

Types

type AIAnalysisRef

type AIAnalysisRef struct {
	Ref               string `json:"ref"`
	TrustedForVerdict bool   `json:"trusted_for_verdict"`
}

type Blocker

type Blocker struct {
	Lane   string `json:"lane,omitempty"`
	Reason string `json:"reason"`
}

type BlockerRuleRow

type BlockerRuleRow struct {
	LanePolicy    LanePolicy  `json:"lane_policy"`
	LaneStatus    string      `json:"lane_status"`
	SetupGapClass string      `json:"setup_gap_class"`
	Severity      string      `json:"severity"`
	LaneVerdict   LaneVerdict `json:"lane_verdict"`
	GateEffect    string      `json:"gate_effect"`
}

type BlockerRules

type BlockerRules struct {
	Profile       string           `json:"profile"`
	MustLanes     []string         `json:"must_lanes"`
	OptionalLanes []string         `json:"optional_lanes"`
	DeferredLanes []string         `json:"deferred_lanes"`
	SeverityOrder []Severity       `json:"severity_order"`
	MatrixVersion string           `json:"matrix_version"`
	RuleRows      []BlockerRuleRow `json:"rule_rows"`
}

func BlockerRulesForProfile

func BlockerRulesForProfile(profile string) (BlockerRules, error)

type ExecutionPayload

type ExecutionPayload struct {
	Index
	ReleaseIndexPath string `json:"release_index_path"`
}

func Execute

func Execute(opts Options) (ExecutionPayload, error)

@AX:ANCHOR [AUTO] @AX:SPEC: SPEC-QAMESH-004: release gate execution aggregates deterministic lane rows into the persisted release index. @AX:REASON: CLI callers and tests depend on fail-closed blocking, skipped-after-block behavior, redaction merging, and AI advisory refs in one contract. @AX:WARN [AUTO] @AX:SPEC: SPEC-QAMESH-004: release execution has 8+ branch points across preflight, lane selection, redaction, and failure status. @AX:REASON: Fail-closed ordering, block short-circuiting, and sanitized-payload persistence can regress if branches are reordered.

type GateStatus

type GateStatus string
const (
	GateStatusPassed  GateStatus = "passed"
	GateStatusWarn    GateStatus = "warn"
	GateStatusBlocked GateStatus = "blocked"
)

func AggregateGateStatus

func AggregateGateStatus(rows []LaneRow) GateStatus

type Index

type Index struct {
	SchemaVersion          string          `json:"schema_version"`
	ReleaseID              string          `json:"release_id"`
	Workspace              WorkspaceRef    `json:"workspace"`
	Profile                string          `json:"profile"`
	StartedAt              string          `json:"started_at"`
	EndedAt                string          `json:"ended_at"`
	Status                 GateStatus      `json:"status"`
	SelectedLanes          []string        `json:"selected_lanes"`
	LaneRows               []LaneRow       `json:"lane_rows"`
	SetupGaps              []SetupGapRow   `json:"setup_gaps"`
	Blockers               []Blocker       `json:"blockers"`
	OutputPaths            OutputPaths     `json:"output_paths"`
	SiblingSpecs           []SiblingSpec   `json:"sibling_specs"`
	FeedbackRefs           []string        `json:"feedback_refs"`
	AIAnalysisRefs         []AIAnalysisRef `json:"ai_analysis_refs"`
	DeterministicAuthority bool            `json:"deterministic_authority"`
	RedactionStatus        RedactionState  `json:"redaction_status"`
	SourceRefs             []string        `json:"source_refs"`
}

type JourneyPackRow

type JourneyPackRow struct {
	Lane                   string   `json:"lane"`
	JourneyID              string   `json:"journey_id"`
	Adapter                string   `json:"adapter"`
	Source                 string   `json:"source"`
	CommandDeclared        bool     `json:"command_declared"`
	CommandPreview         string   `json:"command_preview"`
	CommandPreviewRedacted bool     `json:"command_preview_redacted"`
	Executable             bool     `json:"executable"`
	SourceSpec             string   `json:"source_spec"`
	AcceptanceRefs         []string `json:"acceptance_refs"`
	InventedCommand        bool     `json:"invented_command"`
}

type LaneCatalogRow

type LaneCatalogRow struct {
	Lane                string   `json:"lane"`
	OwnerSpec           string   `json:"owner_spec"`
	OwnerRepo           string   `json:"owner_repo"`
	ReadinessContract   string   `json:"readiness_contract"`
	ImplementationState string   `json:"implementation_state"`
	SupportedProfiles   []string `json:"supported_profiles"`
}

func LaneCatalog

func LaneCatalog() []LaneCatalogRow

type LanePolicy

type LanePolicy string
const (
	LanePolicyMust     LanePolicy = "must"
	LanePolicyOptional LanePolicy = "optional"
	LanePolicyDeferred LanePolicy = "deferred"
)

type LaneRow

type LaneRow struct {
	Lane                   string        `json:"lane"`
	LanePolicy             LanePolicy    `json:"lane_policy"`
	OwnerSpec              string        `json:"owner_spec"`
	OwnerRepo              string        `json:"owner_repo"`
	Status                 LaneStatus    `json:"status"`
	SetupGapClass          SetupGapClass `json:"setup_gap_class"`
	Severity               Severity      `json:"severity"`
	LaneVerdict            LaneVerdict   `json:"lane_verdict"`
	RunIndexPath           string        `json:"run_index_path"`
	ManifestPaths          []string      `json:"manifest_paths"`
	FeedbackRefs           []string      `json:"feedback_refs"`
	Blockers               []Blocker     `json:"blockers"`
	SkippedReason          string        `json:"skipped_reason"`
	DeterministicAuthority bool          `json:"deterministic_authority"`
}

func NormalizeLaneRow

func NormalizeLaneRow(row LaneRow) LaneRow

@AX:ANCHOR [AUTO] @AX:SPEC: SPEC-QAMESH-004: lane row normalization is shared by planning, execution, and blocker matrix tests. @AX:REASON: Callers depend on a single verdict source for setup gaps, failed lanes, deferred lanes, and invalid row contracts. @AX:WARN [AUTO] @AX:SPEC: SPEC-QAMESH-004: release lane normalization has 8+ guard branches and intentionally fails closed. @AX:REASON: Blocking correctness depends on preserving setup-gap precedence, severity defaults, invalid-row quarantine, and blocker injection order.

type LaneRunResult

type LaneRunResult struct {
	Status          LaneStatus      `json:"status"`
	RunIndexPath    string          `json:"run_index_path,omitempty"`
	ManifestPaths   []string        `json:"manifest_paths,omitempty"`
	FeedbackRefs    []string        `json:"feedback_refs,omitempty"`
	AIAnalysisRefs  []AIAnalysisRef `json:"ai_analysis_refs,omitempty"`
	RedactionStatus RedactionState  `json:"redaction_status,omitempty"`
}

type LaneRunner

type LaneRunner interface {
	RunLane(opts Options, lane string) (LaneRunResult, error)
}

type LaneRunnerFunc

type LaneRunnerFunc func(opts Options, lane string) (LaneRunResult, error)

func (LaneRunnerFunc) RunLane

func (fn LaneRunnerFunc) RunLane(opts Options, lane string) (LaneRunResult, error)

type LaneStatus

type LaneStatus string
const (
	LaneStatusPassed   LaneStatus = "passed"
	LaneStatusWarn     LaneStatus = "warn"
	LaneStatusWarning  LaneStatus = "warning"
	LaneStatusFailed   LaneStatus = "failed"
	LaneStatusBlocked  LaneStatus = "blocked"
	LaneStatusSetupGap LaneStatus = "setup_gap"
	LaneStatusDeferred LaneStatus = "deferred"
	LaneStatusSkipped  LaneStatus = "skipped"
)

type LaneVerdict

type LaneVerdict string
const (
	LaneVerdictPass  LaneVerdict = "pass"
	LaneVerdictWarn  LaneVerdict = "warn"
	LaneVerdictBlock LaneVerdict = "block"
)

type Options

type Options struct {
	ProjectDir    string
	Profile       string
	Output        string
	RunOutputRoot string
	Command       string
	DryRun        bool
	Roadmap       bool
	Runner        LaneRunner
	Now           func() time.Time
	NewID         func() string
}

type OutputPaths

type OutputPaths struct {
	ReleaseIndexPreviewPath string `json:"release_index_preview_path,omitempty"`
	ReleaseIndexPath        string `json:"release_index_path,omitempty"`
	RunIndexRoot            string `json:"run_index_root"`
	EvidenceRoot            string `json:"evidence_root"`
	FeedbackRoot            string `json:"feedback_root"`
}

type Plan

type Plan struct {
	SchemaVersion   string           `json:"schema_version"`
	Command         string           `json:"command"`
	DryRun          bool             `json:"dry_run"`
	Profile         string           `json:"profile"`
	LaneCatalog     []LaneCatalogRow `json:"lane_catalog"`
	SelectedLanes   []string         `json:"selected_lanes"`
	JourneyPacks    []JourneyPackRow `json:"journey_packs"`
	SetupGaps       []SetupGapRow    `json:"setup_gaps"`
	BlockerRules    BlockerRules     `json:"blocker_rules"`
	OutputPaths     OutputPaths      `json:"output_paths"`
	SiblingSpecs    []SiblingSpec    `json:"sibling_specs"`
	RedactionStatus RedactionState   `json:"redaction_status"`
	RedactionRules  []string         `json:"redaction_rules"`
	SideEffects     []string         `json:"side_effects"`
}

@AX:ANCHOR [AUTO] @AX:SPEC: SPEC-QAMESH-004: release payload structs form the CLI JSON output contract. @AX:REASON: auto qa release, tests, prompt guidance, and downstream evidence tooling consume these field names and versioned envelopes.

func BuildPlan

func BuildPlan(opts Options) (Plan, error)

@AX:ANCHOR [AUTO] @AX:SPEC: SPEC-QAMESH-004: dry-run release plan is the side-effect-free contract for gate inspection. @AX:REASON: CLI dry-run, release execution preflight, and template guidance depend on setup gaps, blocker matrix, redaction, and sibling SPEC fields staying aligned.

type ProfilePolicy

type ProfilePolicy struct {
	MustLanes     []string `json:"must_lanes"`
	OptionalLanes []string `json:"optional_lanes"`
	DeferredLanes []string `json:"deferred_lanes"`
}

type RedactionState

type RedactionState string
const (
	RedactionClean    RedactionState = "clean"
	RedactionRedacted RedactionState = "redacted"
	RedactionBlocked  RedactionState = "blocked"
)

type RoadmapLane

type RoadmapLane struct {
	Lane                 string                `json:"lane"`
	OwnerSpec            string                `json:"owner_spec"`
	OwnerRepo            string                `json:"owner_repo"`
	ImplementationState  string                `json:"implementation_state"`
	SiblingDependency    string                `json:"sibling_dependency"`
	ReadinessContract    string                `json:"readiness_contract"`
	LanePolicyByProfile  map[string]LanePolicy `json:"lane_policy_by_profile"`
	LaunchBlockingPolicy map[string]LanePolicy `json:"launch_blocking_policy"`
}

type RoadmapPayload

type RoadmapPayload struct {
	SchemaVersion string                   `json:"schema_version"`
	GeneratedAt   string                   `json:"generated_at"`
	Lanes         []RoadmapLane            `json:"lanes"`
	SiblingSpecs  []SiblingSpec            `json:"sibling_specs"`
	Profiles      map[string]ProfilePolicy `json:"profiles"`
}

func Roadmap

func Roadmap() RoadmapPayload

@AX:NOTE [AUTO] @AX:SPEC: SPEC-QAMESH-004: roadmap payload is the governance surface for release lanes and sibling SPEC dependencies. @AX:REASON: downgraded from ANCHOR during sync; grep fan-in is below threshold, but CLI --roadmap and roadmap tests still rely on this contract.

func RoadmapAt

func RoadmapAt(generatedAt string) RoadmapPayload

type SetupGapClass

type SetupGapClass string
const (
	SetupGapNone               SetupGapClass = "none"
	SetupGapMissingJourneyPack SetupGapClass = "missing-journey-pack"
	SetupGapCanaryTemplate     SetupGapClass = "canary-template"
	SetupGapToolUnavailable    SetupGapClass = "tool-unavailable"
	SetupGapEnvMissing         SetupGapClass = "env-missing"
	SetupGapSiblingSpecPending SetupGapClass = "sibling-spec-pending"
	SetupGapPolicyForbidden    SetupGapClass = "policy-forbidden"
	SetupGapUnsafeCommand      SetupGapClass = "unsafe-command"
)

type SetupGapRow

type SetupGapRow struct {
	Lane            string        `json:"lane"`
	SetupGapClass   SetupGapClass `json:"setup_gap_class"`
	Reason          string        `json:"reason"`
	Severity        Severity      `json:"severity"`
	Blocking        bool          `json:"blocking"`
	OwnerSpec       string        `json:"owner_spec"`
	OwnerRepo       string        `json:"owner_repo"`
	InventedCommand bool          `json:"invented_command"`
}

type Severity

type Severity string
const (
	SeverityNone     Severity = "none"
	SeverityInfo     Severity = "info"
	SeverityLow      Severity = "low"
	SeverityMedium   Severity = "medium"
	SeverityHigh     Severity = "high"
	SeverityCritical Severity = "critical"
)

func SeverityOrder

func SeverityOrder() []Severity

@AX:NOTE [AUTO] @AX:SPEC: SPEC-QAMESH-004: severity ordering defines threshold comparisons in the release blocker matrix.

type SiblingSpec

type SiblingSpec struct {
	SpecID       string   `json:"spec_id"`
	OwnerRepo    string   `json:"owner_repo"`
	Lanes        []string `json:"lanes"`
	Status       string   `json:"status"`
	Relationship string   `json:"relationship"`
}

func SiblingSpecs

func SiblingSpecs() []SiblingSpec

type WorkspaceRef added in v0.50.11

type WorkspaceRef struct {
	WorkspaceID string `json:"workspace_id"`
	RepoID      string `json:"repo_id"`
	RepoRoot    string `json:"repo_root"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL