← back to Cli Printing Press
feat(cli): rename What's New Here to Unique Features, move after Quick Start
1b4b984478b20c7826f3b7943b8738b77cc38821 · 2026-04-05 21:25:45 -0700 · Trevin Chow
- Rename section heading from "What's New Here" to "Unique Features"
- Move section from after Troubleshooting to after Quick Start
- Switch format from H3 + paragraph + blockquote to compact bullet list
- Remove arbitrary cap of 5 novel features — list all scoring >= 5/10
- Update template, tests, SKILL.md, and polish-worker agent
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Files touched
M agents/polish-worker.mdM internal/generator/generator_test.goM internal/generator/templates/readme.md.tmplM skills/printing-press/SKILL.md
Diff
commit 1b4b984478b20c7826f3b7943b8738b77cc38821
Author: Trevin Chow <trevin@trevinchow.com>
Date: Sun Apr 5 21:25:45 2026 -0700
feat(cli): rename What's New Here to Unique Features, move after Quick Start
- Rename section heading from "What's New Here" to "Unique Features"
- Move section from after Troubleshooting to after Quick Start
- Switch format from H3 + paragraph + blockquote to compact bullet list
- Remove arbitrary cap of 5 novel features — list all scoring >= 5/10
- Update template, tests, SKILL.md, and polish-worker agent
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---
agents/polish-worker.md | 18 +++++++-----------
internal/generator/generator_test.go | 23 +++++++++--------------
internal/generator/templates/readme.md.tmpl | 22 +++++++++-------------
skills/printing-press/SKILL.md | 19 +++++++++----------
4 files changed, 34 insertions(+), 48 deletions(-)
diff --git a/agents/polish-worker.md b/agents/polish-worker.md
index 53d07f1b..063b1666 100644
--- a/agents/polish-worker.md
+++ b/agents/polish-worker.md
@@ -119,7 +119,7 @@ placeholders signal an unfinished product.
#### Inject novel features from research
-If the README lacks a `## What's New Here` section, check whether the
+If the README lacks a `## Unique Features` section, check whether the
manuscript archive has novel features to surface:
```bash
@@ -133,22 +133,18 @@ done
```
If `RESEARCH_JSON` exists, read it and check for a `novel_features` array.
-If that array is non-empty and the README has no `## What's New Here`
-heading, inject the section **before `## Sources & Inspiration`** (or
-before the `Generated by` footer if no Sources section exists).
+If that array is non-empty and the README has no `## Unique Features`
+heading, inject the section **after `## Quick Start`** (or before
+`## Usage` if Quick Start doesn't exist).
Format each feature exactly as the generator template does:
```markdown
-## What's New Here
+## Unique Features
-These capabilities don't exist in any other tool for this API.
+These capabilities aren't available in any other tool for this API.
-### `<CLI_NAME> <command>`
-
-<description>
-
-> <rationale>
+- **`<command>`** — <description>
```
Before injecting, verify each feature's `command` actually exists in the
diff --git a/internal/generator/generator_test.go b/internal/generator/generator_test.go
index dab15d5a..4a464ac4 100644
--- a/internal/generator/generator_test.go
+++ b/internal/generator/generator_test.go
@@ -437,11 +437,10 @@ func TestGeneratedOutput_READMENovelFeaturesSection(t *testing.T) {
readme, err := os.ReadFile(filepath.Join(outputDir, "README.md"))
require.NoError(t, err)
content := string(readme)
- assert.Contains(t, content, "## What's New Here")
- assert.Contains(t, content, "### `testapi-pp-cli health`")
- assert.Contains(t, content, "### `testapi-pp-cli triage`")
+ assert.Contains(t, content, "## Unique Features")
+ assert.Contains(t, content, "**`health`**")
+ assert.Contains(t, content, "**`triage`**")
assert.Contains(t, content, "See scheduling health metrics at a glance")
- assert.Contains(t, content, "> Requires correlating bookings and schedules in the local store")
})
t.Run("section absent with no novel features", func(t *testing.T) {
@@ -451,7 +450,7 @@ func TestGeneratedOutput_READMENovelFeaturesSection(t *testing.T) {
readme, err := os.ReadFile(filepath.Join(outputDir, "README.md"))
require.NoError(t, err)
- assert.NotContains(t, string(readme), "What's New Here")
+ assert.NotContains(t, string(readme), "Unique Features")
})
t.Run("single novel feature still renders section", func(t *testing.T) {
@@ -464,27 +463,23 @@ func TestGeneratedOutput_READMENovelFeaturesSection(t *testing.T) {
readme, err := os.ReadFile(filepath.Join(outputDir, "README.md"))
require.NoError(t, err)
- assert.Contains(t, string(readme), "## What's New Here")
+ assert.Contains(t, string(readme), "## Unique Features")
})
- t.Run("novel features appear before sources", func(t *testing.T) {
+ t.Run("novel features appear before usage", func(t *testing.T) {
outputDir := filepath.Join(t.TempDir(), "testapi-pp-cli")
gen := New(minSpec, outputDir)
gen.NovelFeatures = []NovelFeature{
{Name: "Health dashboard", Command: "health", Description: "Metrics", Rationale: "Local data"},
}
- gen.Sources = []ReadmeSource{
- {Name: "a", URL: "https://github.com/org/a", Stars: 100},
- {Name: "b", URL: "https://github.com/org/b", Stars: 50},
- }
require.NoError(t, gen.Generate())
readme, err := os.ReadFile(filepath.Join(outputDir, "README.md"))
require.NoError(t, err)
content := string(readme)
- novelIdx := strings.Index(content, "What's New Here")
- sourcesIdx := strings.Index(content, "Sources & Inspiration")
- assert.Greater(t, sourcesIdx, novelIdx, "Novel features should appear before Sources")
+ novelIdx := strings.Index(content, "Unique Features")
+ usageIdx := strings.Index(content, "## Usage")
+ assert.Greater(t, usageIdx, novelIdx, "Unique Features should appear before Usage")
})
}
diff --git a/internal/generator/templates/readme.md.tmpl b/internal/generator/templates/readme.md.tmpl
index 34c7b057..c399389a 100644
--- a/internal/generator/templates/readme.md.tmpl
+++ b/internal/generator/templates/readme.md.tmpl
@@ -98,6 +98,15 @@ This checks your configuration{{if and (ne .Auth.Type "") (ne .Auth.Type "none")
{{- break}}
{{- end}}
```
+{{- if .NovelFeatures}}
+
+## Unique Features
+
+These capabilities aren't available in any other tool for this API.
+{{range .NovelFeatures}}
+- **`{{.Command}}`** — {{.Description}}
+{{- end}}
+{{- end}}
## Usage
@@ -207,19 +216,6 @@ Environment variables:
- If persistent, wait a few minutes and try again
---
-{{- if .NovelFeatures}}
-
-## What's New Here
-
-These capabilities don't exist in any other tool for this API.
-{{range .NovelFeatures}}
-### `{{$.Name}}-pp-cli {{.Command}}`
-
-{{.Description}}
-
-> {{.Rationale}}
-{{end}}
-{{- end}}
{{- if or (gt (len .Sources) 1) (gt (len .DiscoveryPages) 0)}}
## Sources & Inspiration
diff --git a/skills/printing-press/SKILL.md b/skills/printing-press/SKILL.md
index 60752b8e..53643844 100644
--- a/skills/printing-press/SKILL.md
+++ b/skills/printing-press/SKILL.md
@@ -844,13 +844,12 @@ REOF
For each tool, fill in what you know from the research. Stars and command_count are optional (use 0 if unknown). The `language` field should match the primary implementation language. Skip tools that were found during search but contributed zero features to the manifest.
-**Novel features rules** (the `novel_features` array populates the README's "What's New Here" section):
-1. Only include transcendence features from the manifest that scored >= 5/10
-2. Cap at 5, ordered by score descending. A focused selection reads better than an exhaustive list.
-3. `description` should be user-benefit language, not implementation detail. Good: "See which team members are overloaded before sprint planning." Bad: "Requires local join across issues + assignees + cycle data."
-4. `rationale` should explain why this is only possible with our approach. Good: "Requires correlating bookings, schedules, and staff data that only exists together in the local store." Bad: "Cal.com Insights is paid-tier only."
-5. `command` must match the actual CLI subcommand that will be built in Phase 3. For subcommands of a resource (e.g., `issues stale`), use the full command path.
-6. If no transcendence features scored >= 5/10, omit the `novel_features` field entirely.
+**Novel features rules** (the `novel_features` array populates the README's "Unique Features" section):
+1. Include all transcendence features from the manifest that scored >= 5/10. Order by score descending.
+2. `description` should be user-benefit language, not implementation detail. Good: "See which team members are overloaded before sprint planning." Bad: "Requires local join across issues + assignees + cycle data."
+3. `rationale` should explain why this is only possible with our approach. Good: "Requires correlating bookings, schedules, and staff data that only exists together in the local store." Bad: "Cal.com Insights is paid-tier only."
+4. `command` must match the actual CLI subcommand that will be built in Phase 3. For subcommands of a resource (e.g., `issues stale`), use the full command path.
+5. If no transcendence features scored >= 5/10, omit the `novel_features` field entirely.
Also write discovery pages if sniff was used. The generator reads these from `$API_RUN_DIR/discovery/sniff-report.md` (which the sniff gate already writes there). No additional action needed for discovery pages -- they are already in the right location.
@@ -1284,9 +1283,9 @@ Fix order (update heartbeat between each fix category to prevent stale lock duri
**Missing novel features fix (step 5):** Dogfood writes `novel_features_built` to research.json — only features whose commands actually exist. The original `novel_features` (aspirational list from absorb) is preserved for the audit trail. After dogfood:
-1. If the README has a `## What's New Here` section from initial generation, update it to match `novel_features_built` — remove entries for commands that don't exist
-2. If `novel_features_built` is empty (none survived), remove the entire `## What's New Here` section from the README
-3. If the README doesn't have the section yet but `novel_features_built` is non-empty, inject it (same format as the template) before `## Sources & Inspiration` or the `Generated by` footer
+1. If the README has a `## Unique Features` section from initial generation, update it to match `novel_features_built` — remove entries for commands that don't exist
+2. If `novel_features_built` is empty (none survived), remove the entire `## Unique Features` section from the README
+3. If the README doesn't have the section yet but `novel_features_built` is non-empty, inject it (same format as the template) after `## Quick Start` or before `## Usage`
4. Log which features were dropped (planned vs built delta)
After fixing each category, update the heartbeat:
← 96b9b42c feat(cli): flow transcendence features into generated README
·
back to Cli Printing Press
·
fix(cli): generate correct library install path in READMEs d9629475 →