@chrono-meta/fh-gate 1.4.30 → 1.4.32
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.
package/CLAUDE.md
CHANGED
|
@@ -281,13 +281,32 @@ not marketplace-gate alone:
|
|
|
281
281
|
`LICENSE`/`README` contains a **private harness name or internal codename** · **module paths encode
|
|
282
282
|
internal acronyms**.
|
|
283
283
|
|
|
284
|
-
**
|
|
285
|
-
|
|
286
|
-
cannot catch
|
|
287
|
-
checklist** (`templates/PRE-PUBLISH-CHECKLIST.md`)
|
|
284
|
+
**Hook coverage — two distinct actions (refined 2026-06-17)**:
|
|
285
|
+
- **(a) repo-go-public** (`gh repo create --public` / a visibility flip) is irreversible and usually in a
|
|
286
|
+
**separate repo** — the FH pre-commit hook **cannot** catch it. That stays **AI-behavioral** (proactive
|
|
287
|
+
trigger below) **+ a portable checklist** (`templates/PRE-PUBLISH-CHECKLIST.md`), run on any repo/machine.
|
|
288
|
+
- **(b) committing operator-private tokens into public-tracked content of THIS repo IS an effective
|
|
289
|
+
publish of that content** — and that the pre-commit hook **now catches mechanically**: a
|
|
290
|
+
**confidentiality scan** of staged tracked *added* lines against the gitignored
|
|
291
|
+
`.public-surface-patterns` (companion-store names · corp-context framing · home paths · company assets),
|
|
292
|
+
blocking HIGH/MED + non-allowlisted LOW drift; `PUBLIC_SURFACE_OK=1` overrides for a deliberate reviewed
|
|
293
|
+
mention. **Two-layer** (mirrors `/public-surface-audit`): the literal tokens live ONLY in the gitignored
|
|
294
|
+
source — CLAUDE.md and the hook name **only categories**, never the literals (they would leak what they
|
|
295
|
+
guard). This closes the gap where the prose publish-trigger was **missed on a weaker-tier session**
|
|
296
|
+
(PR #109: a companion-store name + corp-context framing reached a public PR; the Sonnet session trusted a
|
|
297
|
+
PR comment over the file content). The scan fires at commit time and is **tier-independent — but only as
|
|
298
|
+
strong as the loaded patterns**: a COMMITTED `.public-surface-patterns.defaults` (universal patterns:
|
|
299
|
+
home paths) keeps it from ever being fully blind, while the company-specific literals require the
|
|
300
|
+
GITIGNORED override to be populated in each authoring env (esp. the company env, where company-origin
|
|
301
|
+
public PRs are written; absent override → only defaults run, with a loud warning). **Honest scope**:
|
|
302
|
+
plaintext only (encoded tokens out of scope); a line-split backstop catches a token wrapped across
|
|
303
|
+
lines; `PUBLIC_SURFACE_OK=1` overrides and is logged to a gitignored audit trail for the weekly audit.
|
|
304
|
+
Residuals (split-encoding, override-not-populated, override abuse) are documented, not silent.
|
|
288
305
|
|
|
289
306
|
> Origin: 2026-06-05 `phantom-gate` shipped public, then needed a private→de-company-scrub→re-public
|
|
290
|
-
> round-trip (`fh_signal_2026-06-05_fh-direct`). PSA existed but nothing forced it pre-publish.
|
|
307
|
+
> round-trip (`fh_signal_2026-06-05_fh-direct`). PSA existed but nothing forced it pre-publish. 2026-06-17
|
|
308
|
+
> (PR #109): the commit-time half (b) became a mechanical hook after a weaker-tier session leaked a
|
|
309
|
+
> companion-store name onto a public PR (`fh_signal_2026-06-17` Wave 4).
|
|
291
310
|
|
|
292
311
|
---
|
|
293
312
|
|
|
@@ -344,7 +363,7 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
|
|
|
344
363
|
| "where does this go", "asset location", "hub vs project", "placement" | `/asset-placement-gate` |
|
|
345
364
|
| "add to marketplace", "OK to publish", "pre-publish check" | `/marketplace-gate` |
|
|
346
365
|
| "did I leak anything", "public surface audit", "private token scan", "is my split clean", "check tracked files for private tokens" | `/public-surface-audit` |
|
|
347
|
-
| "publish", "make public", "make this repo public", "go public", "gh repo create --public", "flip to public", "first public push", "publish the package", "npm publish", "twine upload" (publish intent — **proactive**, fire *before* the action) | **Pre-Publish Surface Gate** (see above → `/public-surface-audit` + `/marketplace-gate` Check 5 must PASS first) |
|
|
366
|
+
| "publish", "make public", "make this repo public", "go public", "gh repo create --public", "flip to public", "first public push", "publish the package", "npm publish", "twine upload", **opening/updating a PR or pushing content to the public hub** (esp. company-origin) (publish intent — **proactive**, fire *before* the action; adding content to an already-public repo IS publishing that content) | **Pre-Publish Surface Gate** (see above → `/public-surface-audit` + `/marketplace-gate` Check 5 must PASS first). The commit-time half is now **hook-enforced** (mechanical confidentiality scan — see Pre-Publish Gate §Hook coverage (b)), so this proactive trigger is the salience layer over a mechanical floor. |
|
|
348
367
|
| "delete the branch", "브랜치 삭제", "브랜치 정리", "clean up branches", "force-push", "rewrite history", "지워도 돼?" (destructive intent — **proactive**, fire *before* the action) | **Destructive-Op Gate** (see above → enumerate → recover → destroy; `templates/predelete_check.sh`) |
|
|
349
368
|
| "look at this again", "is this right", "counterargument", "re-validate" | `/verify-bidirectional` |
|
|
350
369
|
| "MCP failing", "tool keeps erroring", "circuit-breaker", "same error looping" | `/mcp-circuit-breaker` |
|
package/package.json
CHANGED
|
@@ -66,9 +66,14 @@ Classify failure type:
|
|
|
66
66
|
| `NOT_FOUND` | 404 / tool not available | Server down / tool removed |
|
|
67
67
|
| `MALFORMED` | Parse error on response | Schema mismatch / API change |
|
|
68
68
|
| `RATE_LIMIT` | 429 / quota exceeded | Too many calls |
|
|
69
|
+
| `ADMIN_GATED` | "instance admin approval required" / server pending org enablement / tool unavailable until approved | Capability exists; the **MCP mount** is gated behind instance/admin permission — not a transport failure. Retrying never recovers it (an admin must act) |
|
|
69
70
|
|
|
70
71
|
If failure type cannot be determined: classify as `UNKNOWN`.
|
|
71
72
|
|
|
73
|
+
> **`ADMIN_GATED` is not a retry case.** Distinguish *capability unavailable* from *MCP transport
|
|
74
|
+
> unavailable*: when the block is an org/admin approval dependency, do not burn retries — route straight
|
|
75
|
+
> to the lower-permission substitute in Step 4 (Priority 1b).
|
|
76
|
+
|
|
72
77
|
---
|
|
73
78
|
|
|
74
79
|
### Step 2. Trip Decision
|
|
@@ -81,6 +86,11 @@ Count consecutive failures of the identified tool in the current session context
|
|
|
81
86
|
| 2 | Escalate warning. Suggest checking server status. |
|
|
82
87
|
| 3+ | **TRIP CIRCUIT** → output circuit open notice, block further calls to this tool |
|
|
83
88
|
|
|
89
|
+
> **Non-transient types trip at count 1, not 3.** `ADMIN_GATED`, `AUTH`, and `NOT_FOUND` do not recover
|
|
90
|
+
> on retry (an admin must act / credentials must change / the tool is gone), so counting to 3 only wastes
|
|
91
|
+
> calls. On the first failure of one of these types, trip immediately and go to Step 4. The 1→2→3 ramp is
|
|
92
|
+
> for *transient* types (`TIMEOUT`, `RATE_LIMIT`) where a later call may succeed.
|
|
93
|
+
|
|
84
94
|
Circuit open notice format:
|
|
85
95
|
```
|
|
86
96
|
⚡ CIRCUIT OPEN — {tool-name}
|
|
@@ -113,14 +123,22 @@ Log entry format:
|
|
|
113
123
|
|
|
114
124
|
### Step 4. Propose Alternatives
|
|
115
125
|
|
|
116
|
-
Present
|
|
126
|
+
Present the relevant fallback options ranked by effort (at least 3):
|
|
117
127
|
|
|
118
128
|
| Priority | Alternative | When to Use |
|
|
119
129
|
|---|---|---|
|
|
120
130
|
| **1 — Substitute tool** | Use a different MCP tool or built-in tool that covers the same task | Tool-specific failure (NOT_FOUND, AUTH) |
|
|
131
|
+
| **1b — Lower-permission API / workflow substitute** | The MCP mount is gated, but the underlying capability is usually still reachable through a member-scoped path: a Personal-Access-Token REST API call, or a workflow-automation runner. Before relying on it, confirm **credential scope** (a member-level token suffices?), **audit parity** (logged where the MCP path would log?), and **behavior gap** (what the MCP path does that this does not — e.g. natural-language workflow creation vs hand-written JSON). | `ADMIN_GATED` |
|
|
121
132
|
| **2 — Degrade gracefully** | Skip the MCP step, note the gap, continue with available information | TIMEOUT / RATE_LIMIT |
|
|
122
133
|
| **3 — Pause and retry** | Wait for server recovery (HALF-OPEN probe after cooldown) | Transient failure (TIMEOUT, RATE_LIMIT) |
|
|
123
134
|
|
|
135
|
+
> **Gating carries over to the substitute** (cross-ref the external-MCP tool-gating rule
|
|
136
|
+
> `mcp_tool_gating.md`). A REST/API or
|
|
137
|
+
> workflow-automation tool adopted under Priority 1b is still an external-action surface: classify its
|
|
138
|
+
> calls under the same ask/allow tiers — reads are `allow (untrusted-read)` only after behavior
|
|
139
|
+
> confirmation; any write / send / delete / permission-change stays `ask`. Trading a gated MCP mount for
|
|
140
|
+
> an ungated REST token does not lower the action's risk — only its permission barrier.
|
|
141
|
+
|
|
124
142
|
Output format:
|
|
125
143
|
```
|
|
126
144
|
## Fallback Options for {tool-name}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: phantom-quench
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Input-tracing grounding audit for artifacts such as test cases, analysis reports,
|
|
5
|
+
and design docs. Extracts proper nouns, numbers, citations, version claims, and
|
|
6
|
+
branching conditions, then back-traces each to declared local files by grep or to
|
|
7
|
+
external sources by fetch-and-support checks. Marks missing anchors as Phantom
|
|
8
|
+
Claims and cited-but-unsupporting anchors as Unsupported. A claim is grounded only
|
|
9
|
+
by non-model evidence: a local hit or literal source span, never another model's
|
|
10
|
+
agreement. Renamed from source-grounding-audit; old-name references still route
|
|
11
|
+
here. Triggered by: "phantom detection", "phantom claim", "source back-trace",
|
|
12
|
+
"where did this come from", "verify source", "does the source support this claim",
|
|
13
|
+
"grounding audit", "source grounding audit", "citation support check".
|
|
4
14
|
user-invocable: true
|
|
5
15
|
allowed-tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob", "WebFetch", "WebSearch"]
|
|
6
16
|
model: sonnet
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: steel-quench
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
4
|
+
All-angle verification meta-skill for near-complete artifacts. Turns vague design
|
|
5
|
+
anxiety into structured challenger waves using fh-commons:quench-challenger, then
|
|
6
|
+
drives defense and convergence until root weaknesses, residual risks, and added
|
|
7
|
+
complexity are explicit. Covers standard attack/defense rounds, optional
|
|
8
|
+
Meta-Aware Adversary mode for AI-specific risks such as hallucination, context
|
|
9
|
+
collapse, prompt injection, and tool lock-in, and Wave-P3 re-attack after an
|
|
10
|
+
upstream gate declares PASS. Built-in outputs emphasize attack-plus-prescription
|
|
11
|
+
pairs and can feed fh-meta:persona-innovator after convergence. Triggered by:
|
|
12
|
+
"quench this", "devil's judgment", "all-angle review", "end-to-end verification",
|
|
13
|
+
"steel quench", "deep pre-completion inspection", "did it really pass?".
|
|
5
14
|
user-invocable: true
|
|
6
15
|
allowed-tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob", "WebSearch", "Agent"]
|
|
7
16
|
model: opus
|