Skip to content

scaffold promises .github/ starter templates and cites a file that has never contained them #19

Description

@j4th

What's wrong

github_only_profile.md's Stage 2 provisioning step promises five starter .github/ files (a bug-report issue template, a feature-request issue template, a PR template, a CODEOWNERS file, and a CI workflow stub) and cites references/scaffold_output_template.md as where their bodies live. That file is the template for the docs/cbk/scaffold.md conventions doc scaffold writes about the project — it contains zero issue-template, PR-template, CODEOWNERS, or CI-stub content. The citation is dangling, and the promised bodies exist nowhere else in the kit either.

This is a distinct defect from the four cascade-specific issue templates (cascade-workstream.md, cascade-framing.md, cascade-rough-in.md, cascade-meta.md), which do have real bundled content under references/issue-templates/ and are provisioned correctly by Stage 2.5 (SKILL.md:150). Don't conflate the two systems when reading the fix — that system is fine.

Evidence

github_only_profile.md step 2, verbatim:

Push starter .github/ files. Commit via the file-creation tool: an issue template for bug reports, an issue template for features, a PR template, a CODEOWNERS file (single owner = the user, for solo; ask for team), and one CI workflow stub (.github/workflows/ci.yml) that runs an empty job — real CI gets configured in blueprint. Templates live in references/scaffold_output_template.md.

(.claude/skills/scaffold/references/github_only_profile.md:19)

The cited file holds none of it. grep -ni "ISSUE_TEMPLATE\|pull_request\|CODEOWNERS\|ci\.yml\|workflows" .claude/skills/scaffold/references/scaffold_output_template.md → zero hits. Its bug / feature occurrences are the label taxonomy (lines 64, 150, 194) plus one unrelated prose use of "major feature" (line 162) — never a template body:

Label taxonomy:

  • Type labels (one per issue): bug, feature, improvement, tech-debt,
    documentation

(.claude/skills/scaffold/references/scaffold_output_template.md:63-65)

Repo-wide greps confirming the promised content doesn't exist anywhere else in the kit (all run from the repo root, all re-run for this issue):

  • grep -rn "PULL_REQUEST_TEMPLATE\|pull_request_template" . → one hit, and it's the same unfulfilled promise: bootstrap_checklist_template.md:22 ("**PR template**: added at \.github/pull_request_template.md`"`), not a template body.
  • grep -rn "CODEOWNERS" . → two hits, both promises, no body: github_only_profile.md:19 (quoted above) and manual_steps.md:29 ("**CODEOWNERS enforcement**: scaffold can create the file, but enforcement requires branch protection...").
  • grep -rn "name: Bug Report\|name: Feature Request\|bug_report.yml\|feature_request.yml" . → no hits (exit 1).
  • grep -rn "^\* @\|CODEOWNERS file" . → no hits (exit 1).

Three other surfaces assume the promise was kept, which makes the gap load-bearing rather than cosmetic:

  • github_only_profile.md's own verification matrix: "| Issue templates work | Click \"New issue\" in the repo | Templates appear in a dropdown |" (line 65).
  • bootstrap_checklist_template.md's worked "Completed" example and verification row: "- **Issue templates**: bug report and feature request templates added under \.github/ISSUE_TEMPLATE/`"(line 21) and"| Issue templates work | Click "New issue" in the repo | Bug and feature templates appear in dropdown | ☐ |"` (line 64).
  • linear_planning.md:24 shows the same dangling promise reaches the Linear planning axis too: "- **GitHub**: same as the \github_only_profile.md` flow minus the GitHub Projects board (planning lives in Linear instead). Repo, labels, starter `.github/` files."`

A real run's evidence (echosphere — Linear planning axis, 34 commits on main). Its .github/ISSUE_TEMPLATE/ has real bug_report.yml / feature_request.yml content, titled "[bug] " and "[idea] " with project-specific labels. That content cannot have come from a shared kit template, because the kit has none — so it was improvised for that repo. Meanwhile find . -iname CODEOWNERS in echosphere returns nothing at all: that part of the promise was dropped rather than improvised. (Its pull_request_template.md does exist, likewise with no upstream source.)

For status context, the kit's own root README records: "'GitHub Issues' planning has the kit's deepest documentation and is designed first-class, but no real cascade run has exercised it yet" (README.md:119, § "Exercised vs designed"). Echosphere ran on Linear, so the github-issues code path specifically is still unexercised end-to-end — but per linear_planning.md:24 the Linear axis hits this same step, which is why echosphere is evidence at all.

Why it matters

Any scaffold session on the github-issues planning axis — or the linear axis, per linear_planning.md:24 — that reaches this step has nothing to copy: the cited file is the wrong artifact. The session either fabricates issue-template / PR-template / CODEOWNERS / CI-stub content from scratch each time, with no consistency across projects, or silently skips a promised deliverable, as echosphere did with CODEOWNERS. Either way the bootstrap checklist and verification matrix that scaffold hands the user ("Templates appear in a dropdown", "Bug and feature templates appear in dropdown") describe a state the skill never produced from a canonical source, so the user has no way to tell "scaffold did this right" from "the agent made something up this time."

Proposed change

  1. Add .claude/skills/scaffold/references/github-starter-templates.md, holding the literal bodies for .github/ISSUE_TEMPLATE/bug_report.yml, .github/ISSUE_TEMPLATE/feature_request.yml, .github/ISSUE_TEMPLATE/config.yml, .github/pull_request_template.md, and .github/CODEOWNERS, plus the .github/workflows/ci.yml empty-job stub github_only_profile.md already describes.

    A worked version exists downstream at you-are-hear/.claude/skills/scaffold/references/github-starter-templates.md and is a reasonable starting point — its provenance note reaches the same empty-grep conclusion independently. Two caveats when importing it:

    • Don't import its ## Review gate section verbatim. That heading and its "§ The floor" backing section are a you-are-hear-local extension of pr-review.md that does not exist upstream — grep -n "The floor" .claude/rules/pr-review.md in this kit returns nothing (exit 1), and grep -rn "Review gate" .claude/ README.md returns nothing at all. Upstream's actual, already-established PR-body contract is the ## Triage block .claude/commands/finish.md Step 10 defines ("A \## Triage` block listing every finding under its class"…"Apply (N) / Apply with care (N)"…"Surface (N)"…"Defer (N)"…"Reject (N)", finish.md:182-186). Shape the PR-template stub to that contract instead. Adopting the you-are-hear convention upstream would be a separate, larger change to pr-review.mdandfinish.md` — not something this fix should smuggle in.
    • That worked copy is not cited from its own SKILL.md § Reference files, so a straight import would inherit the omission item 3 exists to prevent.
  2. Fix the dangling citation at .claude/skills/scaffold/references/github_only_profile.md:19 — replace "Templates live in \references/scaffold_output_template.md`."` with a citation to the new file.

  3. Add a row for the new file to .claude/skills/scaffold/SKILL.md § Reference files (lines 302–313). Per this repo's own CLAUDE.md discipline — "Skills don't auto-discover references; the entrypoint must cite them" (CLAUDE.md:78) — a new reference needs an entrypoint pointer. Note that list is already incomplete: references/backends.md is used at SKILL.md:178 and :188 but has no row. Worth adding both while the section is open.

No change needed to bootstrap_checklist_template.md or manual_steps.md — their promises become true once (1) exists; they're evidence of the gap, not part of the fix.


Filed from an adversarially-verified harvest against j4th/echosphere (31 merged PRs, 29 ADRs) and the first github-issues-axis run at j4th/you-are-hear. Every quote in this issue was grep-verified against the repo it is attributed to, and every absence claim independently re-run, across three audit rounds.

Activity

  1. added
    bugSomething isn't working
    harvestHarvested from a real cascade run
    source:echosphereEvidence from the echosphere run (Linear axis)
    source:you-are-hearEvidence from the you-are-hear run (GitHub axis)
    on Aug 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingharvestHarvested from a real cascade runsource:echosphereEvidence from the echosphere run (Linear axis)source:you-are-hearEvidence from the you-are-hear run (GitHub axis)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions