fix(0.2): adopter-facing polish caught running the binary cold#166
Merged
fix(0.2): adopter-facing polish caught running the binary cold#166
Conversation
Five user-visible issues caught by running 'terrain analyze' and 'terrain report pr' against a fresh repo and against this repo's own diff before tagging 0.2.0. None of the existing tests caught these — they're shape-of-output issues that only surface when a human reads the output. 1. Help text leads with the pitch, not the legacy tagline `terrain --help` opened with "Terrain — test system intelligence platform" — the framing the parity plan and #137 explicitly moved away from. Changed to the pitch ("the control plane for your test system") + the one-paragraph promise so the help text matches the README and vision doc. 2. Pluralization in the analyze headline Fresh-repo analyze said "1 test files across 1 frameworks". Now properly pluralizes singular and plural via the existing plural() helper. 3. Empty-repo headline lied about health A repo with zero test files used to render "Your test suite looks healthy: 0 test files across 0 frameworks." — calling absence of tests "healthy" is wrong on its face. Now renders "No test files detected. Add tests with your framework of choice, then re-run `terrain analyze`." 4. PR-comment percentage rounded sub-1% selections to 0% "Tests selected | 7 of 796 (0% of suite)" was technically integer-truncation but read as "selection ran and produced nothing". Now displays "<1%" for sub-1% fractions; the formatSuitePercent helper centralizes the formatting so other surfaces can adopt it. 5. "Exported function X" misnomer for non-functions The protection-gap message claimed every exported symbol was a "function", regardless of CodeUnitKind. Adopters with an exported var (like `cli.Default`) or type (`cli.Registry`) saw "Exported function Default has no observed test coverage." Now the kind is read from CodeUnit.Kind and rendered with the matching noun ("Exported method", "Exported class", "Exported module"), with "Exported symbol" as the neutral fallback for kinds the parser didn't classify. How these were caught I built the binary, ran `terrain analyze` and `terrain report pr` on this repo and on a 1-file fresh fixture, and read the output the way an adopter would. Each issue was a paper-cut that existing tests don't assert on (the test goldens cover shape; they don't catch wrong nouns or rounded percentages). These are pure polish — no behavior changes, no new features, no schema changes. Locks the existing experience to be honest and accurate before tag. Verification: full Go test suite green; all five release-readiness gates pass (docs-verify, docs-linkcheck, truth-verify, voice-lint, make build); manual smoke against a fresh-repo + this-repo confirms the user-visible changes render as expected. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
[RISK] Terrain — Merge with caution
Coverage gaps in changed code
4 pre-existing issues on changed files
Recommended tests4 test(s) with exact coverage of 5 impacted unit(s). 6 impacted unit(s) have no covering tests in the selected set.
Owners: PMCLSF Limitations
Generated by Terrain · Targeted Test ResultsTerrain selected 4 test(s) instead of the full suite.
|
Terrain AI Risk Review
Decision: PASS — AI surfaces are covered. |
pmclSF
added a commit
that referenced
this pull request
May 9, 2026
Five user-visible issues caught by running 'terrain analyze' and 'terrain report pr' against a fresh repo and against this repo's own diff before tagging 0.2.0. None of the existing tests caught these — they're shape-of-output issues that only surface when a human reads the output. 1. Help text leads with the pitch, not the legacy tagline `terrain --help` opened with "Terrain — test system intelligence platform" — the framing the parity plan and #137 explicitly moved away from. Changed to the pitch ("the control plane for your test system") + the one-paragraph promise so the help text matches the README and vision doc. 2. Pluralization in the analyze headline Fresh-repo analyze said "1 test files across 1 frameworks". Now properly pluralizes singular and plural via the existing plural() helper. 3. Empty-repo headline lied about health A repo with zero test files used to render "Your test suite looks healthy: 0 test files across 0 frameworks." — calling absence of tests "healthy" is wrong on its face. Now renders "No test files detected. Add tests with your framework of choice, then re-run `terrain analyze`." 4. PR-comment percentage rounded sub-1% selections to 0% "Tests selected | 7 of 796 (0% of suite)" was technically integer-truncation but read as "selection ran and produced nothing". Now displays "<1%" for sub-1% fractions; the formatSuitePercent helper centralizes the formatting so other surfaces can adopt it. 5. "Exported function X" misnomer for non-functions The protection-gap message claimed every exported symbol was a "function", regardless of CodeUnitKind. Adopters with an exported var (like `cli.Default`) or type (`cli.Registry`) saw "Exported function Default has no observed test coverage." Now the kind is read from CodeUnit.Kind and rendered with the matching noun ("Exported method", "Exported class", "Exported module"), with "Exported symbol" as the neutral fallback for kinds the parser didn't classify. How these were caught I built the binary, ran `terrain analyze` and `terrain report pr` on this repo and on a 1-file fresh fixture, and read the output the way an adopter would. Each issue was a paper-cut that existing tests don't assert on (the test goldens cover shape; they don't catch wrong nouns or rounded percentages). These are pure polish — no behavior changes, no new features, no schema changes. Locks the existing experience to be honest and accurate before tag. Verification: full Go test suite green; all five release-readiness gates pass (docs-verify, docs-linkcheck, truth-verify, voice-lint, make build); manual smoke against a fresh-repo + this-repo confirms the user-visible changes render as expected. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Five user-visible issues caught by actually running
terrain analyzeandterrain report pragainst a fresh repo + this repo before cutting 0.2.0. None of the existing tests caught these — they're shape-of-output issues that only surface to a human reading the output.terrain --helpopened with the old "test system intelligence platform" framing.varsaw it labeled a "function".Pure polish, no behavior or schema changes.
Test plan
Plan tracker
This is the kind of quality-bar work the parity plan calls 'first-user smoke gate' work — caught by reading output, not by asserting on goldens. With this in, the release reads honestly to a new adopter.