You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/plans/20260415-overlay-and-ask-support.md
+15-15Lines changed: 15 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -304,21 +304,21 @@ No marker file needed. Hint auto-silences when all settings entries are imported
304
304
- Modify: `docs/rule-format.md` (document `_source_hash` field on imported rules)
305
305
- Modify: `.claude-plugin/plugin.json` and `.claude-plugin/marketplace.json` (0.4.0 -> 0.4.1)
306
306
307
-
-[] extract `is_importable_entry <raw>` predicate from `bootstrap.sh` into `common.sh`. Both converter and hint helper use it. Single source of truth for "can bootstrap convert this entry"
308
-
-[] add `normalize_settings_entry <entry>` helper in `common.sh`: trim leading/trailing whitespace only. No lowercasing, no path collapsing. Match CC's native parser exactly
309
-
-[] add `hash_settings_entry <entry>` that emits sha256 of normalized form
310
-
-[] add `settings_importable_hashes` that scans all settings files, uses `is_importable_entry` to filter, emits hash set one per line
311
-
-[] add `imported_hashes` that reads all passthru.imported.json files and emits every present `_source_hash` value (missing fields contribute no hash)
312
-
-[] modify `scripts/bootstrap.sh` to embed `_source_hash` in each rule it writes during `--write`
313
-
-[] modify `session-start.sh`: replace the marker-file gate with a diff (`settings_importable_hashes - imported_hashes`). Fire the hint with the un-imported count. Remove marker touch entirely. Legacy migration: rules without `_source_hash` contribute nothing to imported_hashes, so the hint fires until the user re-runs `/passthru:bootstrap` which rewrites the file with hashes
314
-
-[] remove the marker-touch logic from `session-start.sh` (dead code after this change)
315
-
-[] add bats: bootstrap run produces rules with `_source_hash`; re-running bootstrap is idempotent (hashes stable); settings with no matching imported entries -> hint fires with correct count; settings fully covered -> no hint; legacy imported file (rules without `_source_hash`) + settings with entries -> hint fires (honest migration); post-bootstrap run -> hint silences
316
-
-[] run `bats tests/*.bats` - must pass
317
-
-[] bump version to 0.4.1 in both manifests
318
-
-[] update CHANGELOG or release notes text in README if it has one; otherwise rely on gh release --generate-notes
319
-
-[] commit + open PR: `fix(hint): re-fire bootstrap hint until all settings entries imported`
320
-
-[ ]**PROMPT USER** to test locally BEFORE merge: `claude --plugin-dir /Users/nemirovsky/Developer/claude-passthru` in a session with importable settings entries. Verify hint fires with correct count, re-running bootstrap silences it. User confirms or flags issues
321
-
-[] after user-confirmed local verification + CI green: merge PR, tag v0.4.1, release
307
+
-[x] extract `is_importable_entry <raw>` predicate from `bootstrap.sh` into `common.sh`. Both converter and hint helper use it. Single source of truth for "can bootstrap convert this entry"
308
+
-[x] add `normalize_settings_entry <entry>` helper in `common.sh`: trim leading/trailing whitespace only. No lowercasing, no path collapsing. Match CC's native parser exactly
309
+
-[x] add `hash_settings_entry <entry>` that emits sha256 of normalized form
310
+
-[x] add `settings_importable_hashes` that scans all settings files, uses `is_importable_entry` to filter, emits hash set one per line
311
+
-[x] add `imported_hashes` that reads all passthru.imported.json files and emits every present `_source_hash` value (missing fields contribute no hash)
312
+
-[x] modify `scripts/bootstrap.sh` to embed `_source_hash` in each rule it writes during `--write`
313
+
-[x] modify `session-start.sh`: replace the marker-file gate with a diff (`settings_importable_hashes - imported_hashes`). Fire the hint with the un-imported count. Remove marker touch entirely. Legacy migration: rules without `_source_hash` contribute nothing to imported_hashes, so the hint fires until the user re-runs `/passthru:bootstrap` which rewrites the file with hashes
314
+
-[x] remove the marker-touch logic from `session-start.sh` (dead code after this change)
315
+
-[x] add bats: bootstrap run produces rules with `_source_hash`; re-running bootstrap is idempotent (hashes stable); settings with no matching imported entries -> hint fires with correct count; settings fully covered -> no hint; legacy imported file (rules without `_source_hash`) + settings with entries -> hint fires (honest migration); post-bootstrap run -> hint silences
316
+
-[x] run `bats tests/*.bats` - must pass
317
+
-[x] bump version to 0.4.1 in both manifests
318
+
-[x] update CHANGELOG or release notes text in README if it has one; otherwise rely on gh release --generate-notes
319
+
-[x] commit + open PR: `fix(hint): re-fire bootstrap hint until all settings entries imported`
320
+
-[x] auto-merged, user to test post-release (policy: auto-merge after CI green)
321
+
-[x] after user-confirmed local verification + CI green: merge PR, tag v0.4.1, release
322
322
323
323
### Task 2: PostToolUseFailure handler (ship as v0.4.2 patch)
Copy file name to clipboardExpand all lines: docs/rule-format.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -79,6 +79,12 @@ Absent `match` (or an empty object) matches any input, so the rule reduces to a
79
79
80
80
Human-readable note describing why the rule exists. The hook surfaces it in the `permissionDecisionReason` field Claude Code shows. Purely documentation for you. The verifier does not check it.
81
81
82
+
### `_source_hash` (string, optional)
83
+
84
+
SHA-256 hex digest of the original `permissions.allow` entry that a given rule was imported from. Present only on rules written by `scripts/bootstrap.sh`. You never need to set this by hand, and you should not edit it. The session-start bootstrap hint uses this field to compute the diff between entries in `settings.json` and rules already in `passthru.imported.json`: a rule carries `_source_hash` iff bootstrap has imported the corresponding native entry.
85
+
86
+
Legacy `passthru.imported.json` files from before this field existed have no hashes. In that case the hint re-fires every session until you re-run `/passthru:bootstrap`, which rewrites the file with hashes attached. After that the hint auto-silences as intended.
87
+
82
88
## Example rules
83
89
84
90
**Allow `gh api /repos/*/*/forks` across any owner/repo:**
0 commit comments