From 91a4721d6ae4b7612950cda116e40e699e45a736 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 14 Apr 2026 23:55:10 +0000 Subject: [PATCH] Tighten FULLY LOGGED enforcement: stop rule at top, self-check, next-step cues, scaffold banners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The personal-crm-founders run (committed direct to main) stopped at step 06 and shipped at ARTIFACT-ONLY tier: missing claim-check, evaluation, evaluator-pass, and all working-log entries. Same stop pattern as the four pre-Verdel artifact-only runs. Four adjustments targeted at the exact stop pattern: 1. .claude/skills/pagekit/SKILL.md - Moved the FULLY LOGGED stop rule to the top of Hard Rules. Was buried at step 8. - Added a 'Are you done? Self-check' section — a literal checkbox list the bot must walk before handoff: all artifacts filled (not placeholders), prompts/outputs paired for every step, slop-check clean, run-check returns FULLY LOGGED or PUBLISHABLE. - Added explicit rule: do not delete or leave blank the scaffolded placeholder files (claim-check.md, evaluation.md, evaluator-pass.md, working-log.md). 2. Added Next: cues to every per-step skill so the bot has a continuation signal instead of stopping at the end of each step: - signal-doc → message-spine - message-spine → first-page-decision - first-page-decision → page-argument-shape - page-argument-shape → proof-map - proof-map → first-page-draft - first-page-draft → explicit 6-step handoff (slop-check, claim-check, evaluation.md, evaluator-pass, working-log, run-check). Also says 'The draft is not the deliverable. The logged run is.' - claim-check → evaluation + evaluator-pass + run-check 3. scripts/new-run.sh scaffold placeholders now carry banners at the top of: - working-log.md - claim-check.md - evaluation.md - evaluator-pass.md Each banner explains the tier requirement and which skill to use to fill it in. Stops the 'this is just a stub' misread. Verified: - scripts/doctor.sh PASS - scripts/slop-check.sh exit 0 clean - runs/vegan-dog-food-verdel still PUBLISHABLE - Fresh scaffold from new-run.sh shows the DO NOT DELETE banners and classifies as FULLY LOGGED (not PUBLISHABLE) with a clear punch list --- .claude/skills/pagekit-claim-check/SKILL.md | 8 ++++++ .../pagekit-first-page-decision/SKILL.md | 3 ++ .../skills/pagekit-first-page-draft/SKILL.md | 12 ++++++++ .claude/skills/pagekit-message-spine/SKILL.md | 3 ++ .../pagekit-page-argument-shape/SKILL.md | 3 ++ .claude/skills/pagekit-proof-map/SKILL.md | 3 ++ .claude/skills/pagekit-signal-doc/SKILL.md | 3 ++ .claude/skills/pagekit/SKILL.md | 23 +++++++++++++++ scripts/new-run.sh | 28 +++++++++++++++++++ 9 files changed, 86 insertions(+) diff --git a/.claude/skills/pagekit-claim-check/SKILL.md b/.claude/skills/pagekit-claim-check/SKILL.md index 82990c3..4bc727b 100644 --- a/.claude/skills/pagekit-claim-check/SKILL.md +++ b/.claude/skills/pagekit-claim-check/SKILL.md @@ -44,3 +44,11 @@ A strong claim-check pass: - separates claim types (overclaim / vague / unsupported / outrun proof map / editorial voice / unsourced quantitative / clinical drift / ai-slop tell) - proposes replacements that are sharper and more accurate than the originals — not simply softer - ends with a recurring-patterns summary so upstream constraints can absorb them + +## Next +Do not stop at claim-check. Continue: + +1. Write `runs//evaluation.md` — the run's own honest read of what worked, what stayed thin, where outputs drifted generic. +2. Invoke **`pagekit-evaluator-pass`** to produce the adversarial second read. +3. Ensure `runs//working-log.md` has real entries per step (replace all scaffold `*[Fill in]*` placeholders). +4. Invoke **`pagekit-run-check`** — it must return `tier: FULLY LOGGED` or `tier: PUBLISHABLE` before the run is done. diff --git a/.claude/skills/pagekit-first-page-decision/SKILL.md b/.claude/skills/pagekit-first-page-decision/SKILL.md index 3692ebd..465404c 100644 --- a/.claude/skills/pagekit-first-page-decision/SKILL.md +++ b/.claude/skills/pagekit-first-page-decision/SKILL.md @@ -56,3 +56,6 @@ If the chosen page is "homepage," the rationale must explain why homepage actual ## When to escalate to the user - The decision is genuinely close between two candidates: surface both, ask for input. - Mechanism / proof / comparison briefs are missing for a trust-heavy object: ask for them before deciding. + +## Next +After the decision is in place, invoke **`pagekit-page-argument-shape`** (step 04). Do not stop here. diff --git a/.claude/skills/pagekit-first-page-draft/SKILL.md b/.claude/skills/pagekit-first-page-draft/SKILL.md index 60ee0c1..0be184e 100644 --- a/.claude/skills/pagekit-first-page-draft/SKILL.md +++ b/.claude/skills/pagekit-first-page-draft/SKILL.md @@ -44,3 +44,15 @@ A strong draft: - passes `scripts/slop-check.sh` clean before being handed to step 07 If the draft is weak: stop, ask what upstream artifact is too thin. Rarely fix at the draft level — fix at the source. + +## Next +**The draft is not the deliverable. The logged run is.** After the draft is clean, do not stop. Continue the chain: + +1. Invoke **`pagekit-slop-check`** on the draft. Resolve any flags. +2. Invoke **`pagekit-claim-check`** (step 07) at a severity you choose and log. This produces `claim-check.md` and, if any line was rewritten, `first-page-draft-corrected.md`. +3. Write `evaluation.md` — the run's own honest read of what worked and what stayed thin. +4. Invoke **`pagekit-evaluator-pass`** to produce `evaluator-pass.md` — the adversarial second read. +5. Fill in `working-log.md` across every step (not the scaffold `*[Fill in]*` placeholders). +6. Invoke **`pagekit-run-check`** — it must return `tier: FULLY LOGGED` or `tier: PUBLISHABLE`. + +Only once run-check reports FULLY LOGGED (or PUBLISHABLE) is the run done. Stopping at this step leaves the run at ARTIFACT-ONLY, which does not count. diff --git a/.claude/skills/pagekit-message-spine/SKILL.md b/.claude/skills/pagekit-message-spine/SKILL.md index a456c7b..cc7b1be 100644 --- a/.claude/skills/pagekit-message-spine/SKILL.md +++ b/.claude/skills/pagekit-message-spine/SKILL.md @@ -35,3 +35,6 @@ If the spine sounds like the signal doc rephrased, the reduction did not happen. ## Anti-slop Watch for "comprehensive solution," "powerful platform," and other category-default phrases sneaking into the spine. The spine should be in the product's own voice as much as possible. + +## Next +After the spine is in place, invoke **`pagekit-first-page-decision`** (step 03). Do not stop here. diff --git a/.claude/skills/pagekit-page-argument-shape/SKILL.md b/.claude/skills/pagekit-page-argument-shape/SKILL.md index 4e5be84..1c0f682 100644 --- a/.claude/skills/pagekit-page-argument-shape/SKILL.md +++ b/.claude/skills/pagekit-page-argument-shape/SKILL.md @@ -36,3 +36,6 @@ A strong page argument shape: ## Anti-slop The shape's drafting-constraints section is where slop prevention starts. If those constraints are missing or watered down, every step downstream is weaker. + +## Next +After the shape is in place, invoke **`pagekit-proof-map`** (step 05). Do not stop here. diff --git a/.claude/skills/pagekit-proof-map/SKILL.md b/.claude/skills/pagekit-proof-map/SKILL.md index fd562f6..6b6964e 100644 --- a/.claude/skills/pagekit-proof-map/SKILL.md +++ b/.claude/skills/pagekit-proof-map/SKILL.md @@ -37,3 +37,6 @@ If the proof map is "we have testimonials" and not much more, the upstream proof ## Hard rule Do not invent proof. If the page wants to say something that the proof map cannot support, the draft step will mark it with `*[verification flag: ...]*` — this map is where those gaps are surfaced first. + +## Next +After the proof map is in place, invoke **`pagekit-first-page-draft`** (step 06). Do not stop here. diff --git a/.claude/skills/pagekit-signal-doc/SKILL.md b/.claude/skills/pagekit-signal-doc/SKILL.md index 630a4ee..ca6d576 100644 --- a/.claude/skills/pagekit-signal-doc/SKILL.md +++ b/.claude/skills/pagekit-signal-doc/SKILL.md @@ -35,3 +35,6 @@ If the doc is too generic or too category-level, **do not advance to step 02.** ## Anti-slop Signal docs themselves rarely produce slop, but if the output uses confident-sounding empty words ("comprehensive," "deeply understands," "transforms"), strip them. Real signal is specific. + +## Next +After this step's artifact is in place, invoke **`pagekit-message-spine`** (step 02). Do not stop here. The signal doc is not the deliverable; the draft is, and the chain must run to completion (see the orchestrator's self-check). diff --git a/.claude/skills/pagekit/SKILL.md b/.claude/skills/pagekit/SKILL.md index 74fe2cd..a4bc916 100644 --- a/.claude/skills/pagekit/SKILL.md +++ b/.claude/skills/pagekit/SKILL.md @@ -77,11 +77,34 @@ Tell the user: ## Hard rules (do not violate) +- **Do not declare the run done until `scripts/run-check.sh runs/` returns `tier: FULLY LOGGED` (or `PUBLISHABLE`).** This is the only completion signal. Step 06 producing a nice-looking draft is NOT completion. If run-check reports ARTIFACT-ONLY or SUMMARY LOGGED, the run is incomplete and you must keep working. - **Do not default to homepage.** Step 03 must consider alternatives. - **Do not invent proof.** Use `*[verification flag: ...]*` for unverified product-specific claims. - **Do not skip slop-check before the claim-check step.** The script catches the obvious cases; the claim-check catches the rest. - **Do not skip the evaluator pass** at the fully-logged tier. - **Do not edit the canonical prompts** in `prompts/` to fit a single run. They are shared. +- **Do not delete or leave blank the scaffolded placeholder files** (`claim-check.md`, `evaluation.md`, `evaluator-pass.md`, `working-log.md`). They are structural; fill them in or commit them as-is until filled. + +## Are you done? Self-check + +Before handing the run back to the user, walk this checklist. Every item must be YES. If any is NO, you are not done — go finish that item. + +- [ ] `runs//signal-doc.md` is filled with real content (not the scaffold placeholder) +- [ ] `runs//message-spine.md` is filled +- [ ] `runs//first-page-decision.md` is filled AND lists candidates considered with a paragraph case FOR each +- [ ] `runs//page-argument-shape.md` is filled +- [ ] `runs//proof-map.md` is filled +- [ ] `runs//first-page-draft.md` is filled +- [ ] `runs//outputs/NN-*-output.md` exists for every step 01 through 07 +- [ ] `runs//claim-check.md` is filled (not the `*[Filled in by step 07]*` placeholder) +- [ ] `runs//first-page-draft-corrected.md` exists if claim-check flagged any line +- [ ] `runs//working-log.md` has real entries per step (not the scaffold `*[Fill in]*` placeholders) +- [ ] `runs//evaluation.md` is filled +- [ ] `runs//evaluator-pass.md` is filled (use the `pagekit-evaluator-pass` skill/subagent) +- [ ] `bash scripts/slop-check.sh runs//first-page-draft.md` exits 0 clean +- [ ] `bash scripts/run-check.sh runs/` returns `tier: FULLY LOGGED` or `tier: PUBLISHABLE` + +Only after every box is checked do you report completion to the user. ## When to ask the user diff --git a/scripts/new-run.sh b/scripts/new-run.sh index 16f843d..dbfbafa 100755 --- a/scripts/new-run.sh +++ b/scripts/new-run.sh @@ -75,6 +75,13 @@ EOF # ----- working-log.md ----------------------------------------------------- cat > "$RUN_DIR/working-log.md" < # Working Log Chronological notes. Each entry marks a step transition or a mid-step decision. @@ -212,6 +219,13 @@ cat > "$RUN_DIR/first-page-draft.md" < "$RUN_DIR/claim-check.md" < # Claim Check ## Severity @@ -222,6 +236,13 @@ EOF # ----- evaluation.md ----------------------------------------------------- cat > "$RUN_DIR/evaluation.md" < # Evaluation ## Logging level @@ -252,6 +273,13 @@ EOF # ----- evaluator-pass.md ------------------------------------------------- cat > "$RUN_DIR/evaluator-pass.md" < # Evaluator Pass Skeptical second read of the run. Not the same voice as \`evaluation.md\`; this pass is deliberately adversarial.