mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-01 11:17:50 +02:00
b805aa0113
* feat: add Confusion Protocol to preamble resolver Injects a high-stakes ambiguity gate at preamble tier >= 2 so all workflow skills get it. Fires when Claude encounters architectural decisions, data model changes, destructive operations, or contradictory requirements. Does NOT fire on routine coding. Addresses Karpathy failure mode #1 (wrong assumptions) with an inline STOP gate instead of relying on workflow skill invocation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: add Hermes and GBrain host configs Hermes: tool rewrites for terminal/read_file/patch/delegate_task, paths to ~/.hermes/skills/gstack, AGENTS.md config file. GBrain: coding skills become brain-aware when GBrain mod is installed. Same tool rewrites as OpenClaw (agents spawn Claude Code via ACP). GBRAIN_CONTEXT_LOAD and GBRAIN_SAVE_RESULTS NOT suppressed on gbrain host, enabling brain-first lookup and save-to-brain behavior. Both registered in hosts/index.ts with setup script redirect messages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: GBrain resolver — brain-first lookup and save-to-brain New scripts/resolvers/gbrain.ts with two resolver functions: - GBRAIN_CONTEXT_LOAD: search brain for context before skill starts - GBRAIN_SAVE_RESULTS: save skill output to brain after completion Placeholders added to 4 thinking skill templates (office-hours, investigate, plan-ceo-review, retro). Resolves to empty string on all hosts except gbrain via suppressedResolvers. GBRAIN suppression added to all 9 non-gbrain host configs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: wire slop:diff into /review as advisory diagnostic Adds Step 3.5 to the review template: runs bun run slop:diff against the base branch to catch AI code quality issues (empty catches, redundant return await, overcomplicated abstractions). Advisory only, never blocking. Skips silently if slop-scan is not installed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: add Karpathy compatibility note to README Positions gstack as the workflow enforcement layer for Karpathy-style CLAUDE.md rules (17K stars). Links to forrestchang/andrej-karpathy-skills. Maps each Karpathy failure mode to the gstack skill that addresses it. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: improve native OpenClaw thinking skills office-hours: add design doc path visibility message after writing ceo-review: add HARD GATE reminder at review section transitions retro: add non-git context support (check memory for meeting notes) Mirrors template improvements to hand-crafted native skills. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: update tests and golden fixtures for new hosts - Host count: 8 → 10 (hermes, gbrain) - OpenClaw adapter test: expects undefined (dead code removed) - Golden ship fixtures: updated with Confusion Protocol + vendoring Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: regenerate all SKILL.md files Regenerated from templates after Confusion Protocol, GBrain resolver placeholders, slop:diff in review, HARD GATE reminders, investigation learnings, design doc visibility, and retro non-git context changes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: update project documentation for v0.18.0.0 - CHANGELOG: add v0.18.0.0 entry (Confusion Protocol, Hermes, GBrain, slop in review, Karpathy note, skill improvements) - CLAUDE.md: add hermes.ts and gbrain.ts to hosts listing - README.md: update agent count 8→10, add Hermes + GBrain to table - VERSION: bump to 0.18.0.0 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: sync package.json version to 0.18.0.0 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: extract Step 0 from review SKILL.md in E2E test The review-base-branch E2E test was copying the full 1493-line review/SKILL.md into the test fixture. The agent spent 8+ turns reading it in chunks, leaving only 7 turns for actual work, causing error_max_turns on every attempt. Now extracts only Step 0 (base branch detection, ~50 lines) which is all the test actually needs. Follows the CLAUDE.md rule: "NEVER copy a full SKILL.md file into an E2E test fixture." Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: update GBrain and Hermes host configs for v0.10.0 integration GBrain: add 'triggers' to keepFields so generated skills pass checkResolvable() validation. Add version compat comment. Hermes: un-suppress GBRAIN_CONTEXT_LOAD and GBRAIN_SAVE_RESULTS. The resolvers handle GBrain-not-installed gracefully, so Hermes agents with GBrain as a mod get brain features automatically. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: GBrain resolver DX improvements and preamble health check Resolver changes: - gbrain query → gbrain search (fast keyword search, not expensive hybrid) - Add keyword extraction guidance for agents - Show explicit gbrain put_page syntax with --title, --tags, heredoc - Add entity enrichment with false-positive filter - Name throttle error patterns (exit code 1, stderr keywords) - Add data-research routing for investigate skill - Expand skillSaveMap from 4 to 8 entries - Add brain operation telemetry summary Preamble changes: - Add gbrain doctor --fast --json health check for gbrain/hermes hosts - Parse check failures/warnings count - Show failing check details when score < 50 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: preserve keepFields in allowlist frontmatter mode The allowlist mode hard-coded name + description reconstruction but never iterated keepFields for additional fields. Adding 'triggers' to keepFields was a no-op because the field was silently stripped. Now iterates keepFields and preserves any field beyond name/description from the source template frontmatter, including YAML arrays. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: add triggers to all 38 skill templates Multi-word, skill-specific trigger keywords for GBrain's RESOLVER.md router. Each skill gets 3-6 triggers derived from its "Use when asked to..." description text. Avoids single generic words that would collide across skills (e.g., "debug this" not "debug"). These are distinct from voice-triggers (speech-to-text aliases) and serve GBrain's checkResolvable() validation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: regenerate all SKILL.md files and update golden fixtures Regenerated from updated templates (triggers, brain placeholders, resolver DX improvements, preamble health check). Golden fixtures updated to match. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: settings-hook remove exits 1 when nothing to remove gstack-settings-hook remove was exiting 0 when settings.json didn't exist, causing gstack-uninstall to report "SessionStart hook" as removed on clean systems where nothing was installed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: update project documentation for GBrain v0.10.0 integration ARCHITECTURE.md: added GBRAIN_CONTEXT_LOAD and GBRAIN_SAVE_RESULTS to resolver table. CHANGELOG.md: expanded v0.18.0.0 entry with GBrain v0.10.0 integration details (triggers, expanded brain-awareness, DX improvements, Hermes brain support), updated date. CLAUDE.md: added gbrain to resolvers/ directory comment. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: routing E2E stops writing to user's ~/.claude/skills/ installSkills() was copying SKILL.md files to both project-level (.claude/skills/ in tmpDir) and user-level (~/.claude/skills/). Writing to the user's real install fails when symlinks point to different worktrees or dangling targets (ENOENT on copyFileSync). Now installs to project-level only. The test already sets cwd to the tmpDir, so project-level discovery works. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: scale Gemini E2E back to smoke test Gemini CLI gets lost in worktrees on complex tasks (review times out at 600s, discover-skill hits exit 124). Nobody uses Gemini for gstack skill execution. Replace the two failing tests (gemini-discover-skill and gemini-review-findings) with a single smoke test that verifies Gemini can start and read the README. 90s timeout, no skill invocation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
379 lines
14 KiB
Cheetah
379 lines
14 KiB
Cheetah
---
|
|
name: document-release
|
|
preamble-tier: 2
|
|
version: 1.0.0
|
|
description: |
|
|
Post-ship documentation update. Reads all project docs, cross-references the
|
|
diff, updates README/ARCHITECTURE/CONTRIBUTING/CLAUDE.md to match what shipped,
|
|
polishes CHANGELOG voice, cleans up TODOS, and optionally bumps VERSION. Use when
|
|
asked to "update the docs", "sync documentation", or "post-ship docs".
|
|
Proactively suggest after a PR is merged or code is shipped. (gstack)
|
|
allowed-tools:
|
|
- Bash
|
|
- Read
|
|
- Write
|
|
- Edit
|
|
- Grep
|
|
- Glob
|
|
- AskUserQuestion
|
|
triggers:
|
|
- update docs after ship
|
|
- document what changed
|
|
- post-ship docs
|
|
---
|
|
|
|
{{PREAMBLE}}
|
|
|
|
{{BASE_BRANCH_DETECT}}
|
|
|
|
# Document Release: Post-Ship Documentation Update
|
|
|
|
You are running the `/document-release` workflow. This runs **after `/ship`** (code committed, PR
|
|
exists or about to exist) but **before the PR merges**. Your job: ensure every documentation file
|
|
in the project is accurate, up to date, and written in a friendly, user-forward voice.
|
|
|
|
You are mostly automated. Make obvious factual updates directly. Stop and ask only for risky or
|
|
subjective decisions.
|
|
|
|
**Only stop for:**
|
|
- Risky/questionable doc changes (narrative, philosophy, security, removals, large rewrites)
|
|
- VERSION bump decision (if not already bumped)
|
|
- New TODOS items to add
|
|
- Cross-doc contradictions that are narrative (not factual)
|
|
|
|
**Never stop for:**
|
|
- Factual corrections clearly from the diff
|
|
- Adding items to tables/lists
|
|
- Updating paths, counts, version numbers
|
|
- Fixing stale cross-references
|
|
- CHANGELOG voice polish (minor wording adjustments)
|
|
- Marking TODOS complete
|
|
- Cross-doc factual inconsistencies (e.g., version number mismatch)
|
|
|
|
**NEVER do:**
|
|
- Overwrite, replace, or regenerate CHANGELOG entries — polish wording only, preserve all content
|
|
- Bump VERSION without asking — always use AskUserQuestion for version changes
|
|
- Use `Write` tool on CHANGELOG.md — always use `Edit` with exact `old_string` matches
|
|
|
|
---
|
|
|
|
## Step 1: Pre-flight & Diff Analysis
|
|
|
|
1. Check the current branch. If on the base branch, **abort**: "You're on the base branch. Run from a feature branch."
|
|
|
|
2. Gather context about what changed:
|
|
|
|
```bash
|
|
git diff <base>...HEAD --stat
|
|
```
|
|
|
|
```bash
|
|
git log <base>..HEAD --oneline
|
|
```
|
|
|
|
```bash
|
|
git diff <base>...HEAD --name-only
|
|
```
|
|
|
|
3. Discover all documentation files in the repo:
|
|
|
|
```bash
|
|
find . -maxdepth 2 -name "*.md" -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./.gstack/*" -not -path "./.context/*" | sort
|
|
```
|
|
|
|
4. Classify the changes into categories relevant to documentation:
|
|
- **New features** — new files, new commands, new skills, new capabilities
|
|
- **Changed behavior** — modified services, updated APIs, config changes
|
|
- **Removed functionality** — deleted files, removed commands
|
|
- **Infrastructure** — build system, test infrastructure, CI
|
|
|
|
5. Output a brief summary: "Analyzing N files changed across M commits. Found K documentation files to review."
|
|
|
|
---
|
|
|
|
## Step 2: Per-File Documentation Audit
|
|
|
|
Read each documentation file and cross-reference it against the diff. Use these generic heuristics
|
|
(adapt to whatever project you're in — these are not gstack-specific):
|
|
|
|
**README.md:**
|
|
- Does it describe all features and capabilities visible in the diff?
|
|
- Are install/setup instructions consistent with the changes?
|
|
- Are examples, demos, and usage descriptions still valid?
|
|
- Are troubleshooting steps still accurate?
|
|
|
|
**ARCHITECTURE.md:**
|
|
- Do ASCII diagrams and component descriptions match the current code?
|
|
- Are design decisions and "why" explanations still accurate?
|
|
- Be conservative — only update things clearly contradicted by the diff. Architecture docs
|
|
describe things unlikely to change frequently.
|
|
|
|
**CONTRIBUTING.md — New contributor smoke test:**
|
|
- Walk through the setup instructions as if you are a brand new contributor.
|
|
- Are the listed commands accurate? Would each step succeed?
|
|
- Do test tier descriptions match the current test infrastructure?
|
|
- Are workflow descriptions (dev setup, operational learnings, etc.) current?
|
|
- Flag anything that would fail or confuse a first-time contributor.
|
|
|
|
**CLAUDE.md / project instructions:**
|
|
- Does the project structure section match the actual file tree?
|
|
- Are listed commands and scripts accurate?
|
|
- Do build/test instructions match what's in package.json (or equivalent)?
|
|
|
|
**Any other .md files:**
|
|
- Read the file, determine its purpose and audience.
|
|
- Cross-reference against the diff to check if it contradicts anything the file says.
|
|
|
|
For each file, classify needed updates as:
|
|
|
|
- **Auto-update** — Factual corrections clearly warranted by the diff: adding an item to a
|
|
table, updating a file path, fixing a count, updating a project structure tree.
|
|
- **Ask user** — Narrative changes, section removal, security model changes, large rewrites
|
|
(more than ~10 lines in one section), ambiguous relevance, adding entirely new sections.
|
|
|
|
---
|
|
|
|
## Step 3: Apply Auto-Updates
|
|
|
|
Make all clear, factual updates directly using the Edit tool.
|
|
|
|
For each file modified, output a one-line summary describing **what specifically changed** — not
|
|
just "Updated README.md" but "README.md: added /new-skill to skills table, updated skill count
|
|
from 9 to 10."
|
|
|
|
**Never auto-update:**
|
|
- README introduction or project positioning
|
|
- ARCHITECTURE philosophy or design rationale
|
|
- Security model descriptions
|
|
- Do not remove entire sections from any document
|
|
|
|
---
|
|
|
|
## Step 4: Ask About Risky/Questionable Changes
|
|
|
|
For each risky or questionable update identified in Step 2, use AskUserQuestion with:
|
|
- Context: project name, branch, which doc file, what we're reviewing
|
|
- The specific documentation decision
|
|
- `RECOMMENDATION: Choose [X] because [one-line reason]`
|
|
- Options including C) Skip — leave as-is
|
|
|
|
Apply approved changes immediately after each answer.
|
|
|
|
---
|
|
|
|
## Step 5: CHANGELOG Voice Polish
|
|
|
|
**CRITICAL — NEVER CLOBBER CHANGELOG ENTRIES.**
|
|
|
|
This step polishes voice. It does NOT rewrite, replace, or regenerate CHANGELOG content.
|
|
|
|
A real incident occurred where an agent replaced existing CHANGELOG entries when it should have
|
|
preserved them. This skill must NEVER do that.
|
|
|
|
**Rules:**
|
|
1. Read the entire CHANGELOG.md first. Understand what is already there.
|
|
2. Only modify wording within existing entries. Never delete, reorder, or replace entries.
|
|
3. Never regenerate a CHANGELOG entry from scratch. The entry was written by `/ship` from the
|
|
actual diff and commit history. It is the source of truth. You are polishing prose, not
|
|
rewriting history.
|
|
4. If an entry looks wrong or incomplete, use AskUserQuestion — do NOT silently fix it.
|
|
5. Use Edit tool with exact `old_string` matches — never use Write to overwrite CHANGELOG.md.
|
|
|
|
**If CHANGELOG was not modified in this branch:** skip this step.
|
|
|
|
**If CHANGELOG was modified in this branch**, review the entry for voice:
|
|
|
|
- **Sell test:** Would a user reading each bullet think "oh nice, I want to try that"? If not,
|
|
rewrite the wording (not the content).
|
|
- Lead with what the user can now **do** — not implementation details.
|
|
- "You can now..." not "Refactored the..."
|
|
- Flag and rewrite any entry that reads like a commit message.
|
|
- Internal/contributor changes belong in a separate "### For contributors" subsection.
|
|
- Auto-fix minor voice adjustments. Use AskUserQuestion if a rewrite would alter meaning.
|
|
|
|
---
|
|
|
|
## Step 6: Cross-Doc Consistency & Discoverability Check
|
|
|
|
After auditing each file individually, do a cross-doc consistency pass:
|
|
|
|
1. Does the README's feature/capability list match what CLAUDE.md (or project instructions) describes?
|
|
2. Does ARCHITECTURE's component list match CONTRIBUTING's project structure description?
|
|
3. Does CHANGELOG's latest version match the VERSION file?
|
|
4. **Discoverability:** Is every documentation file reachable from README.md or CLAUDE.md? If
|
|
ARCHITECTURE.md exists but neither README nor CLAUDE.md links to it, flag it. Every doc
|
|
should be discoverable from one of the two entry-point files.
|
|
5. Flag any contradictions between documents. Auto-fix clear factual inconsistencies (e.g., a
|
|
version mismatch). Use AskUserQuestion for narrative contradictions.
|
|
|
|
---
|
|
|
|
## Step 7: TODOS.md Cleanup
|
|
|
|
This is a second pass that complements `/ship`'s Step 5.5. Read `review/TODOS-format.md` (if
|
|
available) for the canonical TODO item format.
|
|
|
|
If TODOS.md does not exist, skip this step.
|
|
|
|
1. **Completed items not yet marked:** Cross-reference the diff against open TODO items. If a
|
|
TODO is clearly completed by the changes in this branch, move it to the Completed section
|
|
with `**Completed:** vX.Y.Z.W (YYYY-MM-DD)`. Be conservative — only mark items with clear
|
|
evidence in the diff.
|
|
|
|
2. **Items needing description updates:** If a TODO references files or components that were
|
|
significantly changed, its description may be stale. Use AskUserQuestion to confirm whether
|
|
the TODO should be updated, completed, or left as-is.
|
|
|
|
3. **New deferred work:** Check the diff for `TODO`, `FIXME`, `HACK`, and `XXX` comments. For
|
|
each one that represents meaningful deferred work (not a trivial inline note), use
|
|
AskUserQuestion to ask whether it should be captured in TODOS.md.
|
|
|
|
---
|
|
|
|
## Step 8: VERSION Bump Question
|
|
|
|
**CRITICAL — NEVER BUMP VERSION WITHOUT ASKING.**
|
|
|
|
1. **If VERSION does not exist:** Skip silently.
|
|
|
|
2. Check if VERSION was already modified on this branch:
|
|
|
|
```bash
|
|
git diff <base>...HEAD -- VERSION
|
|
```
|
|
|
|
3. **If VERSION was NOT bumped:** Use AskUserQuestion:
|
|
- RECOMMENDATION: Choose C (Skip) because docs-only changes rarely warrant a version bump
|
|
- A) Bump PATCH (X.Y.Z+1) — if doc changes ship alongside code changes
|
|
- B) Bump MINOR (X.Y+1.0) — if this is a significant standalone release
|
|
- C) Skip — no version bump needed
|
|
|
|
4. **If VERSION was already bumped:** Do NOT skip silently. Instead, check whether the bump
|
|
still covers the full scope of changes on this branch:
|
|
|
|
a. Read the CHANGELOG entry for the current VERSION. What features does it describe?
|
|
b. Read the full diff (`git diff <base>...HEAD --stat` and `git diff <base>...HEAD --name-only`).
|
|
Are there significant changes (new features, new skills, new commands, major refactors)
|
|
that are NOT mentioned in the CHANGELOG entry for the current version?
|
|
c. **If the CHANGELOG entry covers everything:** Skip — output "VERSION: Already bumped to
|
|
vX.Y.Z, covers all changes."
|
|
d. **If there are significant uncovered changes:** Use AskUserQuestion explaining what the
|
|
current version covers vs what's new, and ask:
|
|
- RECOMMENDATION: Choose A because the new changes warrant their own version
|
|
- A) Bump to next patch (X.Y.Z+1) — give the new changes their own version
|
|
- B) Keep current version — add new changes to the existing CHANGELOG entry
|
|
- C) Skip — leave version as-is, handle later
|
|
|
|
The key insight: a VERSION bump set for "feature A" should not silently absorb "feature B"
|
|
if feature B is substantial enough to deserve its own version entry.
|
|
|
|
---
|
|
|
|
## Step 9: Commit & Output
|
|
|
|
**Empty check first:** Run `git status` (never use `-uall`). If no documentation files were
|
|
modified by any previous step, output "All documentation is up to date." and exit without
|
|
committing.
|
|
|
|
**Commit:**
|
|
|
|
1. Stage modified documentation files by name (never `git add -A` or `git add .`).
|
|
2. Create a single commit:
|
|
|
|
```bash
|
|
git commit -m "$(cat <<'EOF'
|
|
docs: update project documentation for vX.Y.Z.W
|
|
|
|
{{CO_AUTHOR_TRAILER}}
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
3. Push to the current branch:
|
|
|
|
```bash
|
|
git push
|
|
```
|
|
|
|
**PR/MR body update (idempotent, race-safe):**
|
|
|
|
1. Read the existing PR/MR body into a PID-unique tempfile (use the platform detected in Step 0):
|
|
|
|
**If GitHub:**
|
|
```bash
|
|
gh pr view --json body -q .body > /tmp/gstack-pr-body-$$.md
|
|
```
|
|
|
|
**If GitLab:**
|
|
```bash
|
|
glab mr view -F json 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin).get('description',''))" > /tmp/gstack-pr-body-$$.md
|
|
```
|
|
|
|
2. If the tempfile already contains a `## Documentation` section, replace that section with the
|
|
updated content. If it does not contain one, append a `## Documentation` section at the end.
|
|
|
|
3. The Documentation section should include a **doc diff preview** — for each file modified,
|
|
describe what specifically changed (e.g., "README.md: added /document-release to skills
|
|
table, updated skill count from 9 to 10").
|
|
|
|
4. Write the updated body back:
|
|
|
|
**If GitHub:**
|
|
```bash
|
|
gh pr edit --body-file /tmp/gstack-pr-body-$$.md
|
|
```
|
|
|
|
**If GitLab:**
|
|
Read the contents of `/tmp/gstack-pr-body-$$.md` using the Read tool, then pass it to `glab mr update` using a heredoc to avoid shell metacharacter issues:
|
|
```bash
|
|
glab mr update -d "$(cat <<'MRBODY'
|
|
<paste the file contents here>
|
|
MRBODY
|
|
)"
|
|
```
|
|
|
|
5. Clean up the tempfile:
|
|
|
|
```bash
|
|
rm -f /tmp/gstack-pr-body-$$.md
|
|
```
|
|
|
|
6. If `gh pr view` / `glab mr view` fails (no PR/MR exists): skip with message "No PR/MR found — skipping body update."
|
|
7. If `gh pr edit` / `glab mr update` fails: warn "Could not update PR/MR body — documentation changes are in the
|
|
commit." and continue.
|
|
|
|
**Structured doc health summary (final output):**
|
|
|
|
Output a scannable summary showing every documentation file's status:
|
|
|
|
```
|
|
Documentation health:
|
|
README.md [status] ([details])
|
|
ARCHITECTURE.md [status] ([details])
|
|
CONTRIBUTING.md [status] ([details])
|
|
CHANGELOG.md [status] ([details])
|
|
TODOS.md [status] ([details])
|
|
VERSION [status] ([details])
|
|
```
|
|
|
|
Where status is one of:
|
|
- Updated — with description of what changed
|
|
- Current — no changes needed
|
|
- Voice polished — wording adjusted
|
|
- Not bumped — user chose to skip
|
|
- Already bumped — version was set by /ship
|
|
- Skipped — file does not exist
|
|
|
|
---
|
|
|
|
## Important Rules
|
|
|
|
- **Read before editing.** Always read the full content of a file before modifying it.
|
|
- **Never clobber CHANGELOG.** Polish wording only. Never delete, replace, or regenerate entries.
|
|
- **Never bump VERSION silently.** Always ask. Even if already bumped, check whether it covers the full scope of changes.
|
|
- **Be explicit about what changed.** Every edit gets a one-line summary.
|
|
- **Generic heuristics, not project-specific.** The audit checks work on any repo.
|
|
- **Discoverability matters.** Every doc file should be reachable from README or CLAUDE.md.
|
|
- **Voice: friendly, user-forward, not obscure.** Write like you're explaining to a smart person
|
|
who hasn't seen the code.
|