claude-code-plugin-ref…
Explain plugin, skill, command, agent, and hook mechanics used here. Use when authoring or debugging plugins. Do not use for ops; use night-market-operations.
Classify, gate, and review changes. Use when landing a PR, releasing, or amending rules. Do not use for failure triage; use night-market-debugging-playbook.
$ npx -y skills add athola/claude-night-market --skill night-market-change-control --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/night-market-change-controlContext preview
The summary Claude sees to decide when to auto-load this skill.
Classify, gate, and review changes. Use when landing a PR, releasing, or amending rules. Do not use for failure triage; use night-market-debugging-playbook.
name: night-market-change-control description: 'Classify, gate, and review changes. Use when landing a PR, releasing, or amending rules. Do not use for failure triage; use night-market-debugging-playbook.'
Every change to this repo passes through a fixed law stack, a classification step, and a gauntlet of automated gates. This skill tells you which class your change is, which gates it must pass, and which rules are non-negotiable because a past incident made them so. Nothing here may be routed around: if a gate fails, fix the cause, never the gate.
Jargon used below: a "gate" is any automated check that can block a commit, PR, or release. An "ADR" is an Architecture Decision Record in `docs/adr/`. The "Iron Law" is constitution rule 3: no implementation without a failing test first.
When two documents conflict, the higher one wins.
| Rank | Source | Contents | |------|--------|----------| | 1 | `CONSTITUTION.md` | 10 immutable rules, override and amendment process | | 2 | `.claude/rules/` | 8 project rules (markdown style, read budgets, slop gates, invariants) | | 3 | `docs/adr/` | 17 numbered decision records (0001 to 0017) | | 4 | Guides in `docs/` | quality-gates, testing-guide, plugin-development-guide |
A skill, hook, or agent instruction that says "skip rule N" without an explicit user grant or a merged amendment is itself a defect (CONSTITUTION.md, Override mechanism section).
One line each. Where a rule was written in blood, the incident column names the blood.
| # | Rule | Motivating incident | |---|------|---------------------| | 1 | Disclose AI involvement in every PR; never strip real or add fake AI attribution | Enforced by hook `plugins/imbue/hooks/vow_no_ai_attribution.py` | | 2 | AI commits over 200 changed lines need a spec, ADR, or plan doc first (lockfiles, fixtures, snapshots excluded) | Size = scrutiny principle; see the unbloat incident under non-negotiables | | 3 | Iron Law TDD: failing test before implementation for plugin Python. Skills and prose need structural tests (`test_skill_<name>.py`) | Design principle, no single incident | | 4 | One identity leak ("As a large language model") in any committed artifact is an automatic revert | Pattern catalog in scribe slop-detector | | 5 | Quality claims ("fast", "production-ready") need in-repo evidence or deletion | Design principle | | 6 | No bypassing gates: no `--no-verify`, no `SKIP=hook`, no unauthorized force push, no bare suppression comments without a stated reason | Neutered-mypy incident (CHANGELOG 1.9.12); bulk-ignore revert `06b9b1db` | | 7 | New dependencies need justification; 18 months unmaintained is presumed abandoned; verify AI-suggested package names against the registry | Slopsquatting defense; hook `guard_package_hallucination.py` (imbue) | | 8 | Docs cost reader-time (audience x frequency x per-read time); writing effort must match | Design principle | | 9 | Prefer deletion over rewriting; AI slop is overwhelmingly additive | Design principle | | 10 | Errors are not optional: propagate by default, no bare except, safe-to-discard needs an inline "why" comment | Silent-failure sweep `666171c3`; ecosystem bare-except campaign |
Classify before the first commit. The class decides the paperwork.
| Change | Required process | |--------|------------------| | AI-generated diff, 200 changed lines or fewer | Plain PR through the standard gates | | AI-generated diff over 200 changed lines | Spec, ADR, or planning doc BEFORE the code (rule 2) | | Load-bearing design decision | Numbered ADR in `docs/adr/` (next number after 0017) | | New project-wide rule | New file in `.claude/rules/` via plain PR; existing rules cite an origin issue or discussion (#454, #457) | | Constitution amendment | PR titled `constitution: amend rule N`, a summary of what changes and why, sign-off from the repo owner | | Release | Version bump, changelog section, v-prefixed tag (lifecycle below) |
Branch from `master` (the main branch) using `<topic>-<version>`:
git checkout master && git pull git checkout -b my-topic-1.9.16
Live examples in `git branch -a`: `ai-slop-1.9.4`, `bugfixes-1.9.5`, `discussions-fix-1.9.14`. Never delete `backup/unbloat-*` branches. They are the recovery points for past deletion campaigns (`backup/unbloat-20260328` is how the 2026-03-28 over-deletion was undone).
make lint # ruff format + ruff check --fix + bandit make typecheck # per-plugin strict mypy (all plugins) make test # per-plugin pytest via scripts/run-plugin-tests.sh make validate-all # plugin structure validation
Plugin tests MUST run per plugin (`make <plugin>-test` or `make -C plugins/<plugin> test`). Root pytest excludes `plugins/*` to avoid import-path collisions.
`git commit` runs `.pre-commit-config.yaml` hooks in this order (verified 2026-07-02):
1. Suppression guards: `check-noqa` (blocks bare inline lint suppressions), `check-docstring-quality`, `check-json-utils-drift`, `check-per-file-ignores`. 2. Hook registration: `check-hook-registrations`, `check-plugin-hooks`. 3. Code gates: `run-plugin-typecheck --all` (strict mypy on every plugin, not just changed ones), `run-plugin-tests --changed`. 4. Skill and plugin validation: `validate-skill-descriptions`, one `validate-<plugin>-plugin` hook per plugin, `check-context-optimization`, `validate-description-budget`, `check-markdown-links`, `capabilities-sync-check`, `check-skill-graph-drift`, `check-skill-exit-criteria-drift`. 5. Standard file hygiene (trailing whitespace, YAML/TOML/JSON syntax, merge conflicts, debug statements). 6. `bandit` security scan. 7. `ruff-format`, `ruff-fix`, `ruff-check`. 8. Pin freshness: `check-ruff-version`, `check-pinned-versions`.
The typecheck gate
A plugin marketplace for Claude Code. Install only the plugins you need to run git workflows, code review, spec-driven development, and autonomous agents from inside your Claude Code session.
Explain plugin, skill, command, agent, and hook mechanics used here. Use when authoring or debugging plugins. Do not use for ops; use night-market-operations.
States load-bearing decisions, invariants, and weak points. Use when judging a design change. Do not use for gating; use night-market-change-control.
Rebuild the dev environment: uv, Python tiers, pins, traps. Use when onboarding or toolchain breaks. Do not use for daily commands; use night-market-operations.
Search and record project memory (Discussions, journal, ADRs). Use before re-investigating anything. Do not use for settled battles; see failure-archaeology.
Bind loop 'done' to unfakeable gates. Use to harden egregore/herald loops or promote completion_integrity. Not for QA gates; use night-market-validation-and-qa.
Catalog every config axis, its defaults and guards. Use when adding or auditing configuration. Do not use for running gates; use night-market-operations.