Skip to main content

fs-change-control

How changes to founder-skills are classified, gated, and reviewed: the operator-approved spec -> checkbox plan -> commits-matching-plan-verbatim pipeline, plus the five standing rules (direct-push-to-master with a mandatory local pre-push gate, no GitHub Actions ever, public repo canonical over private claude-skills, prd/tasks rewrite licensed, operator commits / assistants never run mutating git) with the rationale and incident behind each. Use when a maintainer asks "how do I ship a change here", "do I need a spec for this", "can I just push this fix", "why is there no CI", "who commits", "can I edit the site copy", "what's the change process", or before writing any spec, plan, or commit in this repo.

インストールへ移動

ソース情報

リポジトリ
craigm26/founder-skills
ソースの最終更新活動
2026年7月2日 23:29
検出された SKILL.md の言語
英語
スター
1
フォーク
0

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
fs-change-control
description
How changes to founder-skills are classified, gated, and reviewed: the operator-approved spec -> checkbox plan -> commits-matching-plan-verbatim pipeline, plus the five standing rules (direct-push-to-master with a mandatory local pre-push gate, no GitHub Actions ever, public repo canonical over private claude-skills, prd/tasks rewrite licensed, operator commits / assistants never run mutating git) with the rationale and incident behind each. Use when a maintainer asks "how do I ship a change here", "do I need a spec for this", "can I just push this fix", "why is there no CI", "who commits", "can I edit the site copy", "what's the change process", or before writing any spec, plan, or commit in this repo.
# fs-change-control — how changes ship in founder-skills Announce at start: "Loading fs-change-control — checking what class of change this is and which gate applies." This repo is a **live-publishing** repo: every push to `master` is instantly installable by marketplace users and redeploys the GitHub Pages site (served from `master:/docs`). There is no staging branch, no CI, and no review app. The change-control pipeline below is the ONLY safety mechanism. Do not route around it, and do not let any other skill route around it. ## Terms (defined once) | Term | Meaning here | |---|---| | **Operator** | The human owner (Craig Merry). The only party who approves specs and runs mutating git. | | **Spec** | A design document in `docs/superpowers/specs/`, date-prefixed, carrying `**Status:** approved by operator`. Decisions live here. | | **Plan** | A checkbox implementation plan in `docs/superpowers/plans/`, date-prefixed, matching a spec. Execution steps live here, including the exact commit messages. | | **Pre-push gate** | The mandatory local verification run before any push (tests + JSON parse + sanitization grep + URL sweep). Executable script owned by `fs-release-and-publish`. | | **Mutating git** | `git add`, `git commit`, `git push`, `git mv`, `git rm`, branch/tag creation, anything that changes repo state. Read-only (`git log/diff/show/status`) is always allowed. | | **Sanitization** | The hard gate that keeps client names, secrets prefixes, and `/home/craigm26` paths out of anything public. Detail owned by `fs-doctrine-and-honesty`. | ## The pipeline: spec -> plan -> verbatim commits Every non-trivial change flows through three artifacts, in order: ``` docs/superpowers/specs/YYYY-MM-DD-<topic>[-design].md (operator approves) | v docs/superpowers/plans/YYYY-MM-DD-<topic>.md (checkbox tasks + literal commit messages) | v commits on master whose messages match the plan text VERBATIM ``` ### 1. The spec - Path: `docs/superpowers/specs/`, filename date-prefixed (`2026-06-11-publish-private-six-design.md`). Three of the four existing specs use a `-design` suffix; one (`2026-06-11-anthropic-primitives-upgrade.md`) does not — the date prefix is the hard convention, the suffix is not. - Header format (copy this): ```markdown # <Title of the change> **Date:** YYYY-MM-DD · **Status:** approved by operator ``` - Body: Goal, Motivation/Decisions, Workstreams, Out of scope, Risks. See `docs/superpowers/specs/2026-06-11-public-judgment-layer-design.md` as the exemplar. - A spec is not actionable until its Status line says approved by the operator. Assistants draft specs; the operator approves them. All 4 existing specs carry `Status: approved by operator` (verified 2026-07-02). ### 2. The plan - Path: `docs/superpowers/plans/`, same date prefix, no `-design` suffix. - Opens with the agentic-workers header (copy verbatim from an existing plan): ```markdown > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. ``` - Then `**Goal:**`, `**Architecture:**`, `**Tech Stack:**`, then `### Task N:` sections of `- [ ] **Step N:**` checkboxes. - **Plans spell out the literal commit message for each commit**, e.g. `git commit -m "refactor: atlas emitter -> vendor-neutral market map emitter"`. - Observed convention (verified 2026-07-02): the checkboxes are NOT ticked retroactively — all 3 existing plans have 0 `[x]` boxes despite being fully executed. Completion evidence is the commit history, not the checkbox state. Do not "fix" old plans by ticking boxes. ### 3. Commits match the plan verbatim The commit message in the plan IS the commit message on master. Verified examples (git log, 2026-07-02): | Plan text | Commit | |---|---| | `refactor: atlas emitter -> vendor-neutral market map emitter` | `5f07aef` | | `docs: vendor-neutral market-map schema + pluggable sinks doc` | `8b4cbdf` | | `feat: publish the six orchestration/craft skills as public plugins` | `030c3d0` | | `docs: README + marketplace — 12/12 installable` | `c2fd100` | This makes the plan an audit trail: a reviewer can diff `git log --oneline` against the plan file and see exactly what shipped and in what order. When you execute a plan, use its commit messages exactly — do not paraphrase. ### Observed pipeline variants (classification) | Change class | Required artifacts | Precedent | |---|---|---| | Multi-task workstream (new plugins, site overhaul, genericization) | Spec + Plan + verbatim commits | `publish-private-six`, `public-judgment-layer`, `skill-sites-family` (all 2026-06-11) | | Focused upgrade with clear scope | Spec -> commit directly (no plan) | `anthropic-primitives-upgrade`: spec `bb6947d` -> feat `93d91a2`, no plan file | | Site copy edits (`docs/index.html`) | Spec required — "site edits need coordinated spec per house change-control". The known oversell drift fix (defect ledger #6) is deliberately WAITING on a spec; do not hotfix it. | Facts pack 2026-07-02 | | Pre-pipeline history | The first 5 commits (2026-06-04 through `951c82a`) predate the pipeline, which began at spec commit `4caee62` (2026-06-11). Do not cite them as precedent for skipping specs. | git log | There is no documented "trivial" tier. If you think a change is too small for a spec, the safe default in a live-publishing repo is: draft a short spec anyway and let the operator approve or waive it. (UNVERIFIED: no written waiver rule exists; absence of a tier is not permission.) ### Pipeline debt — DISCHARGED 2026-07-02 The 2026-07-02 handoff batch (template rescue + fs- library + 3 public plugins, then the campaign Phases 1–3 and the PlatAtlas sink proving) initially shipped operator-directed without a spec. The debt was discharged the same day with a partly-retroactive doc-of-record pair: `docs/superpowers/specs/2026-07-02-flagship-campaign-execution.md` (Status: approved by operator, in-session instructions quoted) + `docs/superpowers/plans/2026-07-02-flagship-campaign-execution.md` (checked as executed, with evidence and re-runnable verification). Precedent: a retroactive spec is acceptable ONLY for operator-instructed-in-session work, must say so explicitly, and must land in the same push as the work it records — it is a record, not a bypass. ## The five standing rules All five are operator-approved standing policy as of 2026-07-02. Each row: the rule, why it exists, and the incident or decision behind it. | # | Rule | Rationale | Incident / decision behind it | |---|---|---|---| | 1 | **Direct-push-to-master stays; a mandatory LOCAL pre-push gate is non-negotiable** (all 3 test suites + JSON parse + sanitization grep + URL sweep). | Master is live: every push publishes to installers and the Pages site instantly. With no staging, the gate is the only thing standing between a mistake and the public. Schema-only validation is proven insufficient. | **build-options shipped broken** (defect ledger #1): `assets/matrix.template.html` was swallowed by a plugin `.gitignore` line `*.html` and never committed; `claude plugin validate` passed anyway because it checks manifest schema only. Also **site oversell drift** (#6) shipped ungated. Gate made mandatory by operator decision 2026-07-02. | | 2 | **No GitHub Actions ever.** No new workflow files, no auto-trigger CI, no Actions-based deploys. The gate runs locally. | GitHub Actions is billing-blocked for the org, and the operator prefers local verification he can run and inspect on the host (a Raspberry Pi). | Standing org-wide rule since **2026-06-19** (billing-blocked + operator preference), reaffirmed for this repo 2026-07-02. | | 3 | **Public founder-skills is CANONICAL for the six graduated skills; private claude-skills is frozen as a historical archive.** Never port changes back to private; never treat private as upstream. | The six skills graduated 2026-06-11 as sanitized near-copies, and the public repo then moved AHEAD (the v0.2.0 Anthropic-primitives upgrades were public-only). Two writable copies would guarantee divergence and re-introduce unsanitized content risk. | Graduation executed per `docs/superpowers/plans/2026-06-11-publish-private-six.md`; canonical/frozen status set by operator decision 2026-07-02. Private repo last commit `ab5bcb2` (2026-06-11). | | 4 | **prd and tasks MAY be rewritten into house style**, and their hard `agent-browser` CLI dependency should be genericized (the same way Codex became "external executor"). | They are off-style imports from an external "compound engineering" methodology: different voice, emoji ❌/✅, no references/assets, no model routing, ~480 lines (2–6× house norm), and an unstated third-party install dependency. They drag the library's quality floor down. | Defect ledger #5; rewrite explicitly licensed by operator decision 2026-07-02. Until rewritten, do NOT copy style from prd/tasks (see `fs-skill-style-guide`). | | 5 | **The operator commits. Assistants never run mutating git commands.** Assistants prepare working-tree changes, run the gate, and hand off; the operator reviews and commits/pushes. | On a live-publishing master, the commit IS the release. Keeping a human at the commit boundary is the review step this repo has instead of PRs. | Operator decision 2026-07-02, demonstrated the same day: the template rescue (defect #1 fix) was executed by an assistant but deliberately left uncommitted in the working tree for operator review (`git status` shows the modified `.gitignore` + untracked template as of 2026-07-02). | ### Rule 1 in practice — the gate's contents The gate components (executable script and full runbook owned by `fs-release-and-publish` — load that skill to actually push; summary here for classification only): 1. All 3 test suites green: market-validation pytest (6), build-options pytest (9), market-validation JS `node --test 'tests/js/*.test.mjs'` (5). Env setup quirks (PEP-668 venv, glob-form-only node invocation) are owned by `fs-toolchain-and-tests`. 2. JSON parse: `.claude-plugin/marketplace.json` + every `plugins/*/.claude-plugin/plugin.json`, and every plugin `source` path exists. 3. Sanitization grep over the public dirs (`plugins/ docs/ README.md .claude-plugin/`, excluding `docs/superpowers`), case-insensitive — zero hits (pattern and rationale owned by `fs-doctrine-and-honesty`; the narrower plugins/-only historical pattern it extends is in `docs/superpowers/plans/2026-06-11-publish-private-six.md`). 4. External URL sweep: every external URL in README, SKILL.mds, plugin READMEs, and `docs/index.html` curls 2xx (or 3xx resolving to 2xx with `-L`). Note the last full URL verification was 2026-06-11 — 3 weeks stale as of 2026-07-02 (`fs-freshness-watch` owns the re-verification sweep). ## Runbook: shipping a change end-to-end 1. **Classify** the change using the table above. Anything touching published plugin content, the site, README, or marketplace.json needs at least a spec. 2. **Draft the spec** in `docs/superpowers/specs/YYYY-MM-DD-<topic>.md` with the header format above; leave Status pending until the operator approves. Get operator approval (only the operator can set `Status: approved by operator`). 3. **Write the plan** (multi-task changes) in `docs/superpowers/plans/YYYY-MM-DD-<topic>.md` with checkbox tasks and literal commit messages. 4. **Implement** in the working tree. If you are an assistant: no `git add/commit/push` at any point. Prepare the tree, that's all. 5. **Run the pre-push gate** (load `fs-release-and-publish` for the executable script). All green or you stop. 6. **Hand off to the operator** with: the spec, the plan, the gate output, and the exact plan-specified commit messages. The operator reviews, commits, pushes. 7. **After push**: master is live immediately; installed users' plugin cache (`~/.claude/plugins/cache/founder-skills/` — environment-specific path, the actual install mechanism) silently desyncs until they update. Post-push verification is `fs-release-and-publish`'s job. Common mistakes: | Mistake | Fix | |---|---| | "It's a one-line site fix, I'll just push it" | Site edits need a coordinated spec. The known oversell drift is intentionally unfixed pending one. | | Paraphrasing plan commit messages | Copy them verbatim — the plan/log match is the audit trail. | | Ticking checkboxes in old plans | Plans stay unchecked by convention; commits are the completion record. | | Adding a GitHub Actions workflow "just for tests" | Rule 2: never. Gate runs locally. | | Trusting `claude plugin validate` as the gate | It is manifest-schema-only; it passed a plugin whose core asset was missing. Run the full gate. | | Backporting a fix to private claude-skills | Rule 3: private is frozen. Public is canonical. | | Assistant running `git commit` because "the operator asked me to prepare the release" | Rule 5: preparing ≠ committing. Only the operator's own hands (or explicit permission-system approval) commit. | ## When NOT to use this skill - **Actually executing a push** (gate script, Pages verification, cache-desync handling) → load `fs-release-and-publish`. - **Setting up the test environment or running/extending suites** → `fs-toolchain-and-tests`. - **Sanitization patterns, no-oversell rules, source-traceability doctrine** → `fs-doctrine-and-honesty`. - **Writing a new skill's content** (style, structure) → `fs-skill-style-guide` and `fs-skill-authoring`. - **First orientation in the repo** ("what is this place") → `fs-orientation`. - **Past failures as lessons** (full incident narratives) → `fs-failure-archaeology`; this skill only cites incidents as rule rationale. ## Provenance and maintenance Volatile facts in this skill were verified 2026-07-02 against repo HEAD `2e4c9dd`. Re-verify: ```bash # Specs all approved + date-prefixed (expect 4 files, each with an approved Status line) grep -l "Status:.*approved by operator" docs/superpowers/specs/*.md # Plans exist and remain unchecked (expect 3 files; first grep -c returns 0 for each) grep -c '\- \[x\]' docs/superpowers/plans/*.md; ls docs/superpowers/plans/ # Commit messages still match plan text verbatim (spot-check) git log --oneline | grep -F "refactor: atlas emitter -> vendor-neutral market map emitter" grep -F "atlas emitter -> vendor-neutral" docs/superpowers/plans/2026-06-11-public-judgment-layer.md # Single live branch, direct-push model unchanged (expect only master) git branch -a # Rule 5 evidence: template rescue still uncommitted, or has been operator-committed since git status --short plugins/build-options/ # No Actions workflows have crept in (expect no output) ls .github/workflows/ 2>/dev/null # Sanitization pattern of record grep -A1 "Sanitization gate" docs/superpowers/plans/2026-06-11-publish-private-six.md ``` Sources of record: `docs/superpowers/specs/2026-06-11-public-judgment-layer-design.md` (live-repo risk + verification gate origin), `docs/superpowers/plans/2026-06-11-publish-private-six.md` (sanitization gate pattern, graduation), `docs/superpowers/plans/2026-06-11-public-judgment-layer.md` (verbatim commit messages), git log. The five standing rules are operator decisions of 2026-07-02 recorded in the facts pack compiled that day; if a later operator decision supersedes any rule, that decision wins — update this file the same session.
GitHubで見る