Documentation
¶
Overview ¶
Package evo is Evident Output: a presentation library for CLI state, progress, evidence, changes, plans, messages, actions, and conclusions.
Application code owns execution. Evo owns presentation.
func main() {
out := evo.New(evo.Config{Title: "repo"})
os.Exit(evo.Main(out, run))
}
func run(out *evo.Output) error {
out.Println("Reading configuration")
out.Item("working tree").OK()
t := out.Task("fetch")
output := t.Capture()
// run.Run(ctx, "git", args, output); t.Fail(..., output.DetailTail()) on error
return nil
}
Adoption ladder: Print → Verbose → Item/Task → Capture → slog diagnostics.
Ordinary surface: New(Config), Print*, Item/Task (+ ID), Task.Capture / Item.Capture, Changes/Plan, slog via SlogHandler (level from Config.Debug.Level). Advanced: NewWithOptions, Terminal, session Capture, Progress64, Advance.
Index ¶
- Constants
- Variables
- func Delay(d time.Duration) *time.Duration
- func EncodeJSON(s Snapshot, _ ...JSONOptions) ([]byte, error)
- func EncodeJSONL(events []Event, _ ...JSONLOptions) ([]byte, error)
- func IsCharDevice(w io.Writer) bool
- func Main(out *Output, run func(*Output) error) int
- func RenderPlain(s Snapshot, opts PlainOptions) ([]byte, error)
- func WriteJSON(w io.Writer, snapshot Snapshot) error
- func WriteJSONL(w io.Writer, events []Event) error
- type Action
- type CapabilityProfile
- type Capture
- func (c *Capture) Close() error
- func (c *Capture) DetailTail() ProblemOption
- func (c *Capture) Empty() bool
- func (c *Capture) Lines() []string
- func (c *Capture) Stderr() io.Writer
- func (c *Capture) Stdout() io.Writer
- func (c *Capture) Tail(n ...int) string
- func (c *Capture) TaskName() string
- func (c *Capture) Text() string
- func (c *Capture) Write(p []byte) (int, error)
- type CaptureOption
- type CaptureStream
- type Changes
- func (c *Changes) Added(quantity int64, object string) *Changes
- func (c *Changes) Created(object string) *Changes
- func (c *Changes) Moved(source, destination string) *Changes
- func (c *Changes) Record(verb string, quantity int64, object string) *Changes
- func (c *Changes) Removed(quantity int64, object string) *Changes
- func (c *Changes) Reused(quantity int64, object string) *Changes
- func (c *Changes) Updated(quantity int64, object string) *Changes
- func (c *Changes) Wrote(object string) *Changes
- type ChangesSnapshot
- type ColorLevel
- type ColorMode
- type CommandSpec
- type Conclusion
- type ConclusionJSON
- type ConclusionState
- type Config
- type DebugConfig
- type DebugPaneOption
- type DebugPresentation
- type EffectRecord
- type EntityOption
- type EntityState
- type Event
- type EventJSON
- type Evidence
- type Field
- type FixedClock
- type Format
- type Item
- func (i *Item) Because(text string) *Item
- func (i *Item) Block(summary string, options ...ProblemOption) *Item
- func (i *Item) BlockedBy(problems ...Problem) *Item
- func (i *Item) Capture(opts ...CaptureOption) *Capture
- func (i *Item) Fail(summary string, options ...ProblemOption) *Item
- func (i *Item) FailedBy(problems ...Problem) *Item
- func (i *Item) Next(actions ...Action) *Item
- func (i *Item) NextCommand(executable string, args ...string) *Item
- func (i *Item) OK() *Item
- func (i *Item) Skip(reason string) *Item
- func (i *Item) Snapshot() ItemSnapshot
- func (i *Item) Start() *Item
- func (i *Item) Unknown(summary string, options ...ProblemOption) *Item
- func (i *Item) Warn(summary string, options ...ProblemOption) *Item
- func (i *Item) WarnedBy(problems ...Problem) *Item
- type ItemSnapshot
- type JSONAction
- type JSONChanges
- type JSONCollection
- type JSONCommand
- type JSONDocument
- type JSONEffectRecord
- type JSONItem
- type JSONLOptions
- type JSONMessage
- type JSONOptions
- type JSONOutputMeta
- type JSONPlan
- type JSONProblem
- type JSONProgress
- type JSONTask
- type LiveSurface
- type Location
- type LogLevel
- type LogRecord
- type MessageSnapshot
- type NoopRedactor
- type Option
- func AlsoWrite(w io.Writer) Option
- func Clock(ts TimeSource) Option
- func DataProjection() Option
- func DebugHistory() Option
- func DebugLevel(level LogLevel) Option
- func DebugPane(opts ...DebugPaneOption) Option
- func Diagnostics(w io.Writer) Option
- func ExternalProjection() Option
- func MaxEntities(n int) Option
- func MaxEvents(n int) Option
- func MaxFrameRate(framesPerSecond int) Option
- func NoColor() Option
- func NonInteractive() Option
- func Plain() Option
- func Redact(r Redactor) Option
- func ResultStream(w io.Writer) Option
- func Strict() Option
- func Terminal(driver TerminalDriver) Option
- func Title(subject string) Option
- func To(w io.Writer) Option
- func VisibilityDelay(delay time.Duration) Option
- func Width(columns int) Option
- type Output
- func (o *Output) AnyBlocked() bool
- func (o *Output) AnyFailed() bool
- func (o *Output) At(visibility Visibility) *Printer
- func (o *Output) Cancel(reason string)
- func (o *Output) Capture(opts ...CaptureOption) *Capture
- func (o *Output) Changes(subject string) *Changes
- func (o *Output) Changesf(format string, args ...any) *Changes
- func (o *Output) Close() error
- func (o *Output) Conclusion() Conclusion
- func (o *Output) Debug(message string, fields ...Field)
- func (o *Output) DebugWriter() io.WriteCloser
- func (o *Output) Err() error
- func (o *Output) Events() []Event
- func (o *Output) Explain(text string)
- func (o *Output) Fail(summary string, options ...ProblemOption)
- func (o *Output) FinalPlain() string
- func (o *Output) Finish() error
- func (o *Output) Item(name string, opts ...EntityOption) *Item
- func (o *Output) Itemf(format string, args ...any) *Item
- func (o *Output) Next(actions ...Action)
- func (o *Output) NextCommand(executable string, args ...string)
- func (o *Output) Plan(subject string) *Plan
- func (o *Output) Planf(format string, args ...any) *Plan
- func (o *Output) Print(args ...any)
- func (o *Output) Printf(format string, args ...any)
- func (o *Output) Println(args ...any)
- func (o *Output) ResultWriter() io.Writer
- func (o *Output) Scope(name string) *Scope
- func (o *Output) SlogHandler() slog.Handler
- func (o *Output) Snapshot() Snapshot
- func (o *Output) Snapshots() <-chan Snapshot
- func (o *Output) Suspend(fn func() error) error
- func (o *Output) Task(name string, opts ...EntityOption) *Task
- func (o *Output) Taskf(format string, args ...any) *Task
- func (o *Output) Tasks(name string) *Tasks
- func (o *Output) Tasksf(format string, args ...any) *Tasks
- func (o *Output) Verbose() *Printer
- func (o *Output) Writer() io.Writer
- type PlainOptions
- type Plan
- func (p *Plan) Add(quantity int64, object string) *Plan
- func (p *Plan) Create(object string) *Plan
- func (p *Plan) Delete(quantity int64, object string) *Plan
- func (p *Plan) Move(source, destination string) *Plan
- func (p *Plan) Record(verb string, quantity int64, object string) *Plan
- func (p *Plan) Remove(quantity int64, object string) *Plan
- func (p *Plan) Retain(description string) *Plan
- func (p *Plan) Revoke(quantity int64, object string) *Plan
- func (p *Plan) Update(quantity int64, object string) *Plan
- func (p *Plan) Write(object string) *Plan
- type PlanSnapshot
- type Printer
- type Problem
- type ProblemOption
- func At(path string, line, column int) ProblemOption
- func Cause(err error) ProblemOption
- func Code(value string) ProblemOption
- func Count(value int64, unit ...string) ProblemOption
- func Detail(text string) ProblemOption
- func DetailTail(c *Capture) ProblemOption
- func Next(action Action) ProblemOption
- func NextCommand(executable string, args ...string) ProblemOption
- func On(subject string) ProblemOption
- type Progress
- type ProgressKind
- type ProjectionPolicy
- type Redactor
- type Scope
- type Snapshot
- type SystemClock
- type Task
- func (t *Task) Advance(delta int64) *Task
- func (t *Task) Bytes(completed, total int64) *Task
- func (t *Task) Cancel(reason string) *Task
- func (t *Task) Capture(opts ...CaptureOption) *Capture
- func (t *Task) Done(summary ...string) *Task
- func (t *Task) Donef(format string, args ...any) *Task
- func (t *Task) Fail(summary string, options ...ProblemOption) *Task
- func (t *Task) Next(actions ...Action) *Task
- func (t *Task) NextCommand(executable string, args ...string) *Task
- func (t *Task) Phase(text string) *Task
- func (t *Task) Progress(completed, total int) *Task
- func (t *Task) Progress64(completed, total int64) *Task
- func (t *Task) Skip(reason string) *Task
- func (t *Task) Snapshot() TaskSnapshot
- func (t *Task) Warn(summary string, options ...ProblemOption) *Task
- type TaskSnapshot
- type Tasks
- type TasksSnapshot
- type TerminalDriver
- type TimeSource
- type UsageError
- type Verbosity
- type Visibility
Constants ¶
const ( ExitOK = 0 ExitBlocked = 1 ExitFailed = 2 ExitCancelled = 130 )
Default exit codes from architecture §26.
const Debug = LevelDebug
Debug is the debug log level (Appendix H). Alias of LevelDebug.
const EventSchemaVersion = "0.2"
EventSchemaVersion is the durable event schema version. Tracks the 0.2 contract series (pre-1.0 wire format may still evolve).
const JSONSchemaVersion = "0.2"
JSONSchemaVersion is the final JSON document schema version. Tracks the 0.2 contract series (pre-1.0 wire format may still evolve).
const PublishedRelease = "v0.2.15"
PublishedRelease is the single source of truth for the current published module and MCP pin used in install guidance.
Maintenance class this protects (v0.2.10 hygiene, generalized):
- skills / integrations / README disagree on which tag to install
- MCP config generator falls back to a stale hardcoded tag
- portable docs recommend @latest or a personal-machine clone path
- signed tags ship with stale README pins (next patch, never rewrite history)
When cutting a release:
- Set PublishedRelease to the new tag (e.g. "v0.2.11").
- Run: go run ./scripts/sync-release-pins
- Run: go test . -run VersionDrift
- Tag that commit; do not move prior tags.
version_drift_test.go enforces the portable surface stays synchronized.
Variables ¶
var ( ErrClosed = errors.New("evo: output is closed") ErrAlreadyResolved = errors.New("evo: entity is already resolved") ErrNoProblems = errors.New("evo: structured resolution requires problems") ErrUnresolvedItem = errors.New("evo: item has no final state") ErrUnresolvedTask = errors.New("evo: task has no final state") ErrInvalidProgress = errors.New("evo: invalid progress") ErrProgressRegression = errors.New("evo: progress moved backward") ErrDuplicateKey = errors.New("evo: duplicate entity key") ErrInvalidConfig = errors.New("evo: invalid configuration") ErrRenderer = errors.New("evo: renderer failure") ErrFinishing = errors.New("evo: output is finishing") ErrLimitExceeded = errors.New("evo: resource limit exceeded") )
Sentinel misuse and lifecycle errors recorded by the output aggregate.
Functions ¶
func Delay ¶ added in v0.2.7
Delay returns a non-nil *time.Duration for Config fields where zero is meaningful.
cfg.VisibilityDelay = evo.Delay(0) // immediate cfg.VisibilityDelay = evo.Delay(150 * time.Millisecond) // explicit default
func EncodeJSON ¶
func EncodeJSON(s Snapshot, _ ...JSONOptions) ([]byte, error)
EncodeJSON encodes a snapshot as final JSON (§25.1 / §25.4).
func EncodeJSONL ¶
func EncodeJSONL(events []Event, _ ...JSONLOptions) ([]byte, error)
EncodeJSONL encodes durable events as JSON Lines (§25.2 / §25.4).
func IsCharDevice ¶
IsCharDevice reports whether w is an *os.File backed by a character device (typical interactive TTY). Pipes, files, and non-file writers return false.
Prefer Config{Stdout, Stderr} for ordinary dual-stream construction. This helper remains for hosts that choose Plain/NoColor from a concrete writer.
func Main ¶
Main runs a CLI presentation lifecycle and returns the process exit code.
Typical entrypoint:
func main() {
out := evo.New(evo.Config{Title: "tool"})
os.Exit(evo.Main(out, run))
}
Lifecycle: run → (reconcile run error into model) → Finish → Close.
Exit codes:
- nil out → ExitFailed (2)
- Finish or Close error → ExitFailed (2) when conclusion was OK/blocked
- otherwise Conclusion.ExitCode after reconciling run errors into Fail
Config.FailedExitCode (when non-zero) overrides ExitFailed for a failed conclusion so CLIs that contract on exit 1 can set FailedExitCode: 1.
A non-nil application error is recorded as an output-level Fail before Finish so the human conclusion cannot show [ready] while the process fails.
func RenderPlain ¶
func RenderPlain(s Snapshot, opts PlainOptions) ([]byte, error)
RenderPlain projects a snapshot to plain text without terminal ownership.
Types ¶
type Action ¶
type Action struct {
Label string
Command *CommandSpec
URL string
File string
Explanation string
RequiresConfirmation bool
Destructive bool
}
Action is a recommended next step for the user.
type CapabilityProfile ¶
type CapabilityProfile struct {
Interactive bool
Color ColorLevel
Unicode bool
Width int
Height int
NoColor bool
}
CapabilityProfile holds terminal capability facts (§22).
func DetectCapabilities ¶
func DetectCapabilities(opts ...Option) CapabilityProfile
DetectCapabilities builds a profile from options and environment-like hints. It does not read the real environment in the core package without injection; callers pass NoColor/Width/NonInteractive options instead.
type Capture ¶ added in v0.1.1
type Capture struct {
// contains filtered or unexported fields
}
Capture is a process-output sink owned by a Task (preferred) or Output.
upgrade := out.Task("brew packages")
output := upgrade.Capture() // silent retention by default
if err := run.Run(ctx, "brew", args, output); err != nil {
upgrade.Fail("brew upgrade failed", evo.Cause(err), output.DetailTail())
return nil
}
upgrade.Done()
Combined streams by default (P1): Write (merged), Stdout(), and Stderr() all feed the same bounded ring used by Text/Tail/DetailTail. Linters and most subprocess tools write diagnostics on stderr — route both streams into the Capture (or write the combined pipe into Capture itself) so failure evidence cannot escape the owning Task.
Semantics:
- Always retains a bounded ring of sanitized lines (evidence exists even when debug presentation is disabled).
- Default is silent: no Diagnostics/Debug mirror on success.
- Opt in with MirrorToDiagnostics / MirrorToDebug.
- Stdout/Stderr have independent pending buffers (no partial-line merge).
- DetailTail is user-visible failure evidence; Cause is structured diagnostic.
- DetailTail prefers stderr when separate streams were used, else combined.
func (*Capture) Close ¶ added in v0.1.1
Close flushes trailing partial lines.
On the root Capture (task.Capture()), every stream pending buffer is flushed so Stdout/Stderr partial lines are retained. On a side writer (Stdout/Stderr), only that stream is flushed.
func (*Capture) DetailTail ¶ added in v0.1.2
func (c *Capture) DetailTail() ProblemOption
DetailTail returns a ProblemOption attaching a user-visible presentation of the capture tail. Prefers stderr when separate streams were used.
func (*Capture) Empty ¶ added in v0.1.1
Empty reports whether no completed lines and no pending fragments exist.
func (*Capture) Stderr ¶ added in v0.1.2
Stderr returns a writer that records lines as stderr with its own pending buffer.
func (*Capture) Stdout ¶ added in v0.1.2
Stdout returns a writer that records lines as stdout with its own pending buffer.
func (*Capture) TaskName ¶ added in v0.1.2
TaskName returns the owning task name when created via Task.Capture.
type CaptureOption ¶ added in v0.1.1
type CaptureOption interface {
// contains filtered or unexported methods
}
CaptureOption configures Capture.
func KeepLastLines ¶ added in v0.1.2
func KeepLastLines(n int) CaptureOption
KeepLastLines sets how many trailing lines are retained (default 200).
func MaxCaptureBytes ¶ added in v0.1.2
func MaxCaptureBytes(n int) CaptureOption
MaxCaptureBytes sets an approximate byte budget for retained lines (default 256KiB).
func MirrorToDebug ¶ added in v0.2.2
func MirrorToDebug() CaptureOption
MirrorToDebug journals each completed line via Debug when DebugLevel allows. Default is off.
func MirrorToDiagnostics ¶ added in v0.2.2
func MirrorToDiagnostics() CaptureOption
MirrorToDiagnostics copies each completed line to the Diagnostics writer. Default is off — Capture retains evidence without displaying on success.
type CaptureStream ¶ added in v0.2.2
type CaptureStream uint8
CaptureStream identifies which process stream a line came from.
const ( // CaptureStreamCombined is Write() on the Capture itself (merged by the runner). CaptureStreamCombined CaptureStream = iota // CaptureStreamStdout is output.Stdout(). CaptureStreamStdout // CaptureStreamStderr is output.Stderr(). CaptureStreamStderr )
type Changes ¶
type Changes struct {
// contains filtered or unexported fields
}
Changes is a handle for durable effects that already occurred.
type ChangesSnapshot ¶
type ChangesSnapshot struct {
ID string
Subject string
Records []EffectRecord
}
ChangesSnapshot is an immutable changes section.
type ColorLevel ¶
type ColorLevel int
ColorLevel describes terminal color support.
const ( ColorNone ColorLevel = iota ColorBasic Color256 ColorTrue )
type ColorMode ¶ added in v0.2.0
type ColorMode int
ColorMode selects color policy. The zero value is automatic.
func ParseColorMode ¶ added in v0.2.0
ParseColorMode maps always|never|auto (and common synonyms) to ColorMode.
type CommandSpec ¶
CommandSpec is an executable plus argv (never a shell string).
type Conclusion ¶
type Conclusion struct {
State ConclusionState
Subject string
Changed bool
Partial bool
Cancelled bool
Explanation string
Items []ItemSnapshot
Tasks []TaskSnapshot
Collections []TasksSnapshot
Changes []ChangesSnapshot
Plans []PlanSnapshot
Actions []Action
ExitCode int
}
Conclusion is the multidimensional meaning of a finished command.
func (Conclusion) AnyBlocked ¶
func (c Conclusion) AnyBlocked() bool
AnyBlocked reports whether the finished conclusion is blocked, or any item snapshot is.
type ConclusionJSON ¶
type ConclusionJSON struct {
State ConclusionState `json:"state"`
Changed bool `json:"changed"`
Partial bool `json:"partial"`
Cancelled bool `json:"cancelled"`
ExitCode int `json:"exit_code"`
Explanation string `json:"explanation,omitempty"`
}
ConclusionJSON is JSON-friendly conclusion.
type ConclusionState ¶
type ConclusionState string
ConclusionState is the human headline for a finished output.
const ( StateReady ConclusionState = "ready" StateChanged ConclusionState = "changed" StateUnchanged ConclusionState = "unchanged" StateWarning ConclusionState = "warning" StateBlocked ConclusionState = "blocked" StateFailed ConclusionState = "failed" StateCancelled ConclusionState = "cancelled" StatePlanned ConclusionState = "planned" StatePartial ConclusionState = "partial" )
type Config ¶
type Config struct {
// Title is the subject shown in the conclusion (formerly For's argument).
Title string
// Stdout is the ordinary human stream (default os.Stdout).
// In FormatData mode, Stdout is reserved for domain payload via ResultWriter;
// human presentation moves to Stderr.
Stdout io.Writer
// Stderr owns diagnostics by default (default os.Stderr).
Stderr io.Writer
// Result is an optional domain-payload writer. When nil and Format is
// FormatData, ResultWriter returns Stdout. Presentation never writes here.
Result io.Writer
// Verbosity gates Verbose() print messages (default VerbosityNormal).
Verbosity Verbosity
// Color policy (default ColorAuto).
Color ColorMode
// Format projection mode (default FormatHuman).
Format Format
// Debug configures the debug journal.
Debug DebugConfig
// Advanced (optional) — zero values inherit safe defaults.
Clock TimeSource
Redactor Redactor
Terminal TerminalDriver
Strict bool
Width int
// VisibilityDelay is the wait before the first live paint.
// nil means default (150ms). Non-nil is exact, including 0 for immediate.
// Use evo.Delay(d) to set a value from a duration literal.
VisibilityDelay *time.Duration
MaxFrameRate int
MaxEntities int
MaxEvents int
// ForcePlain disables live interactive frames even on a TTY.
ForcePlain bool
// NonInteractive disables live frames.
NonInteractive bool
// FailedExitCode is the process exit code when the conclusion is failed.
// Zero means use ExitFailed (2). Set to 1 for conventional CLI tools that
// treat any non-zero failure as exit 1 (e.g. quality gates / git hooks).
FailedExitCode int
}
Config is the ordinary application-facing construction surface.
Zero values mean automatic/default behavior. Use DefaultConfig() when you need a mutable baseline for advanced fields.
out := evo.New()
out := evo.New(evo.Config{Title: "bpp-csharp"})
cfg := evo.DefaultConfig(); cfg.Title = "x"; out := evo.New(cfg)
func DefaultConfig ¶ added in v0.2.0
func DefaultConfig() Config
DefaultConfig returns a fresh ordinary CLI configuration. Mutating the result does not affect later DefaultConfig() calls.
type DebugConfig ¶ added in v0.2.0
type DebugConfig struct {
// Level is the minimum debug journal level. Zero (LevelUnset) resolves to
// LevelInfo. Use LevelTrace or LevelDebug to surface Debug/Capture mirrors.
Level LogLevel
// View selects history vs pane presentation (default History).
View DebugPresentation
// PaneHeight is used when View is DebugPresentationPane (default 5).
PaneHeight int
// NewestFirst orders the pane (default true when zero-config pane).
NewestFirst *bool
// PreserveAlways forces a diagnostic tail on every Finish in pane mode.
PreserveAlways bool
}
DebugConfig configures the debug journal presentation.
type DebugPaneOption ¶
type DebugPaneOption interface {
// contains filtered or unexported methods
}
DebugPaneOption configures DebugPane presentation.
func NewestFirst ¶
func NewestFirst() DebugPaneOption
NewestFirst orders the pane with the most recent record first (default).
func OldestFirst ¶
func OldestFirst() DebugPaneOption
OldestFirst orders the pane chronologically (oldest visible first).
func PaneHeight ¶
func PaneHeight(lines int) DebugPaneOption
PaneHeight sets how many debug records are visible in the pane (not including heading).
func PreserveDebugTail ¶
func PreserveDebugTail() DebugPaneOption
PreserveDebugTail always emits a bounded diagnostic tail under the final report. Without this, pane mode still preserves a tail on failed/blocked/cancelled conclusions.
type DebugPresentation ¶
type DebugPresentation int
DebugPresentation selects how structured debug records project to a TTY (§4.6 / §21.3).
const ( // DebugPresentationHistory appends durable scrollback above the live region (default). DebugPresentationHistory DebugPresentation = iota // DebugPresentationPane keeps a bounded rolling viewport inside the live region. DebugPresentationPane )
type EffectRecord ¶
EffectRecord is one semantic change or plan row.
type EntityOption ¶ added in v0.2.3
type EntityOption interface {
// contains filtered or unexported methods
}
EntityOption configures Item or Task declaration (stable keys). The common path remains Item("label") / Task("label"); options are platform-scale.
func ID ¶ added in v0.2.3
func ID(id string) EntityOption
ID sets a stable machine key independent of the human label. Labels may be localized or reworded; IDs should not.
out.Task("download base image", evo.ID("build.base-image.download"))
type EntityState ¶
type EntityState string
EntityState is the lifecycle state of an item or task.
const ( Pending EntityState = "pending" Running EntityState = "running" OK EntityState = "ok" Done EntityState = "done" Warning EntityState = "warning" Blocked EntityState = "blocked" Failed EntityState = "failed" Unknown EntityState = "unknown" Skipped EntityState = "skipped" Cancelled EntityState = "cancelled" Empty EntityState = "empty" Incomplete EntityState = "incomplete" )
type Event ¶
type Event struct {
SchemaVersion string
Sequence uint64
Timestamp time.Time
Type string
OutputID string
EntityID string
Name string
State string
Completed *int64
Total *int64
Activation string
Payload map[string]any
}
Event is an immutable journal record.
type EventJSON ¶
type EventJSON struct {
SchemaVersion string `json:"schema_version"`
Sequence uint64 `json:"sequence"`
Type string `json:"type"`
OutputID string `json:"output_id,omitempty"`
EntityID string `json:"entity_id,omitempty"`
Name string `json:"name,omitempty"`
State string `json:"state,omitempty"`
Completed *int64 `json:"completed,omitempty"`
Total *int64 `json:"total,omitempty"`
Activation string `json:"activation,omitempty"`
Timestamp time.Time `json:"timestamp,omitempty"`
}
EventJSON is a JSON Lines event record (§25.2).
type Field ¶
Field is a structured diagnostic or log field.
type FixedClock ¶
FixedClock always returns the same instant.
type Format ¶ added in v0.2.0
type Format int
Format selects the overall projection mode. Zero is ordinary human output.
const ( // FormatHuman is ordinary human (and optional interactive) presentation. FormatHuman Format = iota // FormatData reserves stdout for the application's domain payload; Evo // human presentation goes to stderr (data-command mode). FormatData // FormatExternal disables inline rendering (snapshots only). FormatExternal )
type Item ¶
type Item struct {
// contains filtered or unexported fields
}
Item is a handle for one named final-report condition.
func (*Item) Block ¶
func (i *Item) Block(summary string, options ...ProblemOption) *Item
Block marks the item blocked with a simple problem.
func (*Item) Capture ¶ added in v0.2.7
func (i *Item) Capture(opts ...CaptureOption) *Capture
Capture returns a process-output sink bound to this Item (tool-backed gate). Presentation only — does not run the tool. Use when a condition is evaluated by an external command (git status, docker info, brew doctor, …).
docker := out.Item("docker daemon").Start()
cap := docker.Capture()
if err := runDockerInfo(cap); err != nil {
docker.Fail("could not inspect the daemon", evo.Cause(err), cap.DetailTail())
} else {
docker.OK()
}
func (*Item) Fail ¶
func (i *Item) Fail(summary string, options ...ProblemOption) *Item
Fail marks the item failed with a simple problem.
func (*Item) NextCommand ¶
NextCommand attaches a command action.
func (*Item) Snapshot ¶
func (i *Item) Snapshot() ItemSnapshot
Snapshot returns the item's current snapshot.
func (*Item) Start ¶
Start marks the item running so it becomes visible in the live region (indeterminate) while the application evaluates it. Optional: OK/Block/… may resolve pending items directly without Start (no transient frame when resolution is instant — §7.4 rule 5).
func (*Item) Unknown ¶
func (i *Item) Unknown(summary string, options ...ProblemOption) *Item
Unknown marks the item undetermined.
type ItemSnapshot ¶
type ItemSnapshot struct {
ID string
Key string // optional stable machine key (evo.ID); empty when unset
Name string
State EntityState
Problems []Problem
Because string
Actions []Action
Declaration int
}
ItemSnapshot is an immutable item view.
type JSONAction ¶
type JSONAction struct {
Label string `json:"label,omitempty"`
Command *JSONCommand `json:"command,omitempty"`
URL string `json:"url,omitempty"`
}
JSONAction is a wire-format action.
type JSONChanges ¶
type JSONChanges struct {
ID string `json:"id"`
Subject string `json:"subject"`
Records []JSONEffectRecord `json:"records"`
}
JSONChanges is wire-format changes.
type JSONCollection ¶
type JSONCollection struct {
ID string `json:"id"`
Name string `json:"name"`
State EntityState `json:"state"`
Summary string `json:"summary,omitempty"`
Children []string `json:"children"`
}
JSONCollection is a wire-format task collection with child IDs (§25.1).
type JSONCommand ¶
type JSONCommand struct {
Executable string `json:"executable"`
Args []string `json:"args,omitempty"`
}
JSONCommand is argv for display.
type JSONDocument ¶
type JSONDocument struct {
SchemaVersion string `json:"schema_version"`
Output JSONOutputMeta `json:"output"`
Conclusion ConclusionJSON `json:"conclusion"`
Items []JSONItem `json:"items"`
TaskCollections []JSONCollection `json:"task_collections"`
Tasks []JSONTask `json:"tasks"`
Changes []JSONChanges `json:"changes"`
Plans []JSONPlan `json:"plans"`
Messages []JSONMessage `json:"messages,omitempty"`
Actions []JSONAction `json:"actions"`
}
JSONDocument is the final machine projection (§25.1).
type JSONEffectRecord ¶
type JSONEffectRecord struct {
Verb string `json:"verb"`
Quantity *int64 `json:"quantity,omitempty"`
Object string `json:"object"`
}
JSONEffectRecord is a change/plan row.
type JSONItem ¶
type JSONItem struct {
ID string `json:"id"`
Key string `json:"key,omitempty"`
Name string `json:"name"`
State EntityState `json:"state"`
Problems []JSONProblem `json:"problems"`
Because string `json:"because,omitempty"`
}
JSONItem is a wire-format item.
type JSONMessage ¶ added in v0.2.0
type JSONMessage struct {
ID string `json:"id"`
Visibility string `json:"visibility"`
Text string `json:"text"`
}
JSONMessage is a wire-format user-facing message.
type JSONOutputMeta ¶
JSONOutputMeta identifies the output instance.
type JSONPlan ¶
type JSONPlan struct {
ID string `json:"id"`
Subject string `json:"subject"`
Records []JSONEffectRecord `json:"records"`
}
JSONPlan is wire-format plan.
type JSONProblem ¶
type JSONProblem struct {
Subject string `json:"subject,omitempty"`
Summary string `json:"summary,omitempty"`
Detail string `json:"detail,omitempty"`
Count int64 `json:"count,omitempty"`
Unit string `json:"unit,omitempty"`
Code string `json:"code,omitempty"`
}
JSONProblem is a wire-format problem (no raw Cause by default).
type JSONProgress ¶
type JSONProgress struct {
Kind ProgressKind `json:"kind"`
Completed int64 `json:"completed"`
Total int64 `json:"total"`
}
JSONProgress is wire-format progress.
type JSONTask ¶
type JSONTask struct {
ID string `json:"id"`
Key string `json:"key,omitempty"`
Name string `json:"name"`
State EntityState `json:"state"`
Phase string `json:"phase,omitempty"`
Summary string `json:"summary,omitempty"`
Progress *JSONProgress `json:"progress,omitempty"`
Problems []JSONProblem `json:"problems,omitempty"`
}
JSONTask is a wire-format task.
type LiveSurface ¶
type LiveSurface interface {
TerminalDriver
Columns() int
Rows() int
IsInteractive() bool
WriteLive(text string)
ClearLive()
WriteDurable(line string)
WriteFinal(text string)
}
LiveSurface is an interactive terminal sink for live-region rendering. testkit.Screen implements this; production drivers can as well.
type LogLevel ¶
type LogLevel int
LogLevel is a diagnostic severity.
The zero value is LevelUnset (Config resolves it to LevelInfo). Named levels start at LevelTrace so ordinary Config{Debug: DebugConfig{Level: LevelTrace}} is expressible without falling through the default path.
const ( // LevelUnset is the zero value. Config resolve maps it to LevelInfo. LevelUnset LogLevel = iota // LevelTrace is the most verbose journal level selectable via Config. LevelTrace // LevelDebug enables Debug journal lines (and Capture MirrorToDebug). LevelDebug // LevelInfo is the ordinary default (Debug journal suppressed). LevelInfo // LevelWarn is reserved for future warn-threshold filtering. LevelWarn // LevelError is reserved for future error-threshold filtering. LevelError )
type LogRecord ¶ added in v0.2.4
type LogRecord struct {
Time time.Time
Level slog.Level
Message string
Attrs []slog.Attr
PC uintptr
}
LogRecord is a complete internal log entry preserved from slog (or peer bridges). History and pane projectors read Time/Level/Message/Attrs without lossy remapping beyond the usual Field redaction path.
type MessageSnapshot ¶ added in v0.2.0
type MessageSnapshot struct {
ID string
Text string
Visibility Visibility
}
MessageSnapshot is one logical user-facing message in the canonical model.
type NoopRedactor ¶
type NoopRedactor struct{}
NoopRedactor leaves strings unchanged.
func (NoopRedactor) RedactString ¶
func (NoopRedactor) RedactString(s string) string
RedactString implements Redactor.
type Option ¶
type Option interface {
// contains filtered or unexported methods
}
Option configures an Output.
func AlsoWrite ¶
AlsoWrite adds an additional human projection writer. On Finish, each writer receives the plain projection; failures on one do not skip the others (CON-009).
func DataProjection ¶
func DataProjection() Option
DataProjection selects data-command mode (UI/progress on diagnostic stream).
func DebugHistory ¶
func DebugHistory() Option
DebugHistory selects durable append-above-and-redraw presentation (v0.4 default).
func DebugLevel ¶
DebugLevel sets the minimum debug emission level. Pass LevelTrace or LevelDebug to surface Debug journal lines.
func DebugPane ¶
func DebugPane(opts ...DebugPaneOption) Option
DebugPane selects a rolling TTY debug viewport at the bottom of the live region.
func Diagnostics ¶
Diagnostics sets the diagnostic writer for Debug history and Capture mirrors. When set and distinct from the primary writer (To), Debug lines are not also written to the human primary stream — use dual-stream for LaunchAgent / data-command layouts (human on stdout, diagnostics on stderr).
func ExternalProjection ¶
func ExternalProjection() Option
ExternalProjection selects snapshot-only host rendering.
func MaxEntities ¶
MaxEntities caps total items and tasks for one Output (0 uses default).
func MaxEvents ¶
MaxEvents caps durable journal events; when exceeded, oldest non-critical events are dropped so critical terminal events are retained (CON-008).
func MaxFrameRate ¶
MaxFrameRate caps interactive redraws per second.
func Plain ¶
func Plain() Option
Plain forces final-report projection (no live spinner region). Semantic color is still emitted unless NoColor is set.
func ResultStream ¶ added in v0.2.3
ResultStream sets the domain-payload writer (see Output.ResultWriter). Presentation never writes here. FormatData defaults this to Config.Stdout.
func Terminal ¶
func Terminal(driver TerminalDriver) Option
Terminal injects a terminal driver (interactive projection; v0.2).
func VisibilityDelay ¶
VisibilityDelay sets how long live activity must persist before the first interactive paint (default 150ms). Zero paints immediately. Prevents Phase→fast Done spinner flash (H.2). Domain TimeSource is used for the threshold.
type Output ¶
type Output struct {
// contains filtered or unexported fields
}
Output is the aggregate root for one command's presentation lifecycle.
func New ¶
New creates an Output from zero or one Config.
out := evo.New()
out := evo.New(evo.Config{Title: "repo"})
More than one Config panics (programmer error). For advanced Option plumbing use NewWithOptions.
func NewWithOptions ¶ added in v0.2.0
NewWithOptions is the advanced Option-based constructor for tests and specialized embedding (custom Terminal, Clock, etc.). Prefer New(Config) in application code.
Set the conclusion title with Title(...):
out := evo.NewWithOptions(evo.Title("install"), evo.To(&buf), evo.Plain())
func (*Output) AnyBlocked ¶
AnyBlocked reports whether any Item is currently in the Blocked state.
func (*Output) At ¶ added in v0.2.0
func (o *Output) At(visibility Visibility) *Printer
At returns a printer for the given visibility.
func (*Output) Capture ¶ added in v0.1.1
func (o *Output) Capture(opts ...CaptureOption) *Capture
Capture returns a session-level process sink with no owning Item/Task. Prefer Task.Capture or Item.Capture so failure evidence attaches to an entity. Session capture is advanced; ordinary call sites should not use it.
func (*Output) Changesf ¶ added in v0.2.0
Changesf formats a subject and declares a Changes section.
func (*Output) Conclusion ¶
func (o *Output) Conclusion() Conclusion
Conclusion returns the computed conclusion after Finish.
func (*Output) Debug ¶
Debug records a structured diagnostic (§4.6 / §21.3).
History mode (default): durable scrollback above the live region (or plain stream). Pane mode: record is journaled and shown in the rolling live pane; not durable scrollback unless a diagnostic tail is preserved at Finish.
When Diagnostics is configured and is a different writer than the primary stream, debug lines go to Diagnostics only (not the human Items/Tasks stream). Use Capture for child-process evidence instead of DebugWriter when you need Fail Detail.
func (*Output) DebugWriter ¶
func (o *Output) DebugWriter() io.WriteCloser
DebugWriter returns a line-oriented writer that emits Debug lines on newline. Partial UTF-8 sequences are buffered; control bytes are sanitized.
Prefer Capture for external process stdout/stderr: DebugWriter is filtered by DebugLevel (default LevelInfo drops all lines) and is the wrong dialect for child-command evidence used in Fail Detail. Use DebugWriter only when you intentionally want DEBUG-level journal lines (and set DebugLevel(Debug)).
func (*Output) Fail ¶
func (o *Output) Fail(summary string, options ...ProblemOption)
Fail records an output-level failure.
func (*Output) FinalPlain ¶
FinalPlain returns the last rendered plain text after Finish.
func (*Output) Finish ¶
Finish validates, computes conclusion, emits final projections. Projection I/O runs outside the domain lock (§17.1).
func (*Output) Item ¶
func (o *Output) Item(name string, opts ...EntityOption) *Item
Item declares a named final-report condition. Optional evo.ID sets a stable machine key.
func (*Output) Itemf ¶ added in v0.2.0
Itemf formats a name and declares an Item. Prefer Item + plain labels for stable presentation; use Itemf only when the label must embed a value and evo.ID is set for machine identity when needed.
func (*Output) NextCommand ¶
NextCommand attaches an output-level command action.
func (*Output) Print ¶ added in v0.2.0
Print formats like fmt.Sprint and enqueues human-facing text (line-buffered). Errors are recorded on the Output and returned by Finish/Main — not ignored mid-stream.
func (*Output) Printf ¶ added in v0.2.0
Printf formats like fmt.Sprintf and enqueues human-facing text (line-buffered).
func (*Output) Println ¶ added in v0.2.0
Println formats like fmt.Sprintln and enqueues a complete human-facing line.
func (*Output) ResultWriter ¶ added in v0.2.3
ResultWriter returns the domain-payload stream. Presentation never writes here.
In FormatData mode this is Config.Result if set, otherwise Config.Stdout — so machine JSON stays pure while Items/Tasks render on stderr. When no result stream is configured, returns io.Discard.
out := evo.New(evo.Config{Title: "build", Format: evo.FormatData})
// after work succeeds:
_ = json.NewEncoder(out.ResultWriter()).Encode(payload)
func (*Output) Scope ¶ added in v0.2.3
Scope returns a namespaced handle. It does not render a visible section.
func (*Output) SlogHandler ¶
SlogHandler returns a slog.Handler that journals every accepted record as structured diagnostics (history or pane), without mutating Output configuration.
Level policy is Config.Debug.Level (one conductor):
out := evo.New(evo.Config{
Debug: evo.DebugConfig{Level: evo.LevelDebug},
})
logger := slog.New(out.SlogHandler())
Application human prose uses Print/Printf/Println or Item/Task outcomes — not slog. Infrastructure diagnostics use slog through this handler.
func (*Output) Snapshots ¶
Snapshots returns a buffered channel of immutable snapshots. The channel is closed when the output is closed or finished. Callers should not block the library; buffer absorbs bursts.
func (*Output) Suspend ¶
Suspend temporarily pauses interactive presentation for host-owned output. In v0.3 plain/non-interactive mode this is a no-op around fn. With a live surface it clears the live region, runs fn, then resumes.
func (*Output) Task ¶
func (o *Output) Task(name string, opts ...EntityOption) *Task
Task declares a single operation. Optional evo.ID sets a stable machine key.
func (*Output) Taskf ¶ added in v0.2.0
Taskf formats a name and declares a root Task. Prefer Task(name, evo.ID(...)) when identity must outlive label wording.
type PlainOptions ¶
PlainOptions configures pure plain projection (§25.4).
type Plan ¶
type Plan struct {
// contains filtered or unexported fields
}
Plan is a handle for effects that would occur but have not.
type PlanSnapshot ¶
type PlanSnapshot struct {
ID string
Subject string
Records []EffectRecord
}
PlanSnapshot is an immutable plan section.
type Printer ¶ added in v0.2.0
type Printer struct {
// contains filtered or unexported fields
}
Printer is a visibility-scoped view of Output for Print/Printf/Println.
type Problem ¶
type Problem struct {
Code string
Subject string
Summary string
Detail string
Severity string
Count int64
Unit string
Location *Location
Evidence []Evidence
Actions []Action
Fields []Field
Cause error
Sensitive bool
}
Problem is structured evidence explaining a negative item or task outcome.
type ProblemOption ¶
type ProblemOption interface {
// contains filtered or unexported methods
}
ProblemOption configures a problem constructed by Block/Warn/Fail helpers.
func Cause ¶
func Cause(err error) ProblemOption
Cause attaches a diagnostic error (not shown by default in human output).
func Count ¶
func Count(value int64, unit ...string) ProblemOption
Count sets a quantity and optional unit.
func Detail ¶
func Detail(text string) ProblemOption
Detail sets user-visible detail text (strings only).
func DetailTail ¶ added in v0.1.1
func DetailTail(c *Capture) ProblemOption
DetailTail free-function form (prefer method on Capture).
func NextCommand ¶
func NextCommand(executable string, args ...string) ProblemOption
NextCommand attaches a recommended command action.
type Progress ¶
type Progress struct {
Kind ProgressKind
Completed int64
Total int64
}
Progress is absolute measurement for a task.
type ProgressKind ¶
type ProgressKind string
ProgressKind classifies task measurement.
const ( Indeterminate ProgressKind = "indeterminate" Determinate ProgressKind = "determinate" BytesKind ProgressKind = "bytes" )
type ProjectionPolicy ¶
type ProjectionPolicy int
ProjectionPolicy selects how output is emitted.
const ( // ProjectionAuto chooses based on options/TTY hints. ProjectionAuto ProjectionPolicy = iota // ProjectionHuman is interactive or plain human output. ProjectionHuman // ProjectionData keeps machine data on the primary writer; UI on diagnostic. ProjectionData // ProjectionExternal disables inline rendering; snapshots only. ProjectionExternal )
type Redactor ¶
type Redactor interface {
// RedactString returns a display-safe form of s.
RedactString(s string) string
}
Redactor redacts sensitive values before journal, Capture retention, and human rendering.
type Scope ¶ added in v0.2.3
type Scope struct {
// contains filtered or unexported fields
}
Scope is a namespaced declaration handle for plugins and subsystems.
Contract (honest limits):
Qualifies evo.ID keys as "scope.key" for stable machine identity.
Exposes only Item, Task, and Tasks — operations that actually take the namespace.
Is NOT a security sandbox: plugins holding *Output bypass Scope entirely.
Session Capture, Writer, and SlogHandler stay on *Output (shared session).
registry := out.Scope("registry") registry.Item("credentials", evo.ID("auth")).OK() // key → "registry.auth"
func (*Scope) Item ¶ added in v0.2.3
func (s *Scope) Item(name string, opts ...EntityOption) *Item
Item declares an item; optional evo.ID is prefixed with the scope name.
type Snapshot ¶
type Snapshot struct {
Version uint64
OutputID string
Subject string
Items []ItemSnapshot
Tasks []TaskSnapshot
Collections []TasksSnapshot
Changes []ChangesSnapshot
Plans []PlanSnapshot
Messages []MessageSnapshot
// Lines is a derived compatibility projection of projected message texts
// (and legacy debug history lines). Prefer Messages for structured consumers.
Lines []string
Actions []Action
Conclusion *Conclusion
Timestamp time.Time
}
Snapshot is an immutable complete presentation state at a version.
type Task ¶
type Task struct {
// contains filtered or unexported fields
}
Task is a handle for one operation with phases or progress.
func (*Task) Advance ¶
Advance increments completed progress by delta. Advanced relative helper — prefer absolute Progress in ordinary code.
func (*Task) Capture ¶ added in v0.1.2
func (t *Task) Capture(opts ...CaptureOption) *Capture
Capture returns a process-output sink bound to this Task.
func (*Task) Done ¶
Done resolves the task successfully. Optional one summary: Done("modules cached"). More than one summary panics.
func (*Task) Donef ¶
Donef resolves the task with a formatted summary. Prefer Done("text") when there are no format directives.
func (*Task) Fail ¶
func (t *Task) Fail(summary string, options ...ProblemOption) *Task
Fail resolves the task as failed.
func (*Task) NextCommand ¶
NextCommand attaches a command action.
func (*Task) Progress ¶
Progress sets absolute completed/total count progress. Counts use int (collection lengths, indices). For byte quantities use Bytes. Prefer absolute Progress over Advance so retries cannot double-count.
func (*Task) Progress64 ¶ added in v0.2.0
Progress64 is an advanced absolute count API for quantities outside the int range. Ordinary call sites should use Progress(int, int) or Bytes for byte totals.
type TaskSnapshot ¶
type TaskSnapshot struct {
ID string
Key string // optional stable machine key (evo.ID); empty when unset
Name string
State EntityState
Phase string
Progress Progress
Summary string
Problems []Problem
Actions []Action
Collection string
Declaration int
}
TaskSnapshot is an immutable task view.
type Tasks ¶
type Tasks struct {
// contains filtered or unexported fields
}
Tasks is a handle for a collection of independent child tasks. State is always derived from children; no Done/Fail/Progress methods.
func (*Tasks) Snapshot ¶
func (g *Tasks) Snapshot() TasksSnapshot
Snapshot returns the collection snapshot with derived state.
type TasksSnapshot ¶
type TasksSnapshot struct {
ID string
Name string
State EntityState
Summary string
Tasks []TaskSnapshot
Declaration int
}
TasksSnapshot is an immutable collection view.
type TerminalDriver ¶
type TerminalDriver interface {
ID() string
}
TerminalDriver is the exclusive owner of terminal control sequences. Interactive implementation arrives in v0.2; the interface is defined early so options and tests compile.
type TimeSource ¶
TimeSource provides the current time for deterministic tests. Option constructor is Clock(TimeSource) to match the public API examples.
type UsageError ¶ added in v0.2.0
UsageError is a programmer/user configuration error.
func (*UsageError) Error ¶ added in v0.2.0
func (e *UsageError) Error() string
type Verbosity ¶ added in v0.2.0
type Verbosity int
Verbosity selects which message visibilities are projected to the human stream. Zero is normal (non-verbose) human detail.
type Visibility ¶ added in v0.2.0
type Visibility uint8
Visibility selects whether a message is ordinary or verbose user detail. Zero is Normal.
const ( // Normal messages always project at VerbosityNormal. Normal Visibility = iota // Verbose messages project only when Config.Verbosity is VerbosityVerbose. Verbose )
Source Files
¶
- action.go
- capability.go
- capture.go
- changes.go
- clock.go
- coalesce.go
- conclusion.go
- config.go
- construct.go
- debug.go
- debug_writer.go
- doc.go
- entity.go
- errors.go
- event.go
- field.go
- format_constructors.go
- item.go
- jsonout.go
- live.go
- option.go
- output.go
- plain.go
- plan.go
- print.go
- problem.go
- progressive.go
- projection.go
- redact.go
- release.go
- run.go
- slog.go
- snapshot.go
- snapshots.go
- state.go
- suspend.go
- task.go
- tasks.go
- utf8util.go
- writer.go
Directories
¶
| Path | Synopsis |
|---|---|
|
agent
|
|
|
catalog
Package catalog is the task-oriented guidance catalog for agent assistance.
|
Package catalog is the task-oriented guidance catalog for agent assistance. |
|
harness
Package harness evaluates agent-assistance scenarios (§30.9, MCP-022/049).
|
Package harness evaluates agent-assistance scenarios (§30.9, MCP-022/049). |
|
preview
Package preview generates multi-profile plain previews from snapshots.
|
Package preview generates multi-profile plain previews from snapshots. |
|
review
Package review provides deterministic static review of Evident Output usage.
|
Package review provides deterministic static review of Evident Output usage. |
|
rules
Package rules is the stable review-rule registry (Appendix C namespaces).
|
Package rules is the stable review-rule registry (Appendix C namespaces). |
|
cmd
|
|
|
evident-output
command
Command evident-output provides review/preview/explain CLI parity with MCP tools.
|
Command evident-output provides review/preview/explain CLI parity with MCP tools. |
|
evident-output-mcp
command
Command evident-output-mcp is the stdio MCP server.
|
Command evident-output-mcp is the stdio MCP server. |
|
examples
|
|
|
data-command
command
Command data-command: domain JSON on stdout, human presentation on stderr.
|
Command data-command: domain JSON on stdout, human presentation on stderr. |
|
debug-history
command
Command debug-history demos durable debug scrollback via slog.
|
Command debug-history demos durable debug scrollback via slog. |
|
debug-pane
command
Command debug-pane demos rolling slog-text viewport.
|
Command debug-pane demos rolling slog-text viewport. |
|
doctor
command
Command doctor is an environment/health check CLI.
|
Command doctor is an environment/health check CLI. |
|
install-pipeline
command
Command install-pipeline demos Tasks, Progress, Capture, and Main.
|
Command install-pipeline demos Tasks, Progress, Capture, and Main. |
|
internal/demo
Package demo is reserved for advanced example utilities.
|
Package demo is reserved for advanced example utilities. |
|
live-progress
command
Command live-progress is the ordinary multi-progress demo (user API only).
|
Command live-progress is the ordinary multi-progress demo (user API only). |
|
migrate
command
Command migrate shows dry-run Plan vs applied Changes.
|
Command migrate shows dry-run Plan vs applied Changes. |
|
print
command
Command print is the first adoption rung: Print/Printf/Println like fmt.
|
Command print is the first adoption rung: Print/Printf/Println like fmt. |
|
repo-status
command
Command repo-status is a realistic "is this repo safe to retire?" check.
|
Command repo-status is a realistic "is this repo safe to retire?" check. |
|
scope-plugin
command
Command scope-plugin demos evo.Scope + evo.ID for plugin-owned presentation.
|
Command scope-plugin demos evo.Scope + evo.ID for plugin-owned presentation. |
|
terminal-driver
command
Command terminal-driver is an advanced teaching surface: custom TerminalDriver, frame-by-frame logging, and explicit renderer knobs.
|
Command terminal-driver is an advanced teaching surface: custom TerminalDriver, frame-by-frame logging, and explicit renderer knobs. |
|
verbose
command
Command verbose shows Normal vs Verbose message visibility.
|
Command verbose shows Normal vs Verbose message visibility. |
|
internal
|
|
|
sanitize
Package sanitize neutralizes untrusted text for terminal-safe display.
|
Package sanitize neutralizes untrusted text for terminal-safe display. |
|
width
Package width computes terminal cell widths for display text.
|
Package width computes terminal cell widths for display text. |
|
scripts
|
|
|
sync-release-pins
command
Command sync-release-pins rewrites install pins on portable surfaces to match evo.PublishedRelease.
|
Command sync-release-pins rewrites install pins on portable surfaces to match evo.PublishedRelease. |
|
traceability-check
command
Command traceability-check verifies every expected §31 ID is present.
|
Command traceability-check verifies every expected §31 ID is present. |
|
Package terminal provides production terminal drivers for Evident Output.
|
Package terminal provides production terminal drivers for Evident Output. |
|
Package testkit provides deterministic clocks, screens, and assertions for evo tests.
|
Package testkit provides deterministic clocks, screens, and assertions for evo tests. |