Skip to content

Milestone: v0.5 beta — contracts locked, release workflow proven #4

Description

@tig

Tracks the third milestone in specs/clet-spec.md §7. This is the lock-in milestone: anything that ships in v1.0 is determined here, and contracts published past this point cannot break without a schemaVersion bump per §4.3.1.

Exit criteria — locks

  • Naming locked. "clet" is the name. Aliases for the 14 input clets and md are final.
  • JSON schema locked (§4.3, §4.3.1, §4.3.2). schemaVersion: 1 is the contract for all of clet 1.x. No type field on envelopes. Cancel envelope is {"schemaVersion":1,"status":"cancelled"}. Per-clet value shapes per the §4.3.2 table.
  • Exit-code table locked (§4.8).
  • v1.0 input list (14) and viewer list (1: md) locked. Notable absence: password. Additional viewers (json, log, diff) explicitly deferred to v2.

Exit criteria — md viewer

  • md viewer clet implemented per §4.5 viewer pattern; uses TG's Markdown View end-to-end.
  • Link safety verified: default SurfaceOnly policy per Appendix A; --allow-link-open opts in.
  • clet --help and clet help render via the same Markdown View pipeline (§4.7), replacing the v0.11 plain-text help.

Exit criteria — distribution

  • dotnet tool install -g Terminal.Gui.clet packs and installs locally (mdv pattern, see D-019).
  • Continuous-release loop wired up and proven on the develop channel (D-020). Real tg-develop-published dispatch from TG fires the workflow; Terminal.Gui.clet 2.0.2-develop.35 shipped to nuget.org autonomously; dotnet tool install -g Terminal.Gui.clet --prerelease resolves it from the public feed.

Exit criteria — verification

  • Four-terminal manual matrix passes per §6.5 (macOS Terminal, iTerm2, Windows Terminal, GNOME Terminal × clet text, clet pick-file, clet md, theme switch, mouse, inline restore). Captured in release-checklist issue #23.
  • Inline rendering confirmed inline (cursor restore, no scrollback dump) on all four.

Exit criteria — pipeline + threat model

  • Threat model published per Appendix A: untrusted-input boundaries, terminal-escape sanitization, --title sanitization, Markdown link policy, file-access scope, plugin-loading exclusion. (docs/threat-model.md)
  • #5 Open Question: clet md content source (file arg, stdin, or both) decided and shipped. (D-015)
  • Upstream PR/FAQ at Terminal.Gui#5155 updated to match the spec (no longer references Terminal.Gui.Clets as a separate assembly).

Moved to v0.9 RC (#5)

The following criteria were originally tracked here but are gated on a real TG release tag and don't block v0.5 lock-in. They live in #5 now:

  • Release workflow proven against a real TG release cut. Develop-channel half is done (Terminal.Gui.clet 2.0.2-develop.35 shipped end-to-end via tg-develop-published); release-tag half is captured under "One real release cycle end-to-end" in #5.
  • Homebrew tap + WinGet manifest in working draft form. Currently placeholder echoes per D-012 (build-from-source acceptable for first release). Tracked under "Operational" / "Homebrew formula + WinGet manifest in working-draft form" in #5.

Terminal.Gui dependency

The original criterion read "By v0.5 the Terminal.Gui dependency must be a release tag, not a *-develop.* preview NuGet." That has been superseded by D-020 — clet now uses a <TerminalGuiVersion> MSBuild variable in src/Clet/Clet.csproj, set per-build from the dispatch payload. There is no longer a "pin to remove" — clet builds against whatever TG version the dispatch names. The §8 risk row tracking the pin is resolved in the spec.

  • #5157 and #5158 shipped on TG develop. (Release-tag promotion no longer required to close v0.5; the develop pin is gone per D-020.)
  • #5156 (Markdown View golden-file rendering tests) — resolved.
  • src/Clet/Clet.csproj Terminal.Gui PackageReference updated from *-develop.* to a TG 2.x.y release version — superseded by D-020. csproj uses <PackageReference Include="Terminal.Gui" Version="$(TerminalGuiVersion)" />; the workflow overrides per dispatch.

Kill criteria

Per the press release: we walk away from v1.0 if at v0.9 any of the following is unresolved:

  • Inline rendering doesn't actually feel inline across the four target terminals.
  • AI-agent JSON contract churn (consumers stop trusting it).
  • Native-installer pipeline that breaks on every release.
  • The Markdown View losing ground to glow on common Markdown variants.

v0.5 is where these become measurable, not vibes.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions