audit: cold-read of README.md + other adopter-facing markdown (skeptical-outsider lens) #160

Closed
opened 2026-06-27 02:05:47 +02:00 by quartermaster · 4 comments

Why

Operator engagement 2026-06-27: surfaced the cold-read audit pattern, anchored on empirical evidence from the tmux-tell README:

  • Claude.ai (Chat) cold-read of tmux-tell README → polite but pointed feedback
  • Codex cold-read of tmux-tell README → genuinely brutal critique that surfaced abstraction-gaps no internal review had caught

Key signal from the Codex feedback that applies broadly to home-grown infra-substrate projects:

  • "The simple idea takes two sentences, but the implementation machinery dominates everything afterward" — mechanism-buries-the-value pattern
  • "That is a lot of machine-level commitment for an unknown tool" — proof-vs-architecture asymmetry
  • "What is concretely demonstrated is inter-pane message delivery. [The two terms] are not the same thing" — jargon-vs-actual-capability gap
  • "Maturity theatre until the basic value is proven" — premature scale-language

Release-toolkit's README + integration.md + AGENTS.md likely have analogous issues:

  • Jargon-heavy from the inside (path-α/path-γ, compose-scripts, self-bootstrap re-pin discipline, mechanism-of-touch)
  • Architecture/ADR content prominent before adopter-value is established
  • Some claims (idempotency, drift-prevention, in-cycle re-pin discipline) may read as "maturity theatre" without concrete adoption proof

The cold-read prompt (operator-provided, verbatim)

You are a senior backend/infrastructure developer. You just clicked a link to a
GitHub repo you've never heard of. You have seen a dozen "AI agent orchestration"
tools this year, you're skeptical, and you're short on time — about ten seconds
of attention before you decide to read on or close the tab.

Below is what you see on the repo landing page. Do NOT try to be helpful, do NOT
suggest improvements, do NOT assume good intent. Just report your honest cold
reaction:

1. In ~10 seconds: what is this, and what problem does it claim to solve?
   Answer ONLY from what's actually written. If you can't tell, say so plainly.
2. Would you run the install command? Why or why not?
3. Where exactly do you get confused, lose the thread, or want to bounce?
4. Does anything read as hype, hand-waving, or an unproven assertion?
5. The single biggest thing that is unclear.
6. What, if anything, would make you star it instead of closing the tab?

Be blunt. A lukewarm "it's fine" is useless to me.

--- REPO LANDING PAGE ---
<paste README.md content or repo URL>
--- END ---

The framing for release-toolkit would swap "AI agent orchestration" for "release automation" or "CI/CD" — the skeptical-outsider lens is the load-bearing part. The prompt template is reusable for any home-grown infra project's adopter-facing docs.

Audit surfaces (priority order)

Surface Why this priority
README.md Primary landing surface; first impression dominates
docs/integration.md Second-most-read; adopter's first deep-engagement
AGENTS.md Co-codifier-facing; cold-read less directly relevant but worth checking the "mechanism-of-touch" + "self-bootstrap" framings for outsider-comprehensibility
docs/conventions.md Lower priority; adopters reach this after they're committed
docs/adr/*.md ADRs are decision-records, not adopter docs; cold-read less directly applicable

Who runs the cold reads

Three possibilities:

(A) Operator runs them through Claude.ai (Chat) + Codex

  • Pro: same out-of-band lens that surfaced the tmux-tell feedback; genuinely different model contexts catch different things
  • Con: operator-time investment
  • Lean: this is the gold-standard option; cold reads from MULTIPLE models (Claude.ai + Codex + maybe GPT) give triangulation

(B) Herald (in-character)

  • Pro: Herald has the narrative-craft sensitivity to surface writing-craft gaps
  • Con: Herald has substrate context; less "fresh-eyes" than a model that has never seen the toolkit

(C) Fresh chamber spawn (Surveyor / Pilot / new Engineer)

  • Pro: review-discipline rigor
  • Con: same context-contamination as Herald; chambers have read the source material
  1. Operator pastes each surface into Claude.ai + Codex with the cold-read prompt above. Captures the verbatim responses.
  2. Surveyor + I read the responses and triangulate the substantive findings (multiple models surfacing the same friction = high-confidence signal)
  3. Herald addresses the findings in a docs-revision PR + ships
  4. Re-run the cold reads post-revision as a delta check

Output

  • docs/cold-read-feedback-2026-06-XX.md capturing the verbatim model responses + the triangulated findings
  • Herald's revision PR addressing the substantive feedback
  • One follow-up tracker if any finding is substantively scope-creep (don't bundle larger refactors into the cold-read response PR)

Composition

  • #157 walkthrough audit: complementary. Walkthrough finds lived-experience friction; cold-read finds first-impression friction. Both are needed.
  • #158 docs-drift audit: complementary. Docs-drift finds code-vs-docs misalignment; cold-read finds the docs-narrative-vs-skeptical-reader gap.
  • #152 examples: if the cold-read surfaces "I need to see a working example before I trust this," examples have higher priority; cellblock adoption already partly proves the value

Implementation surface

Audit-only:

  • Operator runs cold-reads through external models
  • Findings captured in audit doc
  • Herald addresses findings in docs-revision PR
  • Delta cold-read post-revision

Estimated scope: 1-2 hours of cold-read execution + Herald revision PR (depends on what surfaces)

What this PR does NOT do

  • Does NOT prescribe specific rewrites before the cold-reads happen — let the findings drive the revision direction
  • Does NOT cover ADR-level rewrites — ADRs are decision-records, not adopter-facing; cold-read framework less applicable
  • Does NOT require all surfaces audited in one pass — start with README + integration.md (highest-leverage); other docs can wait

Refs

  • Operator engagement 2026-06-27: surfaced the cold-read pattern + provided the verbatim prompt
  • Empirical motivation: tmux-tell README cold-read by Codex surfaced abstraction-gap, premature-scale, and proof-vs-architecture asymmetry findings that closed-room review had missed
  • Composition: #157 walkthrough, #158 docs-drift, #152 examples
  • Pattern reuse: the cold-read framework applies to ANY home-grown infra-substrate project's adopter-facing docs; not toolkit-specific
## Why Operator engagement 2026-06-27: surfaced the cold-read audit pattern, anchored on empirical evidence from the tmux-tell README: - **Claude.ai (Chat) cold-read** of tmux-tell README → polite but pointed feedback - **Codex cold-read** of tmux-tell README → genuinely brutal critique that surfaced abstraction-gaps no internal review had caught Key signal from the Codex feedback that applies broadly to home-grown infra-substrate projects: - *"The simple idea takes two sentences, but the implementation machinery dominates everything afterward"* — mechanism-buries-the-value pattern - *"That is a lot of machine-level commitment for an unknown tool"* — proof-vs-architecture asymmetry - *"What is concretely demonstrated is inter-pane message delivery. [The two terms] are not the same thing"* — jargon-vs-actual-capability gap - *"Maturity theatre until the basic value is proven"* — premature scale-language Release-toolkit's README + integration.md + AGENTS.md likely have analogous issues: - Jargon-heavy from the inside (path-α/path-γ, compose-scripts, self-bootstrap re-pin discipline, mechanism-of-touch) - Architecture/ADR content prominent before adopter-value is established - Some claims (idempotency, drift-prevention, in-cycle re-pin discipline) may read as "maturity theatre" without concrete adoption proof ## The cold-read prompt (operator-provided, verbatim) ```md You are a senior backend/infrastructure developer. You just clicked a link to a GitHub repo you've never heard of. You have seen a dozen "AI agent orchestration" tools this year, you're skeptical, and you're short on time — about ten seconds of attention before you decide to read on or close the tab. Below is what you see on the repo landing page. Do NOT try to be helpful, do NOT suggest improvements, do NOT assume good intent. Just report your honest cold reaction: 1. In ~10 seconds: what is this, and what problem does it claim to solve? Answer ONLY from what's actually written. If you can't tell, say so plainly. 2. Would you run the install command? Why or why not? 3. Where exactly do you get confused, lose the thread, or want to bounce? 4. Does anything read as hype, hand-waving, or an unproven assertion? 5. The single biggest thing that is unclear. 6. What, if anything, would make you star it instead of closing the tab? Be blunt. A lukewarm "it's fine" is useless to me. --- REPO LANDING PAGE --- <paste README.md content or repo URL> --- END --- ``` The framing for release-toolkit would swap "AI agent orchestration" for "release automation" or "CI/CD" — the skeptical-outsider lens is the load-bearing part. The prompt template is reusable for any home-grown infra project's adopter-facing docs. ## Audit surfaces (priority order) | Surface | Why this priority | |---|---| | **`README.md`** | Primary landing surface; first impression dominates | | **`docs/integration.md`** | Second-most-read; adopter's first deep-engagement | | **`AGENTS.md`** | Co-codifier-facing; cold-read less directly relevant but worth checking the "mechanism-of-touch" + "self-bootstrap" framings for outsider-comprehensibility | | **`docs/conventions.md`** | Lower priority; adopters reach this after they're committed | | **`docs/adr/*.md`** | ADRs are decision-records, not adopter docs; cold-read less directly applicable | ## Who runs the cold reads Three possibilities: ### (A) Operator runs them through Claude.ai (Chat) + Codex - **Pro**: same out-of-band lens that surfaced the tmux-tell feedback; genuinely different model contexts catch different things - **Con**: operator-time investment - **Lean**: this is the gold-standard option; cold reads from MULTIPLE models (Claude.ai + Codex + maybe GPT) give triangulation ### (B) Herald (in-character) - **Pro**: Herald has the narrative-craft sensitivity to surface writing-craft gaps - **Con**: Herald has substrate context; less "fresh-eyes" than a model that has never seen the toolkit ### (C) Fresh chamber spawn (Surveyor / Pilot / new Engineer) - **Pro**: review-discipline rigor - **Con**: same context-contamination as Herald; chambers have read the source material ## Recommended flow 1. **Operator pastes each surface into Claude.ai + Codex** with the cold-read prompt above. Captures the verbatim responses. 2. **Surveyor + I read the responses** and triangulate the substantive findings (multiple models surfacing the same friction = high-confidence signal) 3. **Herald addresses the findings** in a docs-revision PR + ships 4. **Re-run the cold reads** post-revision as a delta check ## Output - `docs/cold-read-feedback-2026-06-XX.md` capturing the verbatim model responses + the triangulated findings - Herald's revision PR addressing the substantive feedback - One follow-up tracker if any finding is substantively scope-creep (don't bundle larger refactors into the cold-read response PR) ## Composition - **[#157 walkthrough audit](https://git.frankenbit.de/frankenbit/release-toolkit/issues/157)**: complementary. Walkthrough finds lived-experience friction; cold-read finds first-impression friction. Both are needed. - **[#158 docs-drift audit](https://git.frankenbit.de/frankenbit/release-toolkit/issues/158)**: complementary. Docs-drift finds code-vs-docs misalignment; cold-read finds the docs-narrative-vs-skeptical-reader gap. - **[#152 examples](https://git.frankenbit.de/frankenbit/release-toolkit/issues/152)**: if the cold-read surfaces "I need to see a working example before I trust this," examples have higher priority; cellblock adoption already partly proves the value ## Implementation surface Audit-only: - Operator runs cold-reads through external models - Findings captured in audit doc - Herald addresses findings in docs-revision PR - Delta cold-read post-revision Estimated scope: 1-2 hours of cold-read execution + Herald revision PR (depends on what surfaces) ## What this PR does NOT do - **Does NOT prescribe specific rewrites** before the cold-reads happen — let the findings drive the revision direction - **Does NOT cover ADR-level rewrites** — ADRs are decision-records, not adopter-facing; cold-read framework less applicable - **Does NOT require all surfaces audited in one pass** — start with README + integration.md (highest-leverage); other docs can wait ## Refs - **Operator engagement 2026-06-27**: surfaced the cold-read pattern + provided the verbatim prompt - **Empirical motivation**: tmux-tell README cold-read by Codex surfaced abstraction-gap, premature-scale, and proof-vs-architecture asymmetry findings that closed-room review had missed - **Composition**: [#157 walkthrough](https://git.frankenbit.de/frankenbit/release-toolkit/issues/157), [#158 docs-drift](https://git.frankenbit.de/frankenbit/release-toolkit/issues/158), [#152 examples](https://git.frankenbit.de/frankenbit/release-toolkit/issues/152) - **Pattern reuse**: the cold-read framework applies to ANY home-grown infra-substrate project's adopter-facing docs; not toolkit-specific
Author
Owner

Operator engagement update 2026-06-27: the cold-read runner pool expands to include the Codex chambers (Lookout + Carpenter). Recommended triangulation flow:

Runner Lens
Claude.ai (Chat) Out-of-band Anthropic-model contextual perspective
Codex CLI (operator-side) Different model family; surfaced the brutal-honest tmux-tell findings
Lookout (Codex chamber) Codex lens with chamber context but no prior toolkit familiarity
Carpenter (Codex chamber) Same — Codex lens; second Codex opinion for triangulation

The two-Codex-chamber pass would give us 3-Codex-instance triangulation plus the Claude.ai out-of-band perspective. Findings shared across all 3-4 surfaces = highest-confidence signal for revision priorities.

Sequencing: run the cold-reads when the docs are stable (post-#148 build-bake + #149/#150 Unicode cleanups + #152 examples) so the runners see the post-cleanup state, not the in-flight state.

**Operator engagement update 2026-06-27**: the cold-read runner pool expands to include the Codex chambers (Lookout + Carpenter). Recommended triangulation flow: | Runner | Lens | |---|---| | Claude.ai (Chat) | Out-of-band Anthropic-model contextual perspective | | Codex CLI (operator-side) | Different model family; surfaced the brutal-honest tmux-tell findings | | **Lookout (Codex chamber)** | Codex lens with chamber context but no prior toolkit familiarity | | **Carpenter (Codex chamber)** | Same — Codex lens; second Codex opinion for triangulation | The two-Codex-chamber pass would give us **3-Codex-instance triangulation** plus the Claude.ai out-of-band perspective. Findings shared across all 3-4 surfaces = highest-confidence signal for revision priorities. Sequencing: run the cold-reads when the docs are stable (post-#148 build-bake + #149/#150 Unicode cleanups + #152 examples) so the runners see the post-cleanup state, not the in-flight state.
quartermaster removed their assignment 2026-07-02 21:32:09 +02:00
Owner

Cold-Read Audit: release-toolkit adopter-facing docs

Applied the cold-read prompt (skeptical senior infra developer, short on time) to README.md, docs/integration.md, and AGENTS.md at v0.22.0. No project-internal knowledge assumed. Findings ordered by surface priority.


Surface 1 — README.md

1. In ~10 seconds: what is this, what problem does it claim to solve?

Clear. The opening paragraph lands: "A shared, Forgejo-native release pipeline you reference instead of copy-pasting release machinery into every repository." I know what it is and why it exists within 15 seconds. The bullet list under "What it does" reinforces this for the first three bullets.

The fourth and fifth bullets lose me:

"Auto-prunes superseded RC tags on each cut (v0.12.0+). The self-bootstrap re-pin discipline tags each cycle as vX.Y.Z-rc.N..."

"Construction-enforces consumer-pin consistency (v0.13.0+). The build-bake mechanism sed-rewrites the toolkit's checkout ref into the reusable workflows at cut-prep time..."

"Self-bootstrap re-pin discipline," "construction-enforces," "build-bake mechanism," "cut-prep time" -- all jargon to an outsider. The value these features provide is not stated; only the mechanism is. A developer who just found this repo cannot parse what problem these bullets solve for them. They read as inside-baseball appended to a clear list.

2. Would you run the install command?

Yes, with hesitation at Step 3. Steps 1 and 2 of Quick Start are a clean config file and a CHANGELOG seed -- no friction. Step 3 (the release.yml YAML) introduces path-(alpha) / path-(gamma) mid-setup without context:

"For token-setup (recommended path-(alpha) = direct-push manifest commit via a dedicated release-bot user vs path-(gamma) = manifest-via-PR fallback), see ADR-0007 and integration.md."

A new adopter at Step 3 is being asked to choose between two named paths whose names do not convey meaning. "Direct-push manifest commit" and "manifest-via-PR fallback" are self-contained descriptions; "path-alpha" and "path-gamma" are not. The ADR-0007 cross-reference inside a quick-start step adds to the intimidation surface.

The paths-ignore inline comment also reads as internal project notes:

# #139: skip the cut's own manifest-only push (otherwise it can cancel the in-flight cut).

An issue reference (#139) inside a quick-start YAML is visible internal scaffolding. A new adopter does not need to know why this line exists, just that it should be there.

3. Where do you get confused, lose the thread, or want to bounce?

  • "What it does" bullets 4-5 (RC pruning + build-bake): both describe internal toolkit mechanics. The reader-facing benefit (no stale rc tags; ref consistency without manual sync) is implied but not stated. These belong under Architecture or AGENTS.md, not the feature list.
  • Step 3 path-alpha/path-gamma paragraph: too much decision surface for a quick start. "See integration.md" is fine; the named-paths jargon before the pointer is not.
  • Status section: "stable in practice and proven across multiple production projects" -- "multiple" appears three times in README (Status, Status again, Why section). Never quantified or named. A skeptical reader notices the hedge.

4. Does anything read as hype, hand-waving, or unproven assertion?

  • "complete, proven release pipeline on day one" -- "proven" is a strong word; "across multiple production projects" is the only backing evidence, and "multiple" could mean two. The single named adopter reference anywhere in the docs is tmux-tell (visible in integration.md troubleshooting). Naming it once in README as a proof-instance would substantiate the claim.
  • "release-please-inspired feature set" -- this comparison immediately prompts "then why not use release-please?" The README never answers this; the Why section explains the copy-paste problem but does not address the release-please comparison directly.
  • "recent releases cut cleanly across multiple projects" -- "recently" and "multiple" together are non-verifiable. A link to one adopter's releases page would close this.

5. The single biggest thing that is unclear

Path-alpha vs path-gamma in Quick Start Step 3. These named paths appear mid-setup, require an ADR read to understand, and are not introduced anywhere before that paragraph. A developer following the quick-start for the first time hits this and must decide whether to read integration.md first before continuing, or accept that they are choosing blindly between two options named by Greek letters.

6. What would make you star it instead of closing the tab?

  • Name one public adopter repo in README (link to its CHANGELOG or releases page) -- converts "proven across multiple projects" from a claim into evidence
  • Remove or demote bullets 4-5 from "What it does" (or rewrite as user-benefit statements: "No stale pre-release tags accumulate," "Workflow YAML and scripts always run at the same version")
  • In Quick Start Step 3: drop the path-alpha/path-gamma vocabulary; say "see integration.md for token setup options" without the named-path jargon

Surface 2 -- docs/integration.md

Generally well-structured. "What you get" is tight. The five-step adoption flow is logical. The troubleshooting section is genuinely useful. Specific friction points:

Step 4 has a 600-word interior. The basic release.yml YAML is ~20 lines; then "Wiring secrets," "About publish_mode," "How reusable-release.yml decides what to do" (the mode=noop/update/cut decision tree), and "Post-publish deploy chaining" all land before Step 5. A first-time adopter following the numbered steps hits a large undifferentiated block of content. The decision-tree section in particular ("On every push to main, release-decide.sh walks git log...") is implementation detail that belongs in a "How it works" or troubleshooting section, not inside a setup step.

Path-alpha / path-gamma introduced late. The terms first appear in "Wiring secrets" under Step 4 -- but the formal definition (the three-path table) is under "Branch protection compatibility," several scrolls later. A reader who encounters "required on path-alpha" must scroll forward to understand what path-alpha is. Either define on first use or introduce via "Option A / Option B" language before using the Greek-letter shorthand.

Step 5: "Document... in your project's CLAUDE.md" -- this assumes the reader uses Claude Code. "Your project's CONTRIBUTING.md, CLAUDE.md, or equivalent" would be more general. As written it reads as toolkit-internal convention leaking into adopter guidance.

The build-bake / BUILD_BAKED_TOOLKIT_REF section (under "The toolkit ref") is clear and useful, but the final paragraph ("Reading the ref at runtime via ${{ github.workflow_ref }} was probed and rejected...") is implementation rationale that belongs in an ADR, not an adopter-facing reference.

What's well done: the Tokens & permissions table (three-path comparison) is clear. The "Why secrets: inherit and not an explicit secrets: block?" callout is an excellent pre-emption of a real footgun. Troubleshooting Q&As are appropriately scoped.


Surface 3 -- AGENTS.md

This document is correctly scoped as implementer-facing, so outsider-comprehensibility expectations are lower -- but the issue specifically flags "mechanism-of-touch" and "self-bootstrap" for jargon checking.

Jargon that stops a first-time contributor without definition:

  • "codified-to-embodied" (first sentence) -- this framing has no meaning outside the crew. A one-liner ("written-down rules we intend to internalize as reflex, not reference") would pay for itself.
  • "substrate" -- appears as "substrate-honest dispatch trick" in the classification list and throughout, without definition. A reader can infer "the underlying runtime/platform" but should not have to.
  • "mechanism-of-touch" (section 2 heading) -- introduced as a label before it is defined. The definition comes two paragraphs later as "compose-script changed?" Evocative to someone inside the project; opaque on first encounter.
  • "Surveyor XXXX" reviewer codes ("Surveyor 483d catch," "Surveyor 7b64," "Surveyor 2acc," etc.) -- 17+ instances across sections 2 and 8. A new contributor reads these as [GUESS: a reviewer? a CI check? a commit?] and cannot determine which. If the intent is to credit a specific reviewer catch, a git SHA or issue link would be more durable and parseable.
  • "bus-ping" (section 6) -- first appears without definition ("bus-ping the reviewer"). The bus is the tmux-tell message bus, which is invisible to a contributor who reads the repo without knowing the crew communication setup.

Section 8 (Source-grounded vs invented claims) is the most valuable section for contributor culture and also the densest. The Axis A/B/C counting structure (n=7, n=1, n=2) and the promotion-cadence framing are sound practices, but a first-time reader takes several paragraphs to understand the taxonomy. A 2-sentence summary at the top of section 8 ("Verify claims against live systems, not documentation or inference. The instances below are the failure-mode catalog.") before the axis breakdown would help.

Section 10 (Substrate-grounding arc) reads as project history. The convergence table and forward-going implication are valuable; the section length (300+ words) and density of internal history may not be load-bearing for a new contributor. Worth keeping but could move to an appendix or ADR.

What's well done: the carry-forward enumeration table (section 1), the rc-tag lifecycle outcome table (section 2.4), and the YAML gotchas (section 3) are concrete and immediately applicable.


Cross-cutting observations

Pattern 1 -- Mechanism-buries-the-value (README bullets 4-5, integration.md Step 4 interior, AGENTS.md section 2). The same pattern the #160 issue identified in tmux-tell's README appears here: the what and why (user benefit) are often subordinate to the how (mechanism). Most visible in README bullets 4-5 and the release-decide.sh mode-decision section in integration.md.

Pattern 2 -- "Multiple production projects" claim is repeated but never substantiated. Three appearances in README, none naming the projects or linking to evidence. A single named adopter reference converts the claim from assertion to proof.

Pattern 3 -- Path-alpha/path-gamma vocabulary requires Greek-letter literacy. Clean internal shorthand for a real distinction, but it appears in adopter-facing quick-start surfaces before it's defined. Either define on first use ("path-alpha (direct-push setup)") or use plain language in the quick-start and reserve the labels for integration.md where they're defined.

No broken markdown found. All three documents render cleanly.

No misrepresented shipped changes found. Status section accurately reflects pre-1.0 state and the pin-to-tag requirement.


Verdict

Top 5 highest-leverage edits (across all three surfaces):

  1. README: Remove or demote bullets 4-5 from "What it does" -- "self-bootstrap re-pin discipline" and "build-bake mechanism" are the strongest mechanism-buries-the-value offenders on the primary landing surface. Replace with benefit statements or move to the Architecture section.

  2. README: Name one production adopter -- three "proven across multiple projects" claims without naming one; a link to tmux-tell's releases page converts the assertion into evidence at zero cost.

  3. README + integration.md: Remove path-alpha/path-gamma labels from quick-start surfaces; define on first use in integration.md -- the labels are clean shorthand but arrive before they're explained. Quick Start Step 3 should say "see integration.md for token setup options"; integration.md should define the paths before using the shorthand.

  4. integration.md: Extract the release-decide.sh mode=noop/update/cut decision tree from Step 4 into a "How it works" section -- it's accurate and useful but implementation detail inside a numbered setup step.

  5. AGENTS.md: Add a short glossary or define jargon on first use -- "codified-to-embodied," "substrate," "mechanism-of-touch," "bus-ping," and "Surveyor XXXX" reviewer codes all require project-internal context. A 10-line glossary at the top pays off across the entire document.

Overall length verdict:

  • README: About right. Length is not the problem; bullets 4-5 and the path-alpha/path-gamma paragraph are the specific friction points.
  • integration.md: Slightly long. Step 4's interior is the main overage; extracting the mode-decision section would tighten the adoption flow meaningfully.
  • AGENTS.md: About right for its surface. Density is appropriate for implementer pre-flight material; the jargon gaps are the issue, not the length.
# Cold-Read Audit: release-toolkit adopter-facing docs *Applied the [cold-read prompt](https://git.frankenbit.de/frankenbit/release-toolkit/issues/160) (skeptical senior infra developer, short on time) to README.md, docs/integration.md, and AGENTS.md at v0.22.0. No project-internal knowledge assumed. Findings ordered by surface priority.* --- ## Surface 1 — README.md ### 1. In ~10 seconds: what is this, what problem does it claim to solve? Clear. The opening paragraph lands: "A shared, Forgejo-native release pipeline you reference instead of copy-pasting release machinery into every repository." I know what it is and why it exists within 15 seconds. The bullet list under "What it does" reinforces this for the first three bullets. The fourth and fifth bullets lose me: > "Auto-prunes superseded RC tags on each cut (v0.12.0+). The self-bootstrap re-pin discipline tags each cycle as vX.Y.Z-rc.N..." > "Construction-enforces consumer-pin consistency (v0.13.0+). The build-bake mechanism sed-rewrites the toolkit's checkout ref into the reusable workflows at cut-prep time..." **"Self-bootstrap re-pin discipline," "construction-enforces," "build-bake mechanism," "cut-prep time"** -- all jargon to an outsider. The value these features provide is not stated; only the mechanism is. A developer who just found this repo cannot parse what problem these bullets solve for them. They read as inside-baseball appended to a clear list. ### 2. Would you run the install command? Yes, with hesitation at Step 3. Steps 1 and 2 of Quick Start are a clean config file and a CHANGELOG seed -- no friction. Step 3 (the release.yml YAML) introduces `path-(alpha)` / `path-(gamma)` mid-setup without context: > "For token-setup (recommended path-(alpha) = direct-push manifest commit via a dedicated release-bot user vs path-(gamma) = manifest-via-PR fallback), see ADR-0007 and integration.md." A new adopter at Step 3 is being asked to choose between two named paths whose names do not convey meaning. "Direct-push manifest commit" and "manifest-via-PR fallback" are self-contained descriptions; "path-alpha" and "path-gamma" are not. The ADR-0007 cross-reference inside a quick-start step adds to the intimidation surface. The `paths-ignore` inline comment also reads as internal project notes: ``` # #139: skip the cut's own manifest-only push (otherwise it can cancel the in-flight cut). ``` An issue reference (#139) inside a quick-start YAML is visible internal scaffolding. A new adopter does not need to know why this line exists, just that it should be there. ### 3. Where do you get confused, lose the thread, or want to bounce? - **"What it does" bullets 4-5** (RC pruning + build-bake): both describe internal toolkit mechanics. The reader-facing benefit (no stale rc tags; ref consistency without manual sync) is implied but not stated. These belong under Architecture or AGENTS.md, not the feature list. - **Step 3 path-alpha/path-gamma paragraph**: too much decision surface for a quick start. "See integration.md" is fine; the named-paths jargon before the pointer is not. - **Status section**: "stable in practice and proven across multiple production projects" -- "multiple" appears three times in README (Status, Status again, Why section). Never quantified or named. A skeptical reader notices the hedge. ### 4. Does anything read as hype, hand-waving, or unproven assertion? - **"complete, proven release pipeline on day one"** -- "proven" is a strong word; "across multiple production projects" is the only backing evidence, and "multiple" could mean two. The single named adopter reference anywhere in the docs is tmux-tell (visible in integration.md troubleshooting). Naming it once in README as a proof-instance would substantiate the claim. - **"release-please-inspired feature set"** -- this comparison immediately prompts "then why not use release-please?" The README never answers this; the Why section explains the copy-paste problem but does not address the release-please comparison directly. - **"recent releases cut cleanly across multiple projects"** -- "recently" and "multiple" together are non-verifiable. A link to one adopter's releases page would close this. ### 5. The single biggest thing that is unclear Path-alpha vs path-gamma in Quick Start Step 3. These named paths appear mid-setup, require an ADR read to understand, and are not introduced anywhere before that paragraph. A developer following the quick-start for the first time hits this and must decide whether to read integration.md first before continuing, or accept that they are choosing blindly between two options named by Greek letters. ### 6. What would make you star it instead of closing the tab? - Name one public adopter repo in README (link to its CHANGELOG or releases page) -- converts "proven across multiple projects" from a claim into evidence - Remove or demote bullets 4-5 from "What it does" (or rewrite as user-benefit statements: "No stale pre-release tags accumulate," "Workflow YAML and scripts always run at the same version") - In Quick Start Step 3: drop the path-alpha/path-gamma vocabulary; say "see integration.md for token setup options" without the named-path jargon --- ## Surface 2 -- docs/integration.md Generally well-structured. "What you get" is tight. The five-step adoption flow is logical. The troubleshooting section is genuinely useful. Specific friction points: **Step 4 has a 600-word interior.** The basic release.yml YAML is ~20 lines; then "Wiring secrets," "About publish_mode," "How reusable-release.yml decides what to do" (the mode=noop/update/cut decision tree), and "Post-publish deploy chaining" all land before Step 5. A first-time adopter following the numbered steps hits a large undifferentiated block of content. The decision-tree section in particular ("On every push to main, release-decide.sh walks git log...") is implementation detail that belongs in a "How it works" or troubleshooting section, not inside a setup step. **Path-alpha / path-gamma introduced late.** The terms first appear in "Wiring secrets" under Step 4 -- but the formal definition (the three-path table) is under "Branch protection compatibility," several scrolls later. A reader who encounters "required on path-alpha" must scroll forward to understand what path-alpha is. Either define on first use or introduce via "Option A / Option B" language before using the Greek-letter shorthand. **Step 5: "Document... in your project's CLAUDE.md"** -- this assumes the reader uses Claude Code. "Your project's CONTRIBUTING.md, CLAUDE.md, or equivalent" would be more general. As written it reads as toolkit-internal convention leaking into adopter guidance. **The build-bake / BUILD_BAKED_TOOLKIT_REF section** (under "The toolkit ref") is clear and useful, but the final paragraph ("Reading the ref at runtime via `${{ github.workflow_ref }}` was probed and rejected...") is implementation rationale that belongs in an ADR, not an adopter-facing reference. **What's well done:** the Tokens & permissions table (three-path comparison) is clear. The "Why `secrets: inherit` and not an explicit `secrets:` block?" callout is an excellent pre-emption of a real footgun. Troubleshooting Q&As are appropriately scoped. --- ## Surface 3 -- AGENTS.md This document is correctly scoped as implementer-facing, so outsider-comprehensibility expectations are lower -- but the issue specifically flags "mechanism-of-touch" and "self-bootstrap" for jargon checking. **Jargon that stops a first-time contributor without definition:** - **"codified-to-embodied"** (first sentence) -- this framing has no meaning outside the crew. A one-liner ("written-down rules we intend to internalize as reflex, not reference") would pay for itself. - **"substrate"** -- appears as "substrate-honest dispatch trick" in the classification list and throughout, without definition. A reader can infer "the underlying runtime/platform" but should not have to. - **"mechanism-of-touch"** (section 2 heading) -- introduced as a label before it is defined. The definition comes two paragraphs later as "compose-script changed?" Evocative to someone inside the project; opaque on first encounter. - **"Surveyor XXXX" reviewer codes** ("Surveyor 483d catch," "Surveyor 7b64," "Surveyor 2acc," etc.) -- 17+ instances across sections 2 and 8. A new contributor reads these as [GUESS: a reviewer? a CI check? a commit?] and cannot determine which. If the intent is to credit a specific reviewer catch, a git SHA or issue link would be more durable and parseable. - **"bus-ping"** (section 6) -- first appears without definition ("bus-ping the reviewer"). The bus is the tmux-tell message bus, which is invisible to a contributor who reads the repo without knowing the crew communication setup. **Section 8 (Source-grounded vs invented claims)** is the most valuable section for contributor culture and also the densest. The Axis A/B/C counting structure (n=7, n=1, n=2) and the promotion-cadence framing are sound practices, but a first-time reader takes several paragraphs to understand the taxonomy. A 2-sentence summary at the top of section 8 ("Verify claims against live systems, not documentation or inference. The instances below are the failure-mode catalog.") before the axis breakdown would help. **Section 10 (Substrate-grounding arc)** reads as project history. The convergence table and forward-going implication are valuable; the section length (300+ words) and density of internal history may not be load-bearing for a new contributor. Worth keeping but could move to an appendix or ADR. **What's well done:** the carry-forward enumeration table (section 1), the rc-tag lifecycle outcome table (section 2.4), and the YAML gotchas (section 3) are concrete and immediately applicable. --- ## Cross-cutting observations **Pattern 1 -- Mechanism-buries-the-value** (README bullets 4-5, integration.md Step 4 interior, AGENTS.md section 2). The same pattern the #160 issue identified in tmux-tell's README appears here: the *what* and *why* (user benefit) are often subordinate to the *how* (mechanism). Most visible in README bullets 4-5 and the release-decide.sh mode-decision section in integration.md. **Pattern 2 -- "Multiple production projects" claim is repeated but never substantiated.** Three appearances in README, none naming the projects or linking to evidence. A single named adopter reference converts the claim from assertion to proof. **Pattern 3 -- Path-alpha/path-gamma vocabulary requires Greek-letter literacy.** Clean internal shorthand for a real distinction, but it appears in adopter-facing quick-start surfaces before it's defined. Either define on first use ("path-alpha (direct-push setup)") or use plain language in the quick-start and reserve the labels for integration.md where they're defined. **No broken markdown found.** All three documents render cleanly. **No misrepresented shipped changes found.** Status section accurately reflects pre-1.0 state and the pin-to-tag requirement. --- ## Verdict **Top 5 highest-leverage edits (across all three surfaces):** 1. **README: Remove or demote bullets 4-5 from "What it does"** -- "self-bootstrap re-pin discipline" and "build-bake mechanism" are the strongest mechanism-buries-the-value offenders on the primary landing surface. Replace with benefit statements or move to the Architecture section. 2. **README: Name one production adopter** -- three "proven across multiple projects" claims without naming one; a link to tmux-tell's releases page converts the assertion into evidence at zero cost. 3. **README + integration.md: Remove path-alpha/path-gamma labels from quick-start surfaces; define on first use in integration.md** -- the labels are clean shorthand but arrive before they're explained. Quick Start Step 3 should say "see integration.md for token setup options"; integration.md should define the paths before using the shorthand. 4. **integration.md: Extract the release-decide.sh mode=noop/update/cut decision tree** from Step 4 into a "How it works" section -- it's accurate and useful but implementation detail inside a numbered setup step. 5. **AGENTS.md: Add a short glossary or define jargon on first use** -- "codified-to-embodied," "substrate," "mechanism-of-touch," "bus-ping," and "Surveyor XXXX" reviewer codes all require project-internal context. A 10-line glossary at the top pays off across the entire document. **Overall length verdict:** - README: About right. Length is not the problem; bullets 4-5 and the path-alpha/path-gamma paragraph are the specific friction points. - integration.md: Slightly long. Step 4's interior is the main overage; extracting the mode-decision section would tighten the adoption flow meaningfully. - AGENTS.md: About right for its surface. Density is appropriate for implementer pre-flight material; the jargon gaps are the issue, not the length.
herald self-assigned this 2026-07-02 23:46:21 +02:00
Owner

Delta Cold-Read: release-toolkit adopter docs — post-#306 validation

Pilot delta read against README.md, docs/integration.md, and AGENTS.md at main HEAD (post-PR #306 merge). Checking the 5 findings from comment 78681 against current state.


Finding 1 — README bullets 4–5 (mechanism-buries-the-value)

Status: CLEAR

Both offending bullets are rewritten:

  • "Auto-prunes superseded RC tags on each cut (v0.12.0+). The self-bootstrap re-pin discipline..." → "Keeps your tag list tidy. The pre-release (-rc.N) tags a cut creates are pruned automatically once the release ships, so they don't accumulate (v0.12.0+)."
  • "Construction-enforces consumer-pin consistency (v0.13.0+). The build-bake mechanism..." → "Runs the workflow YAML and its scripts at one version. When you pin the toolkit at a tag, the reusable workflow and the scripts it calls are always that same version — no drift between the two (v0.13.0+)."

Both now lead with the user benefit. Mechanism detail is gone. "Self-bootstrap re-pin discipline" and "build-bake mechanism" do not appear in README.


Finding 2 — README: name one production adopter

Status: CLEAR

Status section now reads: "it cuts its own releases and drives tmux-tell's." Named adopter with a link to its releases page — converts the "multiple projects" assertion into evidence.


Finding 3 — path-alpha/path-gamma in quick-start surfaces

Status: CLEAR

path-alpha / path-gamma do not appear anywhere in integration.md (grep returns empty). README Quick Start Step 3 no longer contains the Greek-letter vocabulary — replaced with: "Token setup is optional. The default needs no token... To make cuts fully autonomous on a protected main, see token setup in integration.md."

The Tokens & Permissions section in integration.md introduces (α) / (β) / (γ) via a defining table before using the shorthand. First use is in the section header, immediately followed by the table — acceptable first-use discipline.


Finding 4 — integration.md: decision tree extracted from Step 4

Status: CLEAR

The release-decide.sh mode=noop/update/cut decision tree is now a standalone ## How the cut decides what to do section at line 269 of integration.md — after all five setup steps. Step 4's interior no longer contains the mechanism prose; it carries a cross-reference link: "see How the cut decides what to do below for the mechanism."


Finding 5 — AGENTS.md: jargon defined on first use

Status: CLEAR

AGENTS.md now opens with an explicit ## Glossary section defining all five flagged terms:

  • codified-to-embodied — defined ("a written-down rule we intend to internalize as reflex, not just look up")
  • substrate — defined ("the running system the toolkit acts on: Forgejo, its Actions runner, the live git state, the API")
  • compose-scripts — defined
  • mechanism-of-touch — defined ("the trigger test for the re-pin discipline: did this change touch a compose-script?")
  • bus-ping — defined ("a message sent over the crew's tmux-tell message bus")
  • Surveyor <hex> — defined ("a specific review catch by Surveyor, tagged with the short commit/message hash it came from")

All six glossary entries are present. Jargon used throughout the document is now grounded at the top.


Regressions / new issues

None found. No regressions introduced by the revision. The three surfaces are structurally clean:

  • README: benefit-first feature list, named adopter, clean quick-start with no jargon in the four setup steps.
  • integration.md: sequential adoption steps with implementation detail extracted to their own sections; Tokens section properly introduces token-path shorthand before using it.
  • AGENTS.md: glossary at top pays for itself across the full document.

One pre-existing secondary note (from the original cold-read body, not in the top-5 verdict): integration.md Step 5 still reads "Document the commit + fragment format in your project's CLAUDE.md" without the "or equivalent" qualifier. This was a secondary observation in the original read; it was not tracked as one of the 5 findings and is not blocking.


Verdict

All 5 findings CLEAR. No regressions. Issue #160 can close.

# Delta Cold-Read: release-toolkit adopter docs — post-#306 validation *Pilot delta read against README.md, docs/integration.md, and AGENTS.md at main HEAD (post-PR #306 merge). Checking the 5 findings from comment 78681 against current state.* --- ## Finding 1 — README bullets 4–5 (mechanism-buries-the-value) **Status: CLEAR** Both offending bullets are rewritten: - "Auto-prunes superseded RC tags on each cut (v0.12.0+). The self-bootstrap re-pin discipline..." → **"Keeps your tag list tidy. The pre-release (-rc.N) tags a cut creates are pruned automatically once the release ships, so they don't accumulate (v0.12.0+)."** - "Construction-enforces consumer-pin consistency (v0.13.0+). The build-bake mechanism..." → **"Runs the workflow YAML and its scripts at one version. When you pin the toolkit at a tag, the reusable workflow and the scripts it calls are always that same version — no drift between the two (v0.13.0+)."** Both now lead with the user benefit. Mechanism detail is gone. "Self-bootstrap re-pin discipline" and "build-bake mechanism" do not appear in README. --- ## Finding 2 — README: name one production adopter **Status: CLEAR** Status section now reads: "it cuts its own releases and drives [tmux-tell's](https://git.frankenbit.de/frankenbit/tmux-tell/releases)." Named adopter with a link to its releases page — converts the "multiple projects" assertion into evidence. --- ## Finding 3 — path-alpha/path-gamma in quick-start surfaces **Status: CLEAR** `path-alpha` / `path-gamma` do not appear anywhere in integration.md (grep returns empty). README Quick Start Step 3 no longer contains the Greek-letter vocabulary — replaced with: "Token setup is optional. The default needs no token... To make cuts fully autonomous on a protected `main`, see [token setup in integration.md](#tokens--permissions)." The Tokens & Permissions section in integration.md introduces (α) / (β) / (γ) via a defining table before using the shorthand. First use is in the section header, immediately followed by the table — acceptable first-use discipline. --- ## Finding 4 — integration.md: decision tree extracted from Step 4 **Status: CLEAR** The `release-decide.sh` mode=noop/update/cut decision tree is now a standalone `## How the cut decides what to do` section at line 269 of integration.md — after all five setup steps. Step 4's interior no longer contains the mechanism prose; it carries a cross-reference link: "see [How the cut decides what to do](#how-the-cut-decides-what-to-do) below for the mechanism." --- ## Finding 5 — AGENTS.md: jargon defined on first use **Status: CLEAR** AGENTS.md now opens with an explicit `## Glossary` section defining all five flagged terms: - **codified-to-embodied** — defined ("a written-down rule we intend to internalize as reflex, not just look up") - **substrate** — defined ("the running system the toolkit acts on: Forgejo, its Actions runner, the live git state, the API") - **compose-scripts** — defined - **mechanism-of-touch** — defined ("the trigger test for the re-pin discipline: *did this change touch a compose-script?*") - **bus-ping** — defined ("a message sent over the crew's tmux-tell message bus") - **Surveyor \<hex\>** — defined ("a specific review catch by Surveyor, tagged with the short commit/message hash it came from") All six glossary entries are present. Jargon used throughout the document is now grounded at the top. --- ## Regressions / new issues None found. No regressions introduced by the revision. The three surfaces are structurally clean: - README: benefit-first feature list, named adopter, clean quick-start with no jargon in the four setup steps. - integration.md: sequential adoption steps with implementation detail extracted to their own sections; Tokens section properly introduces token-path shorthand before using it. - AGENTS.md: glossary at top pays for itself across the full document. **One pre-existing secondary note** (from the original cold-read body, not in the top-5 verdict): integration.md Step 5 still reads "Document the commit + fragment format in your project's CLAUDE.md" without the "or equivalent" qualifier. This was a secondary observation in the original read; it was not tracked as one of the 5 findings and is not blocking. --- ## Verdict **All 5 findings CLEAR. No regressions. Issue #160 can close.**
Owner

Closing per Pilot delta cold-read (comment 78759) — all 5 findings CLEAR on merged-#306 state. Herald addressed every point; secondary CLAUDE.md-Step-5 note is non-blocking pre-existing. Set G 2/2 complete; release-toolkit board fully drains + milestone-closes.

Closing per Pilot delta cold-read (comment 78759) — all 5 findings CLEAR on merged-#306 state. Herald addressed every point; secondary CLAUDE.md-Step-5 note is non-blocking pre-existing. Set G 2/2 complete; release-toolkit board fully drains + milestone-closes.
bosun closed this issue 2026-07-03 00:05:09 +02:00
Sign in to join this conversation.
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/release-toolkit#160
No description provided.