Skip to content
Development
Skill

/night-market-change-control

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.

From plugin
claude-night-market
343200 skills60 agents162 commands1 MCP

Claude Code

$ npx -y skills add athola/claude-night-market --skill night-market-change-control --agent claude-code

SKILL.md

night-market-change-control.SKILL.md
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.'

Night Market Change Control

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.

The law stack

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).

The ten constitution rules

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 |

Change classification

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) |

The change lifecycle

1. Branch

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).

2. Local gates before committing

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.

3. The pre-commit gauntlet

`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

Read more
@athola
Ships withclaude-night-market

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.

343200 skills60 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
343
Star history of athola/claude-night-market on GitHub, a chart by star-history.com

Other skills on claude-night-market.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about night-market-change-control.

Which coding agents can use night-market-change-control?
night-market-change-control installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.