[object Object]

← back to Cli Printing Press

feat(skills): reconcile prior novel features on reprint (#329)

5966298e75007394a2f44afafac9eb9292d7acb2 · 2026-04-26 23:44:10 -0700 · Trevin Chow

When the printing press reprints a CLI for which a prior research.json
exists, Step 1.5c.5 now treats the prior novel-feature list as candidate
input rather than letting it be silently absorbed or silently ignored.
Each prior feature is re-scored against the current personas and tagged
keep / reframe / drop, with drops surfaced at the Phase 1.5 gate so the
user can override.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 5966298e75007394a2f44afafac9eb9292d7acb2
Author: Trevin Chow <trevin@trevinchow.com>
Date:   Sun Apr 26 23:44:10 2026 -0700

    feat(skills): reconcile prior novel features on reprint (#329)
    
    When the printing press reprints a CLI for which a prior research.json
    exists, Step 1.5c.5 now treats the prior novel-feature list as candidate
    input rather than letting it be silently absorbed or silently ignored.
    Each prior feature is re-scored against the current personas and tagged
    keep / reframe / drop, with drops surfaced at the Phase 1.5 gate so the
    user can override.
    
    Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 skills/printing-press/SKILL.md                     |  5 ++
 skills/printing-press/references/absorb-scoring.md | 65 +++++++++++++++++++++-
 2 files changed, 69 insertions(+), 1 deletion(-)

diff --git a/skills/printing-press/SKILL.md b/skills/printing-press/SKILL.md
index df5ce270..d1af9802 100644
--- a/skills/printing-press/SKILL.md
+++ b/skills/printing-press/SKILL.md
@@ -1098,6 +1098,11 @@ Minimum 5 transcendence features. These are the commands that differentiate the
 **This step runs automatically.** Read [references/absorb-scoring.md](references/absorb-scoring.md)
 for the gap analysis framework, scoring dimensions, and candidate generation process.
 
+**On reprints, the same reference file's "Reprint Reconciliation" section runs as a forcing
+function**: every prior novel feature is re-scored against the current personas and tagged
+keep / reframe / drop with a one-line justification. Prior features are never silently
+absorbed and never silently dropped.
+
 ### Step 1.5d: Write the manifest artifact
 
 Write to `$RESEARCH_DIR/<stamp>-feat-<api>-pp-cli-absorb-manifest.md`
diff --git a/skills/printing-press/references/absorb-scoring.md b/skills/printing-press/references/absorb-scoring.md
index 426b52cc..e1427a32 100644
--- a/skills/printing-press/references/absorb-scoring.md
+++ b/skills/printing-press/references/absorb-scoring.md
@@ -73,6 +73,69 @@ with no external dependencies."
 
 If you can't write that sentence, the feature fails the vet.
 
+#### Reprint Reconciliation
+
+**Run only when this is a reprint** — when a prior `research.json` exists at
+`$PRESS_LIBRARY/<api>/research.json` (provenance) or under
+`$PRESS_MANUSCRIPTS/<api-slug>/*/research.json` (archived runs). Skip on first
+prints.
+
+Agents are non-deterministic. The user-first discovery above runs from current
+research and can miss strong features the prior CLI shipped — even when the
+agent has otherwise referenced the prior CLI elsewhere in this session. This
+step is a forcing function: prior novel features become candidate input, not
+gospel and not noise.
+
+##### Step 1: Load the prior list
+
+```bash
+PRIOR_RESEARCH=""
+if [ -f "$PRESS_LIBRARY/<api>/research.json" ]; then
+  PRIOR_RESEARCH="$PRESS_LIBRARY/<api>/research.json"
+elif [ -d "$PRESS_MANUSCRIPTS/<api-slug>" ]; then
+  PRIOR_RESEARCH=$(ls -1t "$PRESS_MANUSCRIPTS/<api-slug>"/*/research.json 2>/dev/null | head -1)
+fi
+```
+
+From the prior `research.json`, pull `novel_features` (planned) and
+`novel_features_built` (actually shipped). For each prior feature, capture
+command, description, prior score, and whether it was built or remained a
+stub.
+
+##### Step 2: Score each prior feature against the current personas
+
+Use the personas from User-First Feature Discovery Steps 1–3. For every prior
+feature, answer:
+
+- **Persona fit:** Which current persona does this feature serve? Name them
+  explicitly. "None" is a valid answer and triggers a drop.
+- **Still buildable:** Pass the Step 4 kill/keep checks against the current
+  spec, auth, and scope. API drift since last print may have killed it.
+- **Shipped quality:** Planned-but-not-built features get extra scrutiny — the
+  prior run already failed to land them.
+
+Re-score on the same 4 dimensions (Domain Fit, User Pain, Build Feasibility,
+Research Backing). Do not inherit the prior score; re-derive from current
+research and current personas.
+
+##### Step 3: Verdict and feed into the candidate pool
+
+Tag each prior feature with one verdict, then add it (or don't) to the same
+candidate pool that user-first discovery and gap analysis populate:
+
+| Verdict | When | Pool action |
+|---------|------|-------------|
+| **Keep** | Persona fit, score ≥ 5/10, buildable | Add with prior `command` reused so the reprint stays compatible |
+| **Reframe** | Right idea, wrong shape — persona fit exists but command/scope drifted | Add with a new `command`/`description`; flag the rename |
+| **Drop** | No persona fit, score < 5/10, or unbuildable now | Exclude; record one-line reason for the manifest |
+
+##### Step 4: Surface in the absorb manifest
+
+In the transcendence table, add a `Source` column for reprint runs:
+`prior (kept)`, `prior (reframed from <old-command>)`, or `new`. Below the
+table, list dropped prior features with their one-line justifications so the
+user can override the drop at the Phase 1.5 gate review.
+
 #### Gap Analysis
 
 After the user-first discovery, run these technical analyses to find anything
@@ -95,7 +158,7 @@ the persona work missed:
 
 #### Generate, Vet, and Score
 
-1. **Generate** 5-12 candidate features from the user-first discovery + gap analysis.
+1. **Generate** 5-12 candidate features from the user-first discovery + reprint reconciliation (when applicable) + gap analysis.
 2. **Vet** each through the Step 4 kill/keep checks. Cut or reframe failures.
 3. **Score** survivors on 4 dimensions:
 

← cae740f5 chore(main): release 2.3.9 (#309)  ·  back to Cli Printing Press  ·  feat(cli): add probe-reachability for no-browser challenge c 09dccfb9 →