Lint
ethereum/execution-specs
Run and fix the repository static analysis suite. An agent skill from ethereum/execution-specs.
The Massing release discipline — how to ship a verified, CI-green version-numbered release direct to main.
$ npx skills add ibuilder/massing --skill ship-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ibuilder/massing ship-release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ibuilder/massing.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ship-release .claude/skills/ship-release && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ship-release" agent skill from https://github.com/ibuilder/massing/tree/main/.claude/skills/ship-release into .claude/skills/ship-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ship-release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ibuilder/massing/tree/main/.claude/skills/ship-releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ibuilder/massing --skill ship-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ibuilder/massing ship-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibuilder/massing.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/ship-release .agents/skills/ship-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ship-release" agent skill from https://github.com/ibuilder/massing/tree/main/.claude/skills/ship-release into .agents/skills/ship-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ship-release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ibuilder/massing --skill ship-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ibuilder/massing ship-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibuilder/massing.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/ship-release .cursor/skills/ship-release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ship-release" agent skill from https://github.com/ibuilder/massing/tree/main/.claude/skills/ship-release into .cursor/skills/ship-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ship-release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ibuilder/massing.git --path .claude/skills/ship-release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ibuilder/massing --skill ship-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ibuilder/massing ship-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibuilder/massing.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/ship-release .gemini/skills/ship-release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ship-release" agent skill from https://github.com/ibuilder/massing/tree/main/.claude/skills/ship-release into .gemini/skills/ship-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ship-release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ibuilder/massing ship-releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ibuilder/massing --skill ship-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ibuilder/massing.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/ship-release .github/skills/ship-release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ship-release" agent skill from https://github.com/ibuilder/massing/tree/main/.claude/skills/ship-release into .github/skills/ship-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ship-release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ibuilder/massing --skill ship-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ibuilder/massing ship-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ibuilder/massing.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/ship-release .opencode/skills/ship-release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ship-release" agent skill from https://github.com/ibuilder/massing/tree/main/.claude/skills/ship-release into .opencode/skills/ship-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ship-release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ship-releaseThe Massing release discipline — how to ship a verified, CI-green version-numbered release direct to main.
Ship Release is an agent skill from ibuilder/massing. The Massing release discipline — how to ship a verified, CI-green version-numbered release direct to main. Invoke whenever finishing a shippable change (feature, fix, doc). Covers version bump (both files), CHANGELOG/roadmap notes, the ruff/lint CI gotchas, tag, push, and CI/CodeQL verification.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Linting and formatting, Changelog and release notes and Static analysis and SAST. It works with Ruff and npm. The repository describes itself as: Open, self-hosted, IFC-native AEC platform: web BIM viewer + modeling, a ~100-module GC portal (RFIs, pay apps, CPM, construction accounting — double-entry GL/WIP → QuickBooks… The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 523e5b3. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitnpmghruffpythonnodenpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, npm, gh and npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ship Release loads about 2.3k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 1,162 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ibuilder/massing at commit 523e5b3, republished under its MIT licence (© ibuilder). 1,162 words, ~2,251 tokens.
.claude/skills/ship-release/SKILL.md (or your agent's skills folder).Standing directions for this repo: docs/roadmap-directions.md. Read those first.
main is unprotected and ships version-numbered releases via direct commits (no PR gate). Each shippable change is its own release. Follow this exactly.
test_*.py (see the backend-tests skill) and ruff exactly as CI does:cd services/api && python -m ruff check src/ ../data/src/ruff check <file> from elsewhere does NOT pick up services/api/ruff.toml (isort/I001) and gives false "passed". Prefer ruff check --fix to auto-sort imports; put third-party imports in their own group after stdlib.export PATH="/c/Program Files/nodejs:$PATH" then npm run typecheck && npm run lint && npm run build (Node 24; Node 18 breaks the build). Run npx vitest run <path> if unit tests cover the change.verify-frontend skill (force buildToolsPanel by dispatching aec:persona), and flag any flow you couldn't exercise end-to-end.git fetch origin --quiet # avoid the version race (a background release may have taken the next number)
sed -i 's/"version": "0.3.X"/"version": "0.3.Y"/' apps/web/package.json apps/web/src-tauri/tauri.conf.json
cd apps/web && npm install --package-lock-only --ignore-scripts && cd - # re-syncs package-lock.jsonpackage-lock.json carries the version too — twice, at the root and under
packages["apps/web"] — and versionConsistency.test.ts asserts all of them agree. This step said
"BOTH files" until 2026-07-29, when a release ran the two seds and went red on a lock nobody had
mentioned. Regenerating the lock is the fix rather than a third sed: hand-editing it would sync the
number while leaving whatever else the bump touched stale.
Nothing else notices this drift, which is why it needs a gate rather than care — npm ci compares
dependency edges, not version fields; the build never reads the lock's version; and a regenerated
lock silently re-syncs, so the mismatch exists only in the window where it can ship.
Confirm origin/main is where you branched (git log origin/main --oneline -1). If it advanced, rebase and bump to the next free number.
## vX.Y.Z — <title> entry to CHANGELOG.md (newest at top).✅ … SHIPPED vX.Y.Z note to the relevant docs/roadmap.md item.Commit with the trailer Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>.
First check that main is green. Step 1 verifies your commit; it says nothing about the state of
main you are appending to. On 2026-07-31 main went red at 06:12 from an unindexed docs/internal/
file, and over the next hour three further commits landed on top — including a cut and tagged
release — because each session had verified its own work and none asked about the build. The gate
fired correctly within three minutes. Nobody looked. There is a standing directive to query the CodeQL
alerts API after every push and it was followed every time; there was no equivalent for CI, so the
security scan got checked and the build did not.
gh run list --branch main --limit 3 --json headSha,status,conclusion --jq '.[]|"[\(if .status != "completed" then "RUNNING" else .conclusion end)] \(.headSha[0:8])"'Branch on status, never on whether conclusion looks empty. A running job has conclusion as
the empty string — truthy in jq — so the obvious .conclusion // "pending" never fires and the
field prints blank. A blank reads as "nothing to worry about", so a pending gate becomes an invisible
one. status is the field that actually states whether the run finished; read that.
Two sessions wrote the // form independently the day this section was added, one of them into memory
as the fix, and it had already printed blank rows that were read as "still running" from context
rather than noticed as a filter failure.
Related trap, same shape: gh --jq does not accept --arg — it exits with unknown flag: --arg
on stderr and prints nothing on stdout. Under a habit of skimming stdout that reads as a clean result.
Probe any filter before you loop on it, and prefer piping the JSON to a real interpreter that can be
made to print "not a verdict" rather than falling through to a reassuring default.
A red or pending main is not automatically a blocker — read it and decide. But do not tag onto one: a tag is the thing that gets published, downloaded and rolled back, and it is the one step here that is awkward to undo. If main is red, fix or wait; if it is pending, either wait for it or push without tagging and tag once it lands.
And tag the commit you actually verified. The green-main check above answers "is the trunk healthy"; this one answers "is the thing I am about to publish the thing I tested". They are different questions and a release can fail the second while passing the first.
Concretely, v0.3.813: the release commit was prepared at 06:55 and three commits landed behind it over
the next four minutes — two of them money fixes (a fractional renovation pace that renovated
nothing; a half-month downtime rounded to zero). Tagging the release commit would have shipped a
version missing them. Tagging main would have shipped a CHANGELOG that did not mention them; the
entry was grepped for "fractional", "rounding" and "0.5" and returned zero hits. Neither option was
correct without editing first — the entry was amended, then main was tagged.
So immediately before git tag:
git fetch origin --quiet
git rev-parse HEAD origin/main # must match — if not, you are tagging a stale commit
git log --oneline <release-commit>..origin/main # must be EMPTY, or the CHANGELOG is already wrongIf commits have landed, do not tag either end. Amend the entry to cover them, commit that, and tag the result. A tag is the one artefact here that gets published and downloaded, so it is the one place where "close enough to what I verified" is not close enough.
Then, guarding against a race:
if [ "$(git rev-parse origin/main)" = "$(git rev-parse HEAD~1)" ]; then
git push origin HEAD:main && git tag vX.Y.Z && git push origin vX.Y.Z
else echo "RACE — rebase + rebump"; fiNever merge or rebase inside the commit command, and re-check the triple after any that you do.
The RACE branch above rebases onto whatever landed first — which is how v0.3.791 shipped red. Two
sessions released concurrently; the merge took the manifest from one and the lock from the other,
and git merged it cleanly because they are different files. No single edit was wrong, and the session
had run a green suite — on the tree before the merge. versionConsistency.test.ts caught it in CI,
one release later.
So after any rebase/merge, and always immediately before pushing:
node -e 'const a=require("./apps/web/package.json").version,
b=require("./package-lock.json").packages["apps/web"].version,
c=require("./apps/web/src-tauri/tauri.conf.json").version;
console.log(a,b,c); if(new Set([a,b,c]).size>1){console.error("VERSION TRIPLE DISAGREES");process.exit(1)}'The lock is the root workspace lock (./package-lock.json, keyed packages["apps/web"]) — there
is no apps/web/package-lock.json, and a check that reads that path returns empty and "passes".
The general rule this is one instance of: verify what you are shipping, not what you happen to have. A suite run before a merge, or a typecheck against a working tree that still holds unstaged fixes, measures a tree that is not the commit. To verify a commit, verify the commit.
success does NOT mean the API test gate ruff step passed, or that CodeQL is clean. Check both.security-monitoring skill's CodeQL check (open alerts, not run status).See memory: main-fast-release-cadence, ruff-ci-config-gotcha, backend-test-runner, codeql-monitoring, web-build-needs-node-20.
© ibuilder, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/ship-release of ibuilder/massing.
Open the folder on GitHubat commit 523e5b3
Ship Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ship Release this skillibuilder/massing | 121 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Lintethereum/execution-specs | 1.2k | — | ~286 | Automated safety check: Pass | CC0-1.0 | |
| Releasehyhmrright/brooks-lint | 1.5k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Leanspec Developmentcodervisor/leanspec | 296 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Django Verification Loopaffaan-m/ECC | 274k | 7 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Plankton Code Qualityaffaan-m/ECC | 274k | 2 repos | ~1.3k | Automated safety check: Pass | MIT |
ethereum/execution-specs
Run and fix the repository static analysis suite. An agent skill from ethereum/execution-specs.
hyhmrright/brooks-lint
Cut a brooks-lint release: set the version in package.json, propagate it across all four plugin manifests and every version-bearing text file (README badges, docs site metadata), write the CHANGELOG…
codervisor/leanspec
Development workflows, commands, publishing, CI/CD, changelog management, and contribution guidelines for LeanSpec.
affaan-m/ECC
Runs a phased pre-PR and pre-deploy check on a Django project: environment, linting, migrations, tests with coverage, security scans and settings review.
affaan-m/ECC
使用Plankton进行编写时代码质量强制执行——通过钩子在每次文件编辑时自动格式化、代码检查和Claude驱动的修复。
xu-xiang/everything-claude-code-zh
使用 Plankton 实现编写时代码质量强制执行 —— 通过钩子在每次文件编辑时进行自动格式化、代码检查,并由 Claude 驱动自动修复。
ibuilder/massing
How to run and add Python tests in the Massing API/data services.
ibuilder/massing
Drive a Massing BIM/AEC project from an AI agent over MCP — read a project's status, records, CDE, KPI and model-quality checks; run standards-compliance, schedule-risk, embodied-carbon, permit-…
ibuilder/massing
How to verify Massing web/viewer UI changes LIVE — full verification works; two historic "stalls" are fixed and neither was the geometry loader.
ibuilder/massing
Reason like a master builder — one mind holding an entire built-asset project from raw land through design, construction, handover, operations, and disposition, anywhere in the world.
ibuilder/massing
How to monitor and fix security issues in Massing — CodeQL alerts, dependency audits, secret scanning, and ReDoS/XXE fixes.
Categories
The Massing release discipline — how to ship a verified, CI-green version-numbered release direct to main. Ship Release is an agent skill from ibuilder/massing. The Massing release discipline — how to ship a verified, CI-green version-numbered release direct to main.
Ship Release fits situations like: tasks that involve Linting and formatting; tasks that involve Changelog and release notes; tasks that involve Static analysis and SAST.
Run `npx skills add ibuilder/massing --skill ship-release -a claude-code`. Or copy the skill folder (.claude/skills/ship-release in ibuilder/massing) into .claude/skills/ship-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ibuilder/massing --skill ship-release -a codex`. Or copy the skill folder (.claude/skills/ship-release in ibuilder/massing) into .agents/skills/ship-release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ibuilder/massing --skill ship-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ship-release, .gemini/skills/ship-release, .github/skills/ship-release and .opencode/skills/ship-release in your project.
Going by SKILL.md and its folder, Ship Release needs the command-line tools its instructions call (git, npm, gh, ruff, python and node). Our summary lists: Python 3; Node.js.
SKILL.md contains no URLs. Its commands use git, npm, gh and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ship Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ship Release: Lint (ethereum/execution-specs, 1.2k stars), Release (hyhmrright/brooks-lint, 1.5k stars), Leanspec Development (codervisor/leanspec, 296 stars) and Django Verification Loop (affaan-m/ECC, 274k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ibuilder (a GitHub user) maintains it in ibuilder/massing, which has 121 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 2, 2026.
Source: ibuilder/massing on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.