@rmyndharis/aimhooman 0.1.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,13 +12,16 @@ Its policy:
12
12
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
13
13
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
14
14
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
15
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
16
- If one is staged, unstage it and keep it out of Git instead.
15
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
16
+ for these artifacts. If one is staged, unstage it and keep it out of Git
17
+ instead.
17
18
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
18
19
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
19
20
  `.claude/.credentials.json`, service-account keys, or a provider API key
20
21
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
21
- SendGrid). Public certificates are allowed.
22
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
23
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
24
+ the right backstop for it.
22
25
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
23
26
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
24
27
  noreply emails. A commit message reads as if a human wrote it.
@@ -49,7 +52,7 @@ npm test
49
52
  npm run test:coverage
50
53
  ```
51
54
 
52
- aimhooman also enforces this at commit time, so a blocked commit means a real
53
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
54
- ship.
55
+ aimhooman also enforces the artifact and attribution rules at commit time, so
56
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
57
+ is simple: AI works, hoomans ship.
55
58
  <!-- aimhooman:ruleset-end -->
@@ -3,13 +3,13 @@
3
3
  "owner": {
4
4
  "name": "aimhooman"
5
5
  },
6
- "description": "AI works. Hoomans ship. Keep AI session files, secrets, and attribution out of your commits.",
6
+ "description": "AI works. Hoomans ship. Keep AI session files and attribution out of your commits.",
7
7
  "plugins": [
8
8
  {
9
9
  "name": "aimhooman",
10
10
  "source": "./",
11
- "description": "Keeps AI session files, secrets, and unwanted attribution out at the agent and Git boundary.",
12
- "version": "0.1.8",
11
+ "description": "Keeps AI session files and unwanted attribution out at the agent and Git boundary.",
12
+ "version": "0.3.0",
13
13
  "license": "MIT",
14
14
  "keywords": [
15
15
  "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aimhooman",
3
- "version": "0.1.8",
4
- "description": "AI works. Hoomans ship. Keeps AI session files, secrets, and unwanted attribution out at the agent and Git boundary.",
3
+ "version": "0.3.0",
4
+ "description": "AI works. Hoomans ship. Keeps AI session files and unwanted attribution out at the agent and Git boundary.",
5
5
  "author": {
6
6
  "name": "aimhooman"
7
7
  },
@@ -12,13 +12,16 @@ Its policy:
12
12
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
13
13
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
14
14
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
15
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
16
- If one is staged, unstage it and keep it out of Git instead.
15
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
16
+ for these artifacts. If one is staged, unstage it and keep it out of Git
17
+ instead.
17
18
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
18
19
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
19
20
  `.claude/.credentials.json`, service-account keys, or a provider API key
20
21
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
21
- SendGrid). Public certificates are allowed.
22
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
23
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
24
+ the right backstop for it.
22
25
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
23
26
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
24
27
  noreply emails. A commit message reads as if a human wrote it.
@@ -49,7 +52,7 @@ npm test
49
52
  npm run test:coverage
50
53
  ```
51
54
 
52
- aimhooman also enforces this at commit time, so a blocked commit means a real
53
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
54
- ship.
55
+ aimhooman also enforces the artifact and attribution rules at commit time, so
56
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
57
+ is simple: AI works, hoomans ship.
55
58
  <!-- aimhooman:ruleset-end -->
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aimhooman",
3
- "version": "0.1.8",
4
- "description": "AI works. Hoomans ship. Keeps AI session files, secrets, and unwanted attribution out at the agent and Git boundary.",
3
+ "version": "0.3.0",
4
+ "description": "AI works. Hoomans ship. Keeps AI session files and unwanted attribution out at the agent and Git boundary.",
5
5
  "author": {
6
6
  "name": "aimhooman maintainers",
7
7
  "email": "yudhi@rmyndharis.com",
@@ -19,7 +19,7 @@
19
19
  "interface": {
20
20
  "displayName": "aimhooman",
21
21
  "shortDescription": "Keep AI tooling residue out of Git",
22
- "longDescription": "Detects AI session files, secrets, and unwanted attribution before they enter Git history.",
22
+ "longDescription": "Detects AI session files and unwanted attribution before they enter Git history.",
23
23
  "developerName": "aimhooman maintainers",
24
24
  "category": "Developer Tools",
25
25
  "capabilities": [
@@ -18,13 +18,16 @@ Its policy:
18
18
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
19
19
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
20
20
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
21
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
22
- If one is staged, unstage it and keep it out of Git instead.
21
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
22
+ for these artifacts. If one is staged, unstage it and keep it out of Git
23
+ instead.
23
24
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
24
25
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
25
26
  `.claude/.credentials.json`, service-account keys, or a provider API key
26
27
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
27
- SendGrid). Public certificates are allowed.
28
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
29
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
30
+ the right backstop for it.
28
31
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
29
32
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
30
33
  noreply emails. A commit message reads as if a human wrote it.
@@ -55,7 +58,7 @@ npm test
55
58
  npm run test:coverage
56
59
  ```
57
60
 
58
- aimhooman also enforces this at commit time, so a blocked commit means a real
59
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
60
- ship.
61
+ aimhooman also enforces the artifact and attribution rules at commit time, so
62
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
63
+ is simple: AI works, hoomans ship.
61
64
  <!-- aimhooman:ruleset-end -->
@@ -12,13 +12,16 @@ Its policy:
12
12
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
13
13
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
14
14
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
15
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
16
- If one is staged, unstage it and keep it out of Git instead.
15
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
16
+ for these artifacts. If one is staged, unstage it and keep it out of Git
17
+ instead.
17
18
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
18
19
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
19
20
  `.claude/.credentials.json`, service-account keys, or a provider API key
20
21
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
21
- SendGrid). Public certificates are allowed.
22
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
23
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
24
+ the right backstop for it.
22
25
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
23
26
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
24
27
  noreply emails. A commit message reads as if a human wrote it.
@@ -49,7 +52,7 @@ npm test
49
52
  npm run test:coverage
50
53
  ```
51
54
 
52
- aimhooman also enforces this at commit time, so a blocked commit means a real
53
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
54
- ship.
55
+ aimhooman also enforces the artifact and attribution rules at commit time, so
56
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
57
+ is simple: AI works, hoomans ship.
55
58
  <!-- aimhooman:ruleset-end -->
@@ -12,13 +12,16 @@ Its policy:
12
12
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
13
13
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
14
14
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
15
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
16
- If one is staged, unstage it and keep it out of Git instead.
15
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
16
+ for these artifacts. If one is staged, unstage it and keep it out of Git
17
+ instead.
17
18
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
18
19
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
19
20
  `.claude/.credentials.json`, service-account keys, or a provider API key
20
21
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
21
- SendGrid). Public certificates are allowed.
22
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
23
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
24
+ the right backstop for it.
22
25
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
23
26
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
24
27
  noreply emails. A commit message reads as if a human wrote it.
@@ -49,7 +52,7 @@ npm test
49
52
  npm run test:coverage
50
53
  ```
51
54
 
52
- aimhooman also enforces this at commit time, so a blocked commit means a real
53
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
54
- ship.
55
+ aimhooman also enforces the artifact and attribution rules at commit time, so
56
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
57
+ is simple: AI works, hoomans ship.
55
58
  <!-- aimhooman:ruleset-end -->
@@ -16,13 +16,16 @@ Its policy:
16
16
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
17
17
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
18
18
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
19
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
20
- If one is staged, unstage it and keep it out of Git instead.
19
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
20
+ for these artifacts. If one is staged, unstage it and keep it out of Git
21
+ instead.
21
22
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
22
23
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
23
24
  `.claude/.credentials.json`, service-account keys, or a provider API key
24
25
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
25
- SendGrid). Public certificates are allowed.
26
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
27
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
28
+ the right backstop for it.
26
29
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
27
30
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
28
31
  noreply emails. A commit message reads as if a human wrote it.
@@ -53,7 +56,7 @@ npm test
53
56
  npm run test:coverage
54
57
  ```
55
58
 
56
- aimhooman also enforces this at commit time, so a blocked commit means a real
57
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
58
- ship.
59
+ aimhooman also enforces the artifact and attribution rules at commit time, so
60
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
61
+ is simple: AI works, hoomans ship.
59
62
  <!-- aimhooman:ruleset-end -->
package/AGENTS.md CHANGED
@@ -12,13 +12,16 @@ Its policy:
12
12
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
13
13
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
14
14
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
15
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
16
- If one is staged, unstage it and keep it out of Git instead.
15
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
16
+ for these artifacts. If one is staged, unstage it and keep it out of Git
17
+ instead.
17
18
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
18
19
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
19
20
  `.claude/.credentials.json`, service-account keys, or a provider API key
20
21
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
21
- SendGrid). Public certificates are allowed.
22
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
23
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
24
+ the right backstop for it.
22
25
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
23
26
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
24
27
  noreply emails. A commit message reads as if a human wrote it.
@@ -49,7 +52,7 @@ npm test
49
52
  npm run test:coverage
50
53
  ```
51
54
 
52
- aimhooman also enforces this at commit time, so a blocked commit means a real
53
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
54
- ship.
55
+ aimhooman also enforces the artifact and attribution rules at commit time, so
56
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
57
+ is simple: AI works, hoomans ship.
55
58
  <!-- aimhooman:ruleset-end -->
package/CHANGELOG.md CHANGED
@@ -5,6 +5,153 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.3.0] - 2026-07-19
9
+
10
+ This release narrows aimhooman to the job it does better than anyone else:
11
+ keeping AI tooling residue and attribution out of Git history. Secret
12
+ scanning leaves the product — dedicated tools do it better, and
13
+ `docs/secrets.md` shows the gitleaks setup that replaces it. Commits also
14
+ get less brittle: a scan that cannot cover everything now warns on the
15
+ frictionless profiles instead of stopping the first hook, while the final
16
+ reference-transaction guard keeps its veto on every profile.
17
+
18
+ ### Removed
19
+
20
+ - **Breaking: built-in secret scanning is gone.** `rules/secrets.json` and
21
+ the four secret path rules (`secret.dotenv`, `secret.private-key`,
22
+ `secret.aws-credentials`, `secret.claude-credentials`) no longer ship, so
23
+ `.env` files, private keys, and provider tokens are not detected by
24
+ aimhooman anymore. Pair it with gitleaks — `docs/secrets.md` has the
25
+ pre-commit and GitHub Actions setup. The agent-facing instruction files
26
+ still tell agents not to commit secrets; only the mechanical scanner
27
+ moved out.
28
+ - `init --grandfather-secrets` and the `--scope secret-path` override are
29
+ gone with the scanner. Legacy `secret-path` entries in an existing
30
+ `overrides.json` are dropped on load with a warning naming the file.
31
+ A secret already in history needs rotation and a gitleaks run, not
32
+ aimhooman.
33
+ - With no rule reading binary content, an oversized binary file no longer
34
+ makes a scan incomplete; oversized text still does.
35
+
36
+ ### Added
37
+
38
+ - `aimhooman init --gitignore`: opt-in that also writes the managed
39
+ AI-artifact pattern block into the worktree `.gitignore`, so a team can
40
+ commit it and share the ignore set across clones. The default stays
41
+ local (`.git/info/exclude`); `status` shows the block and `uninstall`
42
+ removes it. Gitignore matching is case-sensitive.
43
+ - `docs/ai-artifacts.gitignore` and `docs/catalog.md`: the detection
44
+ catalog as a standalone resource, generated from `rules/*.json` by
45
+ `npm run sync:catalog` and kept honest in CI. Just want the ignore
46
+ list? Copy the first file.
47
+ - `.pre-commit-hooks.yaml`: run aimhooman from the pre-commit.com
48
+ framework (`aimhooman check --staged`).
49
+ - `action.yml`: a composite GitHub Action that runs
50
+ `aimhooman check --range <base>...<head>` in CI. See
51
+ `docs/integrations.md` for it, the pre-commit.com config, and honest
52
+ husky/lint-staged notes.
53
+ - Docs gained `docs/policy.md`, `docs/cli-reference.md`, `docs/faq.md`,
54
+ `docs/integrations.md`, and `docs/secrets.md`.
55
+
56
+ ### Changed
57
+
58
+ - An incomplete scan (an oversized file, a budget hit, an unloadable
59
+ local rule pack) now warns and continues on `clean`/`compliance` in
60
+ `check`, `fix`, `pre-commit`, and `commit-msg` instead of stopping at
61
+ exit 31. `strict` stays fail-closed, and so does the
62
+ reference-transaction guard on every profile — the stop moved from the
63
+ first hook to the final ref boundary, which `--no-verify` cannot skip.
64
+ - The README slimmed from 481 to 162 lines. The detail it carried —
65
+ versioned team policy, overrides, command and exit-code references,
66
+ the FAQ — moved into `docs/` unchanged in substance.
67
+
68
+ ## [0.2.0] - 2026-07-19
69
+
70
+ This release works through the findings of the cross-ecosystem field test
71
+ (8 upstream clones, 6 language loops, a local bare remote, and a private
72
+ GitHub sandbox). The headline: `allow` no longer says yes when it means no —
73
+ a path allow on a file whose content holds a secret is refused up front,
74
+ with the working escape hatch named in the same breath.
75
+
76
+ ### Fixed
77
+
78
+ - Tracked-tree scans (`audit`, `check --tracked`, `init --grandfather-secrets`)
79
+ no longer die with `spawnSync git EPIPE` on a partial clone of a repository
80
+ with submodule pins. A gitlink names a commit of another repository, so
81
+ asking `cat-file` about it triggered a promisor fetch that aborted the
82
+ whole metadata batch ("not our ref"). Gitlinks now skip the metadata read;
83
+ their type comes from the mode. Found by the OpenSSL field run, whose 11
84
+ submodule pins made the grandfather flag seed zero allows.
85
+ - `init --grandfather-secrets` now runs its one-shot tracked scan with the
86
+ total-byte budget raised to the env cap and the finding budget raised to
87
+ 100,000. The commit-time defaults (64 MiB, 1,000 findings) silently missed
88
+ fixtures beyond them in exactly the large, fixture-heavy repositories the
89
+ flag exists for; the per-file budget and an explicit env override still
90
+ apply.
91
+ - `aimhooman allow <path>` on a file whose content matches a secret rule
92
+ (e.g. a private key inside an ordinary-looking filename) no longer reports
93
+ `allowed` while the commit stays blocked. The guard now runs the engine's
94
+ secret content rules over the file's bytes, refuses the allow, and points
95
+ at `--scope secret-path`. Files over the scan budget or unreadable skip
96
+ the check; the commit-time scanner still fails closed on those.
97
+ - The scan-incomplete summary now names what was skipped
98
+ (`skipped: size-limit=1 file`) instead of `(size-limit=1)`, which read as
99
+ a one-byte budget rather than a count of files.
100
+
101
+ ### Added
102
+
103
+ - `aimhooman init --grandfather-secrets`: after a successful init, scan the
104
+ tracked tree once and write a `--scope secret-path` allow for every path
105
+ already tracking secret-looking material (test certs, sample keys). New
106
+ secrets stay blocked; only paths found in that scan are allowed. A failed
107
+ or incomplete scan warns without failing the init.
108
+ - Provider-token findings name the provider in human output
109
+ (`A provider access token (GitHub) must not enter Git history.`), so the
110
+ developer knows which credential to revoke. The token itself stays
111
+ redacted; the JSON report is unchanged.
112
+ - Secret content rules now carry a remediation line naming the fixture
113
+ escape hatch: `aimhooman allow <path> --scope secret-path --reason
114
+ "test fixture"`.
115
+ - The pre-commit hook now names locally-ignored AI artifacts once per set
116
+ change (`3 AI artifact(s) present locally are kept out of commits: ...`).
117
+ The prevention layer keeps them out of `git status`, which also kept their
118
+ exclusion silent: a `git add .` never told the developer the chat log did
119
+ not make the commit. The worktree walk is pathspec-pruned to the managed
120
+ exclude patterns, so it costs ~15ms; informational only, it never changes
121
+ an exit code.
122
+ - The reference-transaction veto now notes that the rejected commit object
123
+ remains in the local object store — collected by `git gc --prune=now` when
124
+ nothing else references it — so a secret payload is not mistaken for gone.
125
+
126
+ ### Changed
127
+
128
+ - Repeated findings of the same rule print the remediation once, then
129
+ `fix: as above for <rule id>`, instead of reprinting an identical fix
130
+ block for every hit.
131
+ - `init` output now prints `undo: aimhooman uninstall` and notes that known
132
+ AI artifacts are ignored locally (`git status --ignored` shows them).
133
+
134
+ ### Performance
135
+
136
+ - `openRepo` resolves the repository in one `git rev-parse` call instead of
137
+ three; every hook spawn pays this, so it was the cheapest milliseconds on
138
+ the commit path. The common-dir answer is resolved against the invoking
139
+ cwd and canonicalized, preserving the previous spelling on symlinked
140
+ paths (macOS `/tmp`), and a path containing a newline falls back to one
141
+ flag per call.
142
+ - The reference-transaction dispatcher exits before the Node spawn for a
143
+ `prepared` transaction that moves neither a branch nor HEAD (ORIG_HEAD,
144
+ tags, remote-tracking refs). Such payloads carry nothing `refcheck`
145
+ scans — but the skip first proves the four dispatchers are still
146
+ installed, so a hook manager wiping them mid-operation is answered with
147
+ a stop, not silence. An ordinary commit's hook time drops by roughly a
148
+ third in the field measurement (982ms → 649ms).
149
+ - Installed Git hook shims export `NODE_COMPILE_CACHE` pointing at a
150
+ per-install directory under the state dir (removed by
151
+ `uninstall --purge-state`), shaving the module parse/compile cost off
152
+ each hook spawn. An unwritable cache dir degrades to the old cold start,
153
+ never to a hook failure.
154
+
8
155
  ## [0.1.8] - 2026-07-18
9
156
 
10
157
  This release works through the findings of the real-world scenario report
package/CONTRIBUTING.md CHANGED
@@ -31,9 +31,8 @@ npm run verify # schemas, workflows, dead code, coverage, package, installed
31
31
  ## Adding a rule
32
32
 
33
33
  Rules live in `rules/` as JSON arrays: `paths.json` (staged paths),
34
- `attribution.json` (commit-message lines), `markers.json` (staged content),
35
- `secrets.json` (high-confidence secret patterns). Each
36
- rule has the shape:
34
+ `attribution.json` (commit-message lines), `markers.json` (staged content).
35
+ Each rule has the shape:
37
36
 
38
37
  ```json
39
38
  {
package/GEMINI.md CHANGED
@@ -12,13 +12,16 @@ Its policy:
12
12
  `.copilot/*`, `.cursor/session*`, `.cursor/chats/*`, `.cursor/logs/*`,
13
13
  `.aider.*`, `.specstory/*`, `.continue/sessions/*`, `.playwright-mcp/*`,
14
14
  `.remember/*`, `.superpowers/*`, and `.agent/*`. The examples are not
15
- exhaustive; the packaged `rules/paths.json` is the detection source of truth.
16
- If one is staged, unstage it and keep it out of Git instead.
15
+ exhaustive; the packaged `rules/paths.json` is the detection source of truth
16
+ for these artifacts. If one is staged, unstage it and keep it out of Git
17
+ instead.
17
18
  - Never commit secrets: a real `.env` (not `.env.example`), private keys
18
19
  (`id_rsa` and files containing a private-key header), `.aws/credentials`,
19
20
  `.claude/.credentials.json`, service-account keys, or a provider API key
20
21
  (GitHub, GitLab, npm, Slack, Anthropic, OpenAI, Google, Stripe, Hugging Face,
21
- SendGrid). Public certificates are allowed.
22
+ SendGrid). Public certificates are allowed. aimhooman does not scan for
23
+ secrets — this rule is on you, and a dedicated scanner such as gitleaks is
24
+ the right backstop for it.
22
25
  - Never add AI attribution to commit messages: no `Co-authored-by` trailer naming
23
26
  an AI (Claude, Copilot, Codex), no "Generated with/by <AI>" lines, no AI-service
24
27
  noreply emails. A commit message reads as if a human wrote it.
@@ -49,7 +52,7 @@ npm test
49
52
  npm run test:coverage
50
53
  ```
51
54
 
52
- aimhooman also enforces this at commit time, so a blocked commit means a real
53
- violation to fix, not a check to bypass. The rule is simple: AI works, hoomans
54
- ship.
55
+ aimhooman also enforces the artifact and attribution rules at commit time, so
56
+ a blocked commit means a real violation to fix, not a check to bypass. The rule
57
+ is simple: AI works, hoomans ship.
55
58
  <!-- aimhooman:ruleset-end -->