@chrono-meta/fh-gate 1.4.30 → 1.4.31

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.
Files changed (2) hide show
  1. package/CLAUDE.md +25 -6
  2. package/package.json +1 -1
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
- **Why no hook (honest)**: the irreversible action is `gh repo create --public` / a visibility flip, **not
285
- `git commit`** and it usually happens in a **separate repo**, not forge-harness. The FH pre-commit hook
286
- cannot catch either. This gate is therefore **AI-behavioral** (proactive trigger below) **+ a portable
287
- checklist** (`templates/PRE-PUBLISH-CHECKLIST.md`) the operator runs on any repo, on any machine.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chrono-meta/fh-gate",
3
- "version": "1.4.30",
3
+ "version": "1.4.31",
4
4
  "description": "FH runtime adapters — run FH governance, skills, and agents via Claude or Codex with machine-parseable gates.",
5
5
  "license": "MIT",
6
6
  "keywords": [