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
-
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.
-
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.
-
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.
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, aCODEOWNERSfile, and a CI workflow stub) and citesreferences/scaffold_output_template.mdas where their bodies live. That file is the template for thedocs/cbk/scaffold.mdconventions 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 underreferences/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.mdstep 2, verbatim:(
.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. Itsbug/featureoccurrences are the label taxonomy (lines 64, 150, 194) plus one unrelated prose use of "major feature" (line 162) — never a template body:(
.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) andmanual_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:24shows 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 realbug_report.yml/feature_request.ymlcontent, 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. Meanwhilefind . -iname CODEOWNERSin echosphere returns nothing at all: that part of the promise was dropped rather than improvised. (Itspull_request_template.mddoes 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 thegithub-issuescode path specifically is still unexercised end-to-end — but perlinear_planning.md:24the Linear axis hits this same step, which is why echosphere is evidence at all.Why it matters
Any scaffold session on the
github-issuesplanning axis — or thelinearaxis, perlinear_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
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.ymlempty-job stubgithub_only_profile.mdalready describes.A worked version exists downstream at
you-are-hear/.claude/skills/scaffold/references/github-starter-templates.mdand is a reasonable starting point — its provenance note reaches the same empty-grep conclusion independently. Two caveats when importing it:## Review gatesection verbatim. That heading and its "§ The floor" backing section are a you-are-hear-local extension ofpr-review.mdthat does not exist upstream —grep -n "The floor" .claude/rules/pr-review.mdin this kit returns nothing (exit 1), andgrep -rn "Review gate" .claude/ README.mdreturns nothing at all. Upstream's actual, already-established PR-body contract is the## Triageblock.claude/commands/finish.mdStep 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 topr-review.mdandfinish.md` — not something this fix should smuggle in.SKILL.md§ Reference files, so a straight import would inherit the omission item 3 exists to prevent.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.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.mdis used atSKILL.md:178and:188but has no row. Worth adding both while the section is open.No change needed to
bootstrap_checklist_template.mdormanual_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 firstgithub-issues-axis run atj4th/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.