Skip to content
Back to skills

Scaffolding Maintainer

ASecurity

Maintains and improves the project-scaffolding skill. This skill should be used when the user asks to "update the scaffolding skill", "refresh framework versions", "are the versions stale", "check for outdated packages", "improve project-scaffolding", "act on the scaffolding observations", "add a project type to the scaffolder", "fix a scaffolding template", or after a scaffolding session logged an entry in assets/observations.md. Handles two distinct jobs: refreshing dependency facts from th...

  • 54 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 23, 2026
developmenttypescriptpythongobashreactangularnextjsnodegit

Works with

  • vscode
  • cli

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add hmohamed01/Claude-Code-Scaffolding-Skill --skill scaffolding-maintainer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Scaffolding Maintainer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Scaffolding Maintainer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hmohamed01-scaffolding-maintainer/badge)](https://www.skillsdirectory.com/skills/hmohamed01-scaffolding-maintainer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: scaffolding-maintainer
description: >
  Maintains and improves the project-scaffolding skill. This skill should be used when the user
  asks to "update the scaffolding skill", "refresh framework versions", "are the versions stale",
  "check for outdated packages", "improve project-scaffolding", "act on the scaffolding
  observations", "add a project type to the scaffolder", "fix a scaffolding template", or after a
  scaffolding session logged an entry in assets/observations.md. Handles two distinct jobs:
  refreshing dependency facts from the npm and PyPI registries, and patching the skill's
  procedures, templates, and wizard options based on recorded real-world usage.
---

# Scaffolding Maintainer

Improves the `project-scaffolding` skill along two separate paths. Keep them separate — they have
different sources of truth and different failure modes.

| Path | What changes | Source of truth | Risk if wrong |
|------|--------------|-----------------|---------------|
| **A. Fact refresh** | Version numbers in `assets/versions.json` | npm / PyPI registries | Generated projects pin versions that do not exist or do not install |
| **B. Procedure improvement** | SKILL.md, references, wizard options, templates in `scaffold.py` | `assets/observations.md` | The wizard recommends something wrong or generates broken code |

## Absolute Rules

1. **Never write a version number from memory.** Model recall of package versions is unreliable
   and silently wrong. Every version in `versions.json` must come from `refresh_versions.py`,
   which queries the registries directly. If the network is unavailable, stop and say so.
2. **Never auto-apply a major version bump.** A major bump can invalidate the *template source*
   in `scaffold.py`, not just the number. Follow `references/template-drift.md` first.
3. **Never finish without running verification.** `scripts/verify_scaffold.py` must pass before
   repackaging, and `--install` must pass before adopting any version change. A version that
   resolves is not a version that builds.
4. **Never delete observation entries.** Mark them resolved in place so the log stays auditable.

## Path A: Refresh Versions

Run from the `project-scaffolding/` directory.

```bash
python3 scripts/scaffold.py --version-status      # how stale is it?
python3 scripts/refresh_versions.py               # dry run; reports -> bump  !! review
```

Read the report:

- **`->` bump lines** are minor/patch moves within the existing major. Because the manifest uses
  caret (`^`) and `>=` ranges, users already resolve to these versions at install time. Applying
  them is safe and mostly cosmetic.
- **`!!` review lines** are major bumps, pre-1.0 minors, or `0.0.x` patches. These need judgment.
  Do not apply them with `--include-review` until the template check in
  `references/template-drift.md` is done for each affected package.
- A `!!` line ending in `[safe now: X]` has an in-series update available. `--apply` takes those
  automatically: the major stays held, but the package still gets its fixes. An in-series bump is
  safe for the package itself, **not necessarily for its peers** — bumping TypeScript 5.8 to 5.9
  once broke Angular 19, whose peer range capped at `<5.9`. Always run `--install` afterwards.

Apply the safe set, then handle reviews individually:

```bash
python3 scripts/refresh_versions.py --apply       # applies bump lines only
python3 scripts/verify_scaffold.py                # regenerate every project type
```

When a major bump is genuinely not wanted — a package pinned for compatibility with something
else, such as React Native tracking an Expo SDK — record it in the manifest's `hold` map with a
reason rather than repeatedly declining it:

```json
"hold": { "react-native": "must match the Expo SDK version the wizard offers" }
```

## Path B: Act on Observations

Read `assets/observations.md`. Group entries by tag and decide what each class warrants:

| Tag | Typical fix |
|-----|-------------|
| `default-rejected` | If one default is rejected repeatedly, change the recommendation in SKILL.md and `references/wizard-options.md` — or present it as an explicit choice instead of a default |
| `missing-option` | Add the framework or option: update `references/wizard-options.md`, SKILL.md's type list, and implement a creator method in `scaffold.py` |
| `broken-output` | Fix the generator, then add the case to `verify_scaffold.py` so it cannot regress |
| `template-drift` | Update the template method in `scaffold.py` to match the pinned major |

**Require a pattern before changing a default.** A single rejection is one user's preference, not
evidence. Two or three independent entries with the same shape justify a change. State the
evidence count when proposing one.

When an entry is acted on, append ` -> RESOLVED <date>: <what changed>` to that line. When an
entry is judged not actionable, append ` -> WONTFIX <date>: <why>`.

See `references/review-workflow.md` for the full patching procedure, including how to add a new
project type end to end.

## Verification (mandatory)

```bash
python3 scripts/verify_scaffold.py                # all types generate, configs parse
python3 scripts/verify_scaffold.py --snapshot     # record current output as the golden baseline
python3 scripts/verify_scaffold.py --compare      # diff against the golden baseline
```

Use `--compare` after any change that should **not** alter output (a refactor). Use `--snapshot`
to re-baseline deliberately after a change that should. An unexplained diff means stop and
investigate, not re-snapshot.

**`--install` is the mode that finds real defects.** Generation checks confirm files are
well-formed; they cannot tell that a template imports a package nobody declared, that a lint
script points at a removed command, or that a tsconfig option was deprecated. Only installing the
project and running its scripts finds those. Run it after any version adoption, and after any
template change:

```bash
python3 scaffolding-maintainer/scripts/verify_scaffold.py --install --only react nextjs
```

Node version matters: run it on the Node major the manifest targets, since several toolchains
refuse to start on older releases.

**Stage the baseline with `-f`.** Generated projects contain their own `.gitignore` files, and a
nested `.gitignore` overrides the repository's rules for its subtree — so a plain `git add` drops
files (`.vscode/settings.json`, `src/lib/*`) from the baseline without reporting anything:

```bash
python3 scaffolding-maintainer/scripts/verify_scaffold.py --snapshot
git add -f tests/golden
git diff --cached --name-only -- tests/golden | wc -l   # must equal the file count on disk
```

Already-tracked files stay tracked regardless of ignore rules; `-f` matters only for files a
snapshot newly introduces.

## Repackaging

After any change under `project-scaffolding/`, repackage from the repository root:

```bash
cd project-scaffolding && zip -r ../project-scaffolding.skill SKILL.md scripts/ references/ assets/
cd ../scaffolding-maintainer && zip -r ../scaffolding-maintainer.skill SKILL.md scripts/ references/
```

Note `assets/` is included — the version manifest lives there, and a package without it will
fail at import with a missing-manifest error.

Then record the change in `CHANGELOG.md` at the repository root.

## Additional Resources

- **`references/template-drift.md`** — how to check whether a major bump invalidates template
  source, package by package
- **`references/review-workflow.md`** — full procedure for patching the skill, including adding a
  new project type
- **`scripts/verify_scaffold.py`** — generates every project type and validates the output

Files in this skill

  • SKILL.md7.5 KB
  • references/review-workflow.md4.8 KB
  • references/template-drift.md4.8 KB
  • scripts/verify_scaffold.py10.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.