feat(ship-it): scrub attribution footers sneaked in post-commit/PR #10
No files matched your search
@@ -167,7 +167,7 @@ or want an auditable record of what changed and why.
|
||||
**Purpose:** Run a comprehensive pre-flight audit and publish changes to a new
|
||||
PR in a single command.
|
||||
|
||||
Two sequential phases — Phase 2 is blocked until Phase 1 succeeds:
|
||||
Three sequential phases — each is blocked until the previous one succeeds:
|
||||
|
||||
1. **Documentation Sync & Code Audit** — acts as `/docs-sync-audit`: scans all
|
||||
file changes since the last documentation edit, updates the docs/README to
|
||||
@@ -177,6 +177,11 @@ Two sequential phases — Phase 2 is blocked until Phase 1 succeeds:
|
||||
descriptively named branch, commits all pending changes (including the
|
||||
README updates from Phase 1), pushes to the remote, and opens a Pull Request
|
||||
against `main`.
|
||||
3. **Post-Publish Attribution Scrub** — only runs if a global/user/project
|
||||
rule forbids AI attribution footers. Checks the commit(s) and PR
|
||||
description as actually persisted (not just what was composed) for
|
||||
attribution text sneaked in by hooks outside the visible conversation, and
|
||||
strips it via `git commit --amend` + force-push and `gh pr edit`.
|
||||
|
||||
**Use when:** you say "Ship this," "Publish my changes," or invoke `/ship-it`.
|
||||
|
||||
@@ -187,12 +192,19 @@ Two sequential phases — Phase 2 is blocked until Phase 1 succeeds:
|
||||
**Purpose:** Register a Gitea push mirror so a repository's commits are
|
||||
automatically forwarded to a corresponding GitHub repository.
|
||||
|
||||
Uses `tea api` against Gitea's `push_mirrors` endpoint, with credentials passed
|
||||
as `remote_username`/`remote_password` fields — never embedded in the mirror
|
||||
Before registering the mirror, checks whether the GitHub target repository
|
||||
exists and creates it if missing (via `gh`, a GitHub MCP server, or the REST
|
||||
API directly — whichever is available), since GitHub won't auto-create it on
|
||||
first push the way Gitea does; if none of those are available it warns the
|
||||
user to create it manually instead of blocking. Uses `tea api` against
|
||||
Gitea's `push_mirrors` endpoint, with credentials passed as
|
||||
`remote_username`/`remote_password` fields — never embedded in the mirror
|
||||
URL. Defaults to an `8h` sync interval with sync-on-commit enabled; both are
|
||||
overridable per request, as is the destination repository name.
|
||||
`GITHUB_USER`/`GITHUB_TOKEN` can come from the environment or, as a fallback, a
|
||||
repo-root `.env` file.
|
||||
repo-root `.env` file. All shell snippets are POSIX-compatible so the skill
|
||||
works under bash, zsh, or any shell the agent's tool happens to invoke — not
|
||||
just Fish.
|
||||
|
||||
**Use when:** you say "Mirror this repository to GitHub," or invoke
|
||||
`/mirror-it`. Only relevant for repositories hosted on Gitea — GitHub can't
|
||||
|
||||
+22
-2
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: ship-it
|
||||
description: Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.
|
||||
version: 1.0.0
|
||||
version: 1.1.0
|
||||
user-invocable: true
|
||||
author: Rootiest
|
||||
---
|
||||
@@ -9,7 +9,7 @@ author: Rootiest
|
||||
# /ship-it
|
||||
|
||||
Instructions:
|
||||
Execute the following two phases sequentially. Do not proceed to Phase 2 unless Phase 1 completes successfully.
|
||||
Execute the following phases sequentially. Do not proceed to the next phase unless the current one completes successfully.
|
||||
|
||||
1. Phase 1: Documentation Sync & Code Audit
|
||||
- Act as the `/docs-sync-audit` skill.
|
||||
@@ -23,3 +23,23 @@ Execute the following two phases sequentially. Do not proceed to Phase 2 unless
|
||||
- Stage and commit all pending changes (including the newly updated README from Phase 1).
|
||||
- Push the branch to the remote repository.
|
||||
- Generate a Pull Request (PR) from the new branch into 'main'.
|
||||
|
||||
3. Phase 3: Post-Publish Attribution Scrub
|
||||
- Only run this phase if a global, user, or project rule (e.g. `CLAUDE.md`, memory) explicitly
|
||||
forbids AI attribution footers/text (e.g. "no Co-Authored-By", "no Claude attribution") on
|
||||
commits or PRs. Skip this phase entirely if no such rule exists.
|
||||
- Run this check AFTER the commit and PR from Phase 2 already exist, not before — attribution
|
||||
lines can be injected by a hook outside the visible conversation, so text you composed
|
||||
yourself is not proof of what actually landed. Verify the real, persisted state:
|
||||
- Inspect the actual commit message(s) just created (`git log -1 --format=%B` for each
|
||||
commit pushed) for attribution lines (e.g. `Co-Authored-By: Claude...`, "Generated with
|
||||
Claude Code", or similar).
|
||||
- Inspect the actual PR description as stored on the remote (e.g. `gh pr view --json body`),
|
||||
not the text you intended to send.
|
||||
- If any attribution text is found in violation of the rule, remove it:
|
||||
- Commit message: amend it (`git commit --amend`) to strip the offending lines, then
|
||||
force-push the branch (`git push --force-with-lease`) since it was just created for this
|
||||
PR and nothing else depends on it yet.
|
||||
- PR description: edit it directly (`gh pr edit --body ...`) with the offending lines
|
||||
removed.
|
||||
- Report to the user whether attribution was found and stripped, or that none was found.
|
||||
+22
-2
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: ship-it
|
||||
description: Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.
|
||||
version: 1.0.0
|
||||
version: 1.1.0
|
||||
user-invocable: true
|
||||
author: Rootiest
|
||||
---
|
||||
@@ -9,7 +9,7 @@ author: Rootiest
|
||||
# /ship-it
|
||||
|
||||
Instructions:
|
||||
Execute the following two phases sequentially. Do not proceed to Phase 2 unless Phase 1 completes successfully.
|
||||
Execute the following phases sequentially. Do not proceed to the next phase unless the current one completes successfully.
|
||||
|
||||
1. Phase 1: Documentation Sync & Code Audit
|
||||
- Act as the `/docs-sync-audit` skill.
|
||||
@@ -23,3 +23,23 @@ Execute the following two phases sequentially. Do not proceed to Phase 2 unless
|
||||
- Stage and commit all pending changes (including the newly updated README from Phase 1).
|
||||
- Push the branch to the remote repository.
|
||||
- Generate a Pull Request (PR) from the new branch into 'main'.
|
||||
|
||||
3. Phase 3: Post-Publish Attribution Scrub
|
||||
- Only run this phase if a global, user, or project rule (e.g. `CLAUDE.md`, memory) explicitly
|
||||
forbids AI attribution footers/text (e.g. "no Co-Authored-By", "no Claude attribution") on
|
||||
commits or PRs. Skip this phase entirely if no such rule exists.
|
||||
- Run this check AFTER the commit and PR from Phase 2 already exist, not before — attribution
|
||||
lines can be injected by a hook outside the visible conversation, so text you composed
|
||||
yourself is not proof of what actually landed. Verify the real, persisted state:
|
||||
- Inspect the actual commit message(s) just created (`git log -1 --format=%B` for each
|
||||
commit pushed) for attribution lines (e.g. `Co-Authored-By: Claude...`, "Generated with
|
||||
Claude Code", or similar).
|
||||
- Inspect the actual PR description as stored on the remote (e.g. `gh pr view --json body`),
|
||||
not the text you intended to send.
|
||||
- If any attribution text is found in violation of the rule, remove it:
|
||||
- Commit message: amend it (`git commit --amend`) to strip the offending lines, then
|
||||
force-push the branch (`git push --force-with-lease`) since it was just created for this
|
||||
PR and nothing else depends on it yet.
|
||||
- PR description: edit it directly (`gh pr edit --body ...`) with the offending lines
|
||||
removed.
|
||||
- Report to the user whether attribution was found and stripped, or that none was found.
|
||||
+22
-2
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: ship-it
|
||||
description: Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.
|
||||
version: 1.0.0
|
||||
version: 1.1.0
|
||||
user-invocable: true
|
||||
author: Rootiest
|
||||
---
|
||||
@@ -9,7 +9,7 @@ author: Rootiest
|
||||
# /ship-it
|
||||
|
||||
Instructions:
|
||||
Execute the following two phases sequentially. Do not proceed to Phase 2 unless Phase 1 completes successfully.
|
||||
Execute the following phases sequentially. Do not proceed to the next phase unless the current one completes successfully.
|
||||
|
||||
1. Phase 1: Documentation Sync & Code Audit
|
||||
- Act as the `/docs-sync-audit` skill.
|
||||
@@ -23,3 +23,23 @@ Execute the following two phases sequentially. Do not proceed to Phase 2 unless
|
||||
- Stage and commit all pending changes (including the newly updated README from Phase 1).
|
||||
- Push the branch to the remote repository.
|
||||
- Generate a Pull Request (PR) from the new branch into 'main'.
|
||||
|
||||
3. Phase 3: Post-Publish Attribution Scrub
|
||||
- Only run this phase if a global, user, or project rule (e.g. `CLAUDE.md`, memory) explicitly
|
||||
forbids AI attribution footers/text (e.g. "no Co-Authored-By", "no Claude attribution") on
|
||||
commits or PRs. Skip this phase entirely if no such rule exists.
|
||||
- Run this check AFTER the commit and PR from Phase 2 already exist, not before — attribution
|
||||
lines can be injected by a hook outside the visible conversation, so text you composed
|
||||
yourself is not proof of what actually landed. Verify the real, persisted state:
|
||||
- Inspect the actual commit message(s) just created (`git log -1 --format=%B` for each
|
||||
commit pushed) for attribution lines (e.g. `Co-Authored-By: Claude...`, "Generated with
|
||||
Claude Code", or similar).
|
||||
- Inspect the actual PR description as stored on the remote (e.g. `gh pr view --json body`),
|
||||
not the text you intended to send.
|
||||
- If any attribution text is found in violation of the rule, remove it:
|
||||
- Commit message: amend it (`git commit --amend`) to strip the offending lines, then
|
||||
force-push the branch (`git push --force-with-lease`) since it was just created for this
|
||||
PR and nothing else depends on it yet.
|
||||
- PR description: edit it directly (`gh pr edit --body ...`) with the offending lines
|
||||
removed.
|
||||
- Report to the user whether attribution was found and stripped, or that none was found.
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "ship-it",
|
||||
"description": "Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.0",
|
||||
"author": {
|
||||
"name": "Rootiest"
|
||||
}
|
||||
|
||||
+22
-2
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: ship-it
|
||||
description: Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.
|
||||
version: 1.0.0
|
||||
version: 1.1.0
|
||||
user-invocable: true
|
||||
author: Rootiest
|
||||
---
|
||||
@@ -9,7 +9,7 @@ author: Rootiest
|
||||
# /ship-it
|
||||
|
||||
Instructions:
|
||||
Execute the following two phases sequentially. Do not proceed to Phase 2 unless Phase 1 completes successfully.
|
||||
Execute the following phases sequentially. Do not proceed to the next phase unless the current one completes successfully.
|
||||
|
||||
1. Phase 1: Documentation Sync & Code Audit
|
||||
- Act as the `/docs-sync-audit` skill.
|
||||
@@ -23,3 +23,23 @@ Execute the following two phases sequentially. Do not proceed to Phase 2 unless
|
||||
- Stage and commit all pending changes (including the newly updated README from Phase 1).
|
||||
- Push the branch to the remote repository.
|
||||
- Generate a Pull Request (PR) from the new branch into 'main'.
|
||||
|
||||
3. Phase 3: Post-Publish Attribution Scrub
|
||||
- Only run this phase if a global, user, or project rule (e.g. `CLAUDE.md`, memory) explicitly
|
||||
forbids AI attribution footers/text (e.g. "no Co-Authored-By", "no Claude attribution") on
|
||||
commits or PRs. Skip this phase entirely if no such rule exists.
|
||||
- Run this check AFTER the commit and PR from Phase 2 already exist, not before — attribution
|
||||
lines can be injected by a hook outside the visible conversation, so text you composed
|
||||
yourself is not proof of what actually landed. Verify the real, persisted state:
|
||||
- Inspect the actual commit message(s) just created (`git log -1 --format=%B` for each
|
||||
commit pushed) for attribution lines (e.g. `Co-Authored-By: Claude...`, "Generated with
|
||||
Claude Code", or similar).
|
||||
- Inspect the actual PR description as stored on the remote (e.g. `gh pr view --json body`),
|
||||
not the text you intended to send.
|
||||
- If any attribution text is found in violation of the rule, remove it:
|
||||
- Commit message: amend it (`git commit --amend`) to strip the offending lines, then
|
||||
force-push the branch (`git push --force-with-lease`) since it was just created for this
|
||||
PR and nothing else depends on it yet.
|
||||
- PR description: edit it directly (`gh pr edit --body ...`) with the offending lines
|
||||
removed.
|
||||
- Report to the user whether attribution was found and stripped, or that none was found.
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ship-it",
|
||||
"description": "Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.0",
|
||||
"author": { "name": "Rootiest" }
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: ship-it
|
||||
description: Runs a comprehensive pre-flight audit, syncs the README, and publishes the changes to a new PR.
|
||||
version: 1.0.0
|
||||
version: 1.1.0
|
||||
user-invocable: true
|
||||
author: Rootiest
|
||||
---
|
||||
@@ -9,7 +9,7 @@ author: Rootiest
|
||||
# /ship-it
|
||||
|
||||
Instructions:
|
||||
Execute the following two phases sequentially. Do not proceed to Phase 2 unless Phase 1 completes successfully.
|
||||
Execute the following phases sequentially. Do not proceed to the next phase unless the current one completes successfully.
|
||||
|
||||
1. Phase 1: Documentation Sync & Code Audit
|
||||
- Act as the `/docs-sync-audit` skill.
|
||||
@@ -23,3 +23,23 @@ Execute the following two phases sequentially. Do not proceed to Phase 2 unless
|
||||
- Stage and commit all pending changes (including the newly updated README from Phase 1).
|
||||
- Push the branch to the remote repository.
|
||||
- Generate a Pull Request (PR) from the new branch into 'main'.
|
||||
|
||||
3. Phase 3: Post-Publish Attribution Scrub
|
||||
- Only run this phase if a global, user, or project rule (e.g. `CLAUDE.md`, memory) explicitly
|
||||
forbids AI attribution footers/text (e.g. "no Co-Authored-By", "no Claude attribution") on
|
||||
commits or PRs. Skip this phase entirely if no such rule exists.
|
||||
- Run this check AFTER the commit and PR from Phase 2 already exist, not before — attribution
|
||||
lines can be injected by a hook outside the visible conversation, so text you composed
|
||||
yourself is not proof of what actually landed. Verify the real, persisted state:
|
||||
- Inspect the actual commit message(s) just created (`git log -1 --format=%B` for each
|
||||
commit pushed) for attribution lines (e.g. `Co-Authored-By: Claude...`, "Generated with
|
||||
Claude Code", or similar).
|
||||
- Inspect the actual PR description as stored on the remote (e.g. `gh pr view --json body`),
|
||||
not the text you intended to send.
|
||||
- If any attribution text is found in violation of the rule, remove it:
|
||||
- Commit message: amend it (`git commit --amend`) to strip the offending lines, then
|
||||
force-push the branch (`git push --force-with-lease`) since it was just created for this
|
||||
PR and nothing else depends on it yet.
|
||||
- PR description: edit it directly (`gh pr edit --body ...`) with the offending lines
|
||||
removed.
|
||||
- Report to the user whether attribution was found and stripped, or that none was found.
|
||||
Reference in new issue
Block a user