@chrono-meta/fh-gate 1.4.59 → 1.4.61
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-plugin/marketplace.json +3 -3
- package/CATALOG.md +83 -0
- package/CHEATSHEET.md +15 -2
- package/CLAUDE.md +143 -224
- package/README.ja.md +8 -7
- package/README.ko.md +7 -6
- package/README.md +36 -17
- package/README.zh.md +5 -5
- package/bin/fh-codex-doctor.js +34 -3
- package/bin/fh-gate.js +17 -5
- package/bin/fh-goal.js +13 -5
- package/bin/fh-run.js +13 -5
- package/knowledge/shared/harness-core/claude_md_gate_details.md +88 -1
- package/knowledge/shared/harness-core/fh_detail_protocols.md +2 -2
- package/knowledge/shared/harness-core/field_harness_diagnostic.md +48 -0
- package/knowledge/shared/harness-core/measurement-integrity-checklist.md +9 -2
- package/knowledge/shared/harness-core/multi_harness_evolution_loop.md +66 -0
- package/knowledge/shared/harness-core/onboarding_acceleration_autopilot.md +82 -0
- package/package.json +2 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +2 -2
- package/plugins/fh-meta/skills/fh/SKILL.md +71 -0
- package/plugins/fh-meta/skills/harness-doctor/SKILL.md +109 -10
- package/plugins/fh-meta/skills/salience-splitter/SKILL.md +1 -1
- package/plugins/fh-meta/skills/verify-bidirectional/SKILL.md +3 -3
- package/scripts/count_check.sh +8 -1
- package/scripts/fh-gate.sh +150 -13
- package/scripts/fh-goal.sh +46 -5
- package/scripts/fh-run.sh +11 -0
- package/scripts/selfcheck.sh +40 -10
- package/scripts/test_fh_gate_regressions.sh +208 -0
- package/templates/local_fh_context.md +1 -1
package/CLAUDE.md
CHANGED
|
@@ -173,7 +173,7 @@ Simplification guard: trivial denials with one obvious fix → state block + sin
|
|
|
173
173
|
|
|
174
174
|
- **Returning user** (session files OR mapped project tracks exist): fixed 4-door menu —
|
|
175
175
|
|
|
176
|
-
> 🐿️ **Welcome back to FH.** *① Map a project · ② Create a new project · ③ Accelerate a mapped project (work · Full-Harness · skills/agents/plugins) — {field candidates} · ④ Cross-project synergy*
|
|
176
|
+
> 🐿️ **Welcome back to FH.** *① Map a project · ② Create a new project · ③ Accelerate **or diagnose** a mapped project (work · Full-Harness · skills/agents/plugins · 진단) — {field candidates} · ④ Cross-project synergy*
|
|
177
177
|
>
|
|
178
178
|
> (When **FH-dev state exists** — the operator — the welcome line is **"The FH operator — good to see you."** in place of "Welcome back to FH.")
|
|
179
179
|
|
|
@@ -277,20 +277,20 @@ Record sim results in the Axes 2–3 marker + sub-agent invocation log.
|
|
|
277
277
|
> headless `claude -p --model` fallback when in-session model-pin is unavailable, the saturation-disguise
|
|
278
278
|
> retry (compact-then-retry once), and the credit-pool caveat — read when a model-pinned dispatch fails.
|
|
279
279
|
|
|
280
|
-
**Measurement-integrity pre-flight
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
280
|
+
**Measurement-integrity pre-flight**: when the sim/dispatch is a *cross-model measurement* (pinned to a
|
|
281
|
+
tier, comparing model behaviors, or feeding a published claim), **the instrument must be verified before
|
|
282
|
+
the measurement is trusted**.
|
|
283
|
+
|
|
284
|
+
> **Detail**: See `knowledge/shared/harness-core/measurement-integrity-checklist.md` — pin the display
|
|
285
|
+
> name not a slug (silent fallback to a weaker model is a measured failure) · reps ≥ 3 on any
|
|
286
|
+
> borderline/contested verdict (single draw = noise) · use a discriminating identity probe (a generic
|
|
287
|
+
> "OK" proves nothing about which model answered) — read **before** running any cross-model measurement.
|
|
287
288
|
|
|
288
289
|
**Floor-tier canary (optional pre-screen — token-free, *below* the Sonnet sim)**: a local model ≤ Sonnet
|
|
289
|
-
can blind-pre-screen a salience-dependent edit
|
|
290
|
-
a PASS adds cheap floor confidence and you still run the Sonnet sim; a FAIL never blocks alone. The
|
|
291
|
-
verdict stays with the **Sonnet-or-higher governor bound to a mechanical anchor**
|
|
292
|
-
|
|
293
|
-
no weak-local-judge regression of the judge-robustness principle (mechanical anchor over judge-only verdict).
|
|
290
|
+
can blind-pre-screen a salience-dependent edit before the Sonnet dispatch is spent. **Canary, NOT gate**:
|
|
291
|
+
a PASS adds cheap floor confidence and you still run the Sonnet sim; a FAIL never blocks alone. The
|
|
292
|
+
terminal verdict stays with the **Sonnet-or-higher governor bound to a mechanical anchor** — **no
|
|
293
|
+
judge-only path**, no weak-local-judge regression of the judge-robustness principle.
|
|
294
294
|
|
|
295
295
|
> **Detail**: See `knowledge/shared/harness-core/claude_md_gate_details.md §Floor-Tier-Canary` — the local
|
|
296
296
|
> model/panel options, the blind-probe procedure, dogfood evidence, and the FAIL-triage (real salience gap
|
|
@@ -308,13 +308,14 @@ no weak-local-judge regression of the judge-robustness principle (mechanical anc
|
|
|
308
308
|
**Cross-family complement (Axis 2, autonomous when consented)**: `steel-quench` dispatches in-session at the
|
|
309
309
|
session tier — **same family** as the governor, so it shares the governor's blind spots. For a **load-bearing**
|
|
310
310
|
change (gates · irreversible-surface code · doctrine), `auto-decorrelation` is the standing cross-family
|
|
311
|
-
verifier:
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
311
|
+
verifier: it recruits ≥1 **different-family** auditor when the sidecar panel is discoverable, and degrades
|
|
312
|
+
honestly to single-session when none is. **Autonomous once the operator has consented** (one-time, in the
|
|
313
|
+
UAP — `[[user_adaptation_profile]]`); the governor keeps the terminal verdict and **source-grounds** every
|
|
314
|
+
sidecar finding before acting on it (`[[feedback_judge_robustness_mechanical_anchor]]`).
|
|
315
|
+
|
|
316
|
+
> **Detail**: See `knowledge/shared/harness-core/claude_md_gate_details.md §Cross-Family-Complement` — the
|
|
317
|
+
> UAP sidecar mapping (which family for which task class) and the 2026-06-27 dogfood evidence — read when
|
|
318
|
+
> recruiting or configuring a cross-family auditor.
|
|
318
319
|
|
|
319
320
|
### Mode D Model Notice (fires once, at the same trigger as this gate)
|
|
320
321
|
|
|
@@ -331,161 +332,103 @@ advisory) is governed separately by `capability_escalation_consent.md`.
|
|
|
331
332
|
|
|
332
333
|
## Field-Harness Load-Bearing Change Gate (cross-family, pre-merge)
|
|
333
334
|
|
|
334
|
-
The 4-axis gate above fires on **FH asset** changes
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
cross-family adversarial gate** as FH's own assets. Not doing so is the exact gap that shipped **9
|
|
340
|
-
default-toward-PASS holes across 3 harnesses undetected** (measured 2026-07-03). Root principle:
|
|
341
|
-
**prose-specified verdict logic grants discretion; discretion's degrade direction is unconstrained
|
|
342
|
-
(→ optimistic PASS); same-family reviewers share the author's optimistic reading and miss it.**
|
|
335
|
+
The 4-axis gate above fires on **FH asset** changes; this gate applies the **same cross-family
|
|
336
|
+
adversarial rigor to load-bearing field code** (qasp · the-bible · pmh). The blind spot it guards is
|
|
337
|
+
model-family-level, not FH-specific: **prose-specified verdict logic grants discretion; discretion's
|
|
338
|
+
degrade direction is unconstrained (→ optimistic PASS); same-family reviewers share the author's
|
|
339
|
+
optimistic reading and miss it.**
|
|
343
340
|
|
|
344
341
|
**Trigger (per changed file — grep-assisted, salience-dependent, no field hook)**: an AI-authored
|
|
345
|
-
change to a **
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
**
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
below gate **the act** of publish/delete/rewrite — disjoint by role and by location, no double-gate.)*
|
|
373
|
-
|
|
374
|
-
**Degrade direction — cross-family unavailable is NOT a silent same-family pass** (the gate's own
|
|
375
|
-
standard, dogfood-caught 2026-07-03): if no different-family auditor is reachable, the gate does
|
|
376
|
-
**not** fall back to same-family review and proceed — that inherits `auto-decorrelation`'s general
|
|
377
|
-
*silent-degrade / never-hard-fail*, which is **fail-OPEN** for a load-bearing pre-merge surface
|
|
378
|
-
(the gate's entire value is decorrelation; same-family review shares the author's blind spot). It
|
|
379
|
-
marks the change **NOT-CONVERGED** and either blocks the autonomous merge / asks the operator, or
|
|
380
|
-
proceeds only under an **explicit, logged same-family-only acknowledgment** — never a silent
|
|
381
|
-
same-family pass. This **overrides** the delegated skill's default degrade for this surface,
|
|
382
|
-
consistent with §Irreversibility Surface-Class Degrade Invariant (applicable-but-tooling-down ≠ free skip).
|
|
383
|
-
|
|
384
|
-
**Residency**: sanitize company code (redact vendor/domain literals) before any external-family
|
|
385
|
-
dispatch; domain data never leaves. **Autonomy**: autonomous once the operator has consented (UAP),
|
|
386
|
-
same as the FH cross-family complement. **In autonomous loops** (innovator loop-engineering ·
|
|
387
|
-
`/goal` · cluster orchestration): this gate is **part of the delegated pipeline**, not an
|
|
388
|
-
afterthought — a load-bearing field change produced autonomously runs the lint → cross-family →
|
|
389
|
-
converge loop *before* it is Done. Autonomy floor (§Floor governance): the skip/run judgment is
|
|
390
|
-
trusted only at opus-tier+; below-floor RUNS the review by default (run-first, ask-last — asks only
|
|
391
|
-
when no runnable path exists), never silently skips (sonnet_floor_doctrine.md §Autonomy at Sonnet).
|
|
392
|
-
|
|
393
|
-
> **Detail** (discretion principle · 4-face signature · gate mechanics · n=7 qasp evidence):
|
|
394
|
-
> `knowledge/shared/harness-core/field_verdict_crossfamily_gate.md`.
|
|
342
|
+
change to a **verdict/gate enum or exit code** (PASS/FAIL/BLOCK/allow/deny), an **irreversible-op**
|
|
343
|
+
path (publish/delete/history-rewrite), or a **safety invariant** (floor, verdict-binding, a
|
|
344
|
+
pre-push/pre-commit hook). Grep the diff for verdict-enum returns / gate exits / safety-marked
|
|
345
|
+
functions — strong-advisory trigger, so under-trigger is a named residual, not an airtight claim.
|
|
346
|
+
|
|
347
|
+
**Gate (before merge, not after)**: ① **degrade-direction lint**
|
|
348
|
+
(`scripts/degrade_direction_scan.sh` — advisory pre-screen, FP-tolerant, never a solo block) →
|
|
349
|
+
② **cross-family adversarial review** (`auto-decorrelation` → ≥1 different-family auditor; governor
|
|
350
|
+
keeps the terminal verdict + **source-grounds** every finding — mechanical anchor over agreement) →
|
|
351
|
+
③ **confirm→fix→re-verify until CONVERGED**, **each fix shipping a mechanical regression test**
|
|
352
|
+
reproducing the closed hole (the anchor leg is a *required* convergence sub-condition). *(Role
|
|
353
|
+
deconfliction: this gate reviews **field code being authored**; the Irreversibility gates below gate
|
|
354
|
+
**the act** of publish/delete/rewrite — disjoint, no double-gate.)*
|
|
355
|
+
|
|
356
|
+
**Degrade direction (fail-closed)**: no different-family auditor reachable → **NOT-CONVERGED** —
|
|
357
|
+
block the autonomous merge / ask the operator / proceed only under an **explicit, logged
|
|
358
|
+
same-family-only acknowledgment**; never a silent same-family pass (§Irreversibility Surface-Class
|
|
359
|
+
Degrade Invariant). **Residency**: sanitize company code before any external-family dispatch; domain data never leaves.
|
|
360
|
+
**Autonomy**: autonomous once UAP-consented; **in autonomous loops the gate is part of the delegated
|
|
361
|
+
pipeline**, not an afterthought, and a below-floor orchestrator RUNS the review by default
|
|
362
|
+
(run-first, ask-last — `sonnet_floor_doctrine.md`).
|
|
363
|
+
|
|
364
|
+
> **Detail**: See `knowledge/shared/harness-core/field_verdict_crossfamily_gate.md` — the discretion
|
|
365
|
+
> principle, the four-faces failure signature, why same-family review misses it, the full gate
|
|
366
|
+
> mechanics, the n=7 qasp field evidence incl. the **9 default-toward-PASS holes across 3 harnesses**
|
|
367
|
+
> (2026-07-03), the named under-trigger residuals, and autonomous-loop baking — read when applying
|
|
368
|
+
> or auditing this gate.
|
|
395
369
|
|
|
396
370
|
## Field-Harness Diagnostic — "진단해줘 / 개선해줘" on a mapped project (compose → rank → HITL)
|
|
397
371
|
|
|
398
372
|
The gate above fires on a **specific field code change**. This is its **on-demand pull sibling**: when
|
|
399
373
|
the operator, working in a mapped project, asks to *diagnose* or *improve* the harness itself ("진단해줘",
|
|
400
|
-
"개선해줘", "check this project"), don't hand-pick one skill — **compose the checks FH already has
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
**Guards**: (a) fires on a **project-level** "진단/개선" ask, not a single-file edit request (those go
|
|
423
|
-
straight to the relevant skill); (b) **once per ask** — not a per-turn nag; (c) **company residency** —
|
|
424
|
-
run leak/confidentiality lenses locally, sanitize before any cross-family dispatch, and *surface*
|
|
425
|
-
company-sensitive findings (tracked company hosts, git-history rewrites) for operator decision rather
|
|
426
|
-
than auto-fixing them (dogfood 2026-07-08: the `local_pmh_context.md` tracked-company-hosts finding was
|
|
427
|
-
surfaced, not auto-untracked — history rewrite is the operator's call); (d) **autonomy floor** — the
|
|
428
|
-
compose/rank judgment is trusted at opus-tier+; below-floor, run the individual checks and present raw
|
|
429
|
-
rather than silently skipping a lens. Scale to the ask: a quick "뭐 고칠 거 있어?" runs the cheap
|
|
430
|
-
mechanical lenses (leak · split · token); "제대로 진단해줘" runs all five + harness-doctor depth.
|
|
374
|
+
"개선해줘", "check this project"), don't hand-pick one skill — **compose the checks FH already has**
|
|
375
|
+
(no-reinvention: the diagnostic only *routes and ranks* existing checks) across **six lenses** —
|
|
376
|
+
confidentiality/leak (`/public-surface-audit` incl. Step 3c ignore-verification) · split integrity (`/phantom-quench` Step 2.7) ·
|
|
377
|
+
token/salience (`/context-doctor` · `/salience-splitter`) · structure (`/harness-doctor` L1–L4) ·
|
|
378
|
+
verdict/gate degrade (`scripts/degrade_direction_scan.sh`) · loop-readiness (5-question lens —
|
|
379
|
+
`loop_engineering.md`) — into **one ranked `M`/`S`/`R` list** (same tiering as harness-doctor; each
|
|
380
|
+
item: *lens · file:line · one-line fix*). **Then HITL per item — nothing is auto-fixed**: the diagnostic's job is the
|
|
381
|
+
intelligent list, the human's job is the *go*; an approved fix routes to the owning skill's normal
|
|
382
|
+
path (and, if load-bearing field code, through the Load-Bearing Change Gate above).
|
|
383
|
+
|
|
384
|
+
**Guards**: (a) **project-level** "진단/개선" ask only (single-file asks go straight to the skill);
|
|
385
|
+
(b) **once per ask**; (c) **company residency** — leak lenses run locally, sanitize before
|
|
386
|
+
cross-family dispatch, company-sensitive findings are *surfaced* for operator decision, never
|
|
387
|
+
auto-fixed; (d) **autonomy floor** — compose/rank trusted at opus-tier+; below-floor, run the
|
|
388
|
+
individual checks and present raw rather than silently skipping a lens. Scale to the ask: a quick
|
|
389
|
+
"뭐 고칠 거 있어?" = cheap mechanical lenses (leak · split · token); "제대로 진단해줘" = all six +
|
|
390
|
+
harness-doctor depth.
|
|
391
|
+
|
|
392
|
+
> **Detail**: See `knowledge/shared/harness-core/field_harness_diagnostic.md` — the full lens table
|
|
393
|
+
> (incl. loop-readiness mechanics + its adversarial pairing), the 2026-07-08 dogfood examples, and
|
|
394
|
+
> guard rationale — read when actually running the diagnostic.
|
|
431
395
|
|
|
432
396
|
## Onboarding / Acceleration Autopilot — "새 프로젝트 · 하네스 작성 · 가속화" (discover → compose → rank → install-HITL)
|
|
433
397
|
|
|
434
398
|
The **install-direction twin of the Field-Harness Diagnostic**: same `compose → rank → HITL` engine, but
|
|
435
399
|
it decides *what to install/wire* instead of *what to fix*. When the operator enters an onboarding /
|
|
436
400
|
acceleration door (returning-menu ①②③: "새 프로젝트", "하네스 작성/작성해줘", "이 프로젝트 가속화",
|
|
437
|
-
"harness-ify", "accelerate this project"), don't hand-run one skill
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
3. **Ranked install plan**: one list, `M`/`S`/`R`, each item = *what · why · source (Tier 0 built-in / Tier 1
|
|
469
|
-
official / local sibling / FH scaffold) · exact install command*. No-reinvention: an official/built-in that
|
|
470
|
-
covers the need ranks above a net-new scaffold.
|
|
471
|
-
4. **Install — HITL, non-overwriting**: per-item approval; **never clobber an existing `.claude/`** (propose
|
|
472
|
-
merge/skip if present — this is FH's edge over revfactory's post-plan auto-write and harness-100's raw
|
|
473
|
-
`cp`). Any generated/installed FH asset runs the **4-axis gate**; a field scaffold runs
|
|
474
|
-
`asset-placement-gate` + `steel-quench`. **"끝까지 해줘 / 자율로 완주" → full-autonomy**: run the whole
|
|
475
|
-
plan under the `/goal-quench` budget+quality gate (token cost accepted by the operator), still
|
|
476
|
-
non-overwriting and still gated per asset — autonomy removes the per-item *prompt*, never the *gate*.
|
|
477
|
-
|
|
478
|
-
**Guards**: (a) **non-overwriting is inviolable** — the one thing both revfactory surfaces get wrong; FH
|
|
479
|
-
proposes merge, never clobbers; (b) **no-reinvention** — Tier 0/1 first, scaffold only what adds governance;
|
|
480
|
-
(c) **company residency** — discovery of a company sibling repo surfaces it, does not auto-map/leak it;
|
|
481
|
-
promoted to a machine field (`residency` on the skill registry, `fh_detail_protocols.md §1-c`) so any
|
|
482
|
-
derived recommendation naming a `company`/`operator-private` entry lands only in gitignored `tracks/_meta/`
|
|
483
|
-
or the private companion store, never a tracked public file (chamber run #7, 2026-07-14 — the guard was
|
|
484
|
-
prose-only and the field didn't exist);
|
|
485
|
-
(d) **autonomy floor** — the discover/rank judgment is trusted at opus-tier+; below-floor, present the raw
|
|
486
|
-
recommend and ask; (e) **once per door-entry**, not a per-turn nag. This is the door ③ (accelerate) engine
|
|
487
|
-
and the new-project/harness-write path made autonomous — the operator asks once and the harness discovers,
|
|
488
|
-
ranks, and (on request) installs everything worth wiring.
|
|
401
|
+
"harness-ify", "accelerate this project"), don't hand-run one skill:
|
|
402
|
+
|
|
403
|
+
1. **Phase 0 — State Audit + branch**: auto-discover existing `.claude/`, `CLAUDE.md`, mapped
|
|
404
|
+
`tracks/`, sibling repos, `LOCAL_SKILL_REGISTRY` → branch *new-build* / *extend-existing*
|
|
405
|
+
(found→extend, never fork) / *maintain* (→ Field-Harness Diagnostic instead). New-build that is
|
|
406
|
+
uncertain · exploratory · failure-expensive → **flag simulate-first**: a one-line HITL
|
|
407
|
+
recommendation to run the chamber (`scripts/chamber_run.sh`), then Full-Harness Mode §6 for the
|
|
408
|
+
actual onboarding — **never presented as a push-button autonomous emit** (EMIT has never fired;
|
|
409
|
+
the chamber to date *screens*, it has not *birthed*).
|
|
410
|
+
2. **Innovator-centered recommend**: `persona-innovator` (Mode I acceleration / Mode F FH-dev)
|
|
411
|
+
composing `plugin-recommender` + `cross-ecosystem-synergy-detection` + inferred technical level.
|
|
412
|
+
3. **Ranked install plan**: one `M`/`S`/`R` list — *what · why · source tier · exact install
|
|
413
|
+
command*; an official/built-in that covers the need outranks a net-new scaffold.
|
|
414
|
+
4. **Install — HITL, non-overwriting**: per-item approval; installed FH assets run the **4-axis
|
|
415
|
+
gate**, field scaffolds run `asset-placement-gate` + `steel-quench`. **"끝까지 해줘 / 자율로
|
|
416
|
+
완주" → full-autonomy** under the `/goal-quench` budget+quality gate — autonomy removes the
|
|
417
|
+
per-item *prompt*, never the *gate*.
|
|
418
|
+
|
|
419
|
+
**Guards (inviolable)**: (a) **non-overwriting** — propose merge, never clobber an existing
|
|
420
|
+
`.claude/`; (b) **no-reinvention** — Tier 0/1 first, scaffold only what adds governance; (c)
|
|
421
|
+
**company residency** — a company sibling repo is surfaced, never auto-mapped/leaked; `residency` is
|
|
422
|
+
a machine field on the skill registry (`fh_detail_protocols.md §1-c`), so recommendations naming a
|
|
423
|
+
`company`/`operator-private` entry land only in gitignored `tracks/_meta/` or the private companion
|
|
424
|
+
store; (d) **autonomy floor** — discover/rank trusted at opus-tier+; below-floor, present the raw
|
|
425
|
+
recommend and ask; (e) **once per door-entry**. This is the door ③ engine made autonomous — the
|
|
426
|
+
operator asks once and the harness discovers, ranks, and (on request) installs everything worth wiring.
|
|
427
|
+
|
|
428
|
+
> **Detail**: See `knowledge/shared/harness-core/onboarding_acceleration_autopilot.md` — the full
|
|
429
|
+
> Phase-0 branch logic (incl. the chamber/simulate-first honesty boundary + `chamber_run.sh` runner
|
|
430
|
+
> scope), revfactory provenance, and guard evidence (chamber run #7) — read when executing this
|
|
431
|
+
> autopilot.
|
|
489
432
|
|
|
490
433
|
## Irreversibility Gates — Surface-Class Degrade Invariant (shared spine of the two gates below)
|
|
491
434
|
|
|
@@ -559,32 +502,23 @@ not marketplace-gate alone:
|
|
|
559
502
|
`LICENSE`/`README` contains a **private harness name or internal codename** · **module paths encode
|
|
560
503
|
internal acronyms**.
|
|
561
504
|
|
|
562
|
-
**Hook coverage — three distinct actions
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
(staged added lines vs the gitignored `.public-surface-patterns
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
fail-closed if patterns/file-set unresolved, if the parse looks partial, **or if the gitignored operator
|
|
574
|
-
override is absent** — defaults-only would otherwise green-PASS a HIGH company literal on a fresh clone / CI).
|
|
575
|
-
**Named residuals (it is a denylist on the npm CLI, not a universal secret-scanner)**: (i) `npm publish
|
|
576
|
-
--ignore-scripts` / a CI `.npmrc ignore-scripts=true` / `pnpm`/`yarn publish` **skip the lifecycle hook** —
|
|
577
|
-
route publishes through `npm run release` or an explicit CI scan step; (ii) it scans only the **loaded
|
|
578
|
-
patterns**, so an **un-patterned secret shape** (an API key the patterns don't describe) still ships; (iii) on
|
|
579
|
-
a runner without the gitignored override it is defaults-only unless populated; (iv) it scans **working-tree
|
|
580
|
-
content, not the final tarball bytes** — benign here (content-neutral lifecycle: prepare=chmod, no prepack)
|
|
581
|
-
but re-open if a content-generating publish lifecycle is added (cross-family audit 2026-06-27). So of the Pre-Publish surface,
|
|
582
|
-
**(b) commit-time and (c) npm-publish are mechanized** (with the residuals above); only **(a) separate-repo
|
|
583
|
-
go-public stays genuinely un-hookable** (prose + checklist).
|
|
505
|
+
**Hook coverage — three distinct actions, two of them mechanized**:
|
|
506
|
+
|
|
507
|
+
| Action | Enforcement |
|
|
508
|
+
|---|---|
|
|
509
|
+
| **(a) repo-go-public** (`gh repo create --public` · visibility flip · first push to a new public remote) | **Un-hookable** — separate repo, no hook here sees it. Stays **AI-behavioral** (the proactive trigger below) + the portable `templates/PRE-PUBLISH-CHECKLIST.md`. |
|
|
510
|
+
| **(b) committing operator-private tokens into public-tracked content of THIS repo** (= an effective publish of that content) | **Mechanized** — pre-commit confidentiality scan, staged added lines vs the gitignored `.public-surface-patterns`. HIGH/MED block; `PUBLIC_SURFACE_OK=1` overrides + logs. |
|
|
511
|
+
| **(c) `npm publish`** | **Mechanized** — `scripts/public_surface_scan_files.sh` via `prepublishOnly`, scanning the full content of the exact published file set. HIGH/MED block; same override + log; fail-closed on unresolved patterns/file-set. |
|
|
512
|
+
|
|
513
|
+
So only **(a) stays genuinely un-hookable** — that is where this gate's prose is the only floor, which is
|
|
514
|
+
why the proactive trigger matters. (b) and (c) are denylists on their own paths, **not** universal
|
|
515
|
+
secret-scanners: they carry named residuals.
|
|
584
516
|
|
|
585
517
|
> **Detail**: See `knowledge/shared/harness-core/claude_md_gate_details.md §Pre-Publish-Hook-Coverage` — the
|
|
586
|
-
> two-layer pattern (literals only in the gitignored source), honest scope
|
|
587
|
-
> (
|
|
518
|
+
> two-layer pattern (literals only in the gitignored source), honest scope, the full named-residual list for
|
|
519
|
+
> (b) and (c) (`--ignore-scripts` / non-npm clients · un-patterned secret shapes · override-not-populated ·
|
|
520
|
+
> worktree-vs-tarball bytes), and the PR #109 (`fh_signal_2026-06-17` Wave 4) / phantom-gate origin — read
|
|
521
|
+
> when configuring or auditing the scan, or before relying on it as a floor.
|
|
588
522
|
|
|
589
523
|
---
|
|
590
524
|
|
|
@@ -607,36 +541,22 @@ force-push, scrub of tracked history, bulk deletion of session records / tracks
|
|
|
607
541
|
strongest available tier (floor semantics, §Tier-floor); a below-floor pass is provisional.
|
|
608
542
|
3. **Destroy** only what passed — REVIEW blocks a scripted delete chain (script exits 1).
|
|
609
543
|
|
|
610
|
-
**Mechanical floor (pre-push hook — git-side surfaces)**:
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
tag/notes deletes always block) and **blocks** unless `DESTRUCTIVE_OP_OK=1` (an explicit, logged operator
|
|
617
|
-
acknowledgment — used *after* enumerate + recover) is set. The verdict is load-bearing (a merged-branch
|
|
618
|
-
cleanup passes; a silent-loss CHECK does not), so this is the enumerate as a mechanical floor, not prose.
|
|
619
|
-
**What it does and does NOT close (honest)**: it closes the **honest-weak-model** gap — an agent that
|
|
620
|
-
simply *forgot* the prose gate is now mechanically stopped. It does **not** close the **injected/adversarial**
|
|
621
|
-
gap: an agent under instruction can set the override or `--no-verify`, and a client-side hook is readable
|
|
622
|
-
and bypassable by design. The hard floor for the adversarial case is **server-side branch protection**
|
|
623
|
-
(GitHub *Restrict deletions* / *Restrict force pushes*) — this hook is the honest-model floor, branch
|
|
624
|
-
protection is the hard floor. **Scope**: covers only git pushes *from a hook-installed repo* (`npm publish`
|
|
625
|
-
is mechanized separately via `prepublishOnly` — see §Pre-Publish Hook coverage (c)); the remaining non-git
|
|
626
|
-
surface — a separate-repo `gh repo create --public` / visibility flip — is genuinely un-hookable and stays
|
|
627
|
-
prose + `PRE-PUBLISH-CHECKLIST.md`. **Portability**: bash-3.2 safe (macOS
|
|
628
|
-
default `/bin/bash`); the original draft used a bash-4 associative array that crashed fail-OPEN on 3.2 —
|
|
629
|
-
caught in test, a portability defect class worth noting.
|
|
544
|
+
**Mechanical floor (pre-push hook — git-side surfaces)**: at *push* time, **remote branch/ref deletion**
|
|
545
|
+
and **force / non-fast-forward push** are enforced **mechanically** by `templates/.git-hooks/pre-push` —
|
|
546
|
+
it runs the per-ref verdict above and **blocks** unless `DESTRUCTIVE_OP_OK=1` (an explicit, logged operator
|
|
547
|
+
acknowledgment, used *after* enumerate + recover). It closes the **honest-weak-model** gap (a forgotten
|
|
548
|
+
prose gate is now stopped); it does **not** close the injected/adversarial one — the hard floor there is
|
|
549
|
+
**server-side branch protection**. Non-git surfaces are out of its scope.
|
|
630
550
|
|
|
631
551
|
**Degrade direction**: per the Surface-Class Degrade Invariant above, if `predelete_check.sh` is missing
|
|
632
552
|
or errors, this irreversible surface **fails closed** — the pre-push hook blocks (enumerate by hand or
|
|
633
553
|
take the explicit `DESTRUCTIVE_OP_OK=1` override); a tooling-down enumerate step never silently degrades
|
|
634
554
|
into "just delete it."
|
|
635
555
|
|
|
636
|
-
>
|
|
637
|
-
>
|
|
638
|
-
>
|
|
639
|
-
>
|
|
556
|
+
> **Detail**: See `knowledge/shared/harness-core/claude_md_gate_details.md §Destructive-Op-Hook-Coverage`
|
|
557
|
+
> — the per-ref verdict mechanics, what the hook does/does not close (honest scope + adversarial residual),
|
|
558
|
+
> the bash-3.2 portability defect class, and the 2026-06-10 origin incident — read when auditing or
|
|
559
|
+
> configuring the pre-push gate.
|
|
640
560
|
|
|
641
561
|
---
|
|
642
562
|
|
|
@@ -645,38 +565,37 @@ into "just delete it."
|
|
|
645
565
|
At any point during a session, when the following signals are detected, propose the relevant skill in one line.
|
|
646
566
|
Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?"`
|
|
647
567
|
|
|
568
|
+
> **Row diet (2026-07-17, Step 0.5 probe 13/18)**: rows whose skill frontmatter `description` already
|
|
569
|
+
> catches the utterance at high confidence were removed — platform-native skill matching owns those
|
|
570
|
+
> (plugin-recommender · harness-doctor · synergy · frontier-digest · sim-conductor · install-wizard ·
|
|
571
|
+
> asset-placement-gate · marketplace-gate · public-surface-audit · verify-bidirectional ·
|
|
572
|
+
> mcp-circuit-breaker · token-budget-gate · salience-splitter — the last one earned removal by a
|
|
573
|
+
> description strengthening in the same change, not by its original description). This table keeps only: **proactive
|
|
574
|
+
> safety gates** (publish · destructive · MCP-mount) · **non-skill protocol routes** (gates, doctrine
|
|
575
|
+
> sections, deep-research ladder) · **disambiguators and weak-description rows**. Before adding a row
|
|
576
|
+
> back, probe whether the description alone catches it.
|
|
577
|
+
|
|
648
578
|
| Conversation Signal Keywords | Proposed Skill |
|
|
649
579
|
|---|---|
|
|
650
|
-
| "
|
|
651
|
-
| "context is getting long", "token limit", "/clear", "slow", "context" (burden) | `/context-doctor` |
|
|
580
|
+
| "context is getting long", "token limit", "/clear", "slow", "context", "토큰 아깝다" (burden already felt — retrospective; future-cost estimates go to `/token-budget-gate`) | `/context-doctor` |
|
|
652
581
|
| "wrap up this week", "review", "audit", "weekly", "retrospective" | `/harvest-loop` |
|
|
653
582
|
| "pull this into FH", "reverse-harvest", "worth keeping", "harvest pattern", "field pattern" | `/field-harvest` |
|
|
654
583
|
| "용광로모드", "crucible mode", "absorb this whole corpus", "throw everything in", "re-forge FH identity", "melt this down" (total-immersion absorption, not cherry-pick — esp. a whole corpus on a core FH axis, or a frontier showcase risking FOMO) | `knowledge/shared/harness-core/crucible_mode.md` (read it, run the chain: total-ingest → steel-quench/phantom-quench melt → governor identity-bonding → sim/persona reforge → field-harvest rebirth; the core invariants stay unmeltable) |
|
|
655
|
-
| "harness is complex", "too many skills", "check structure", "harness" | `/harness-doctor` |
|
|
656
584
|
| "review this PR", "check diff", "code review" | code diff → built-in `/code-review`·`/review` · FH-asset coherence → `/hub-cc-pr-reviewer` (role split) |
|
|
657
585
|
| "keep watching X", "poll this", "check every N minutes", recurring WATCH item | built-in `/loop` (interval runner) — pair with the WATCH list, don't hand-poll |
|
|
658
|
-
| "are these in sync", "synergy", "can these integrate", "any overlap" | `/cross-ecosystem-synergy-detection` |
|
|
659
|
-
| "latest trends", "frontier", "external resources" | `/frontier-digest` |
|
|
660
586
|
| "research this deeply", "survey the literature", "comprehensive analysis", "deep research", "look this up thoroughly", "조사해줘", "리서치" (general topic research, not trend-scan) | **Deep-Research Capability Ladder** (`knowledge/shared/harness-core/deep_research_capability_ladder.md`) — route to the highest available rung: built-in `/deep-research` if present → else Claude `WebSearch`+`WebFetch` synthesis (tier-sensitive) → `/frontier-digest` only if it's AI/harness trend-scan. No-reinvention: FH routes, does not build a research engine. |
|
|
661
587
|
| "orchestrate agents", "parallel dispatch", "combine skills", "multiple agents" | `/agent-composer` |
|
|
662
|
-
| "run a simulation", "external user perspective", "internal audit", "quality check" | `/sim-conductor` |
|
|
663
588
|
| "broaden the grounded corpus", "add another version of the corpus", "ingest the full source as the grounding axiom", "여러 버전으로 통째로 가져와" (verbatim-relay corpus expansion — fail-closed grounding, no generator) | `/corpus-grounding-expander` |
|
|
664
589
|
| "broaden these personas", "what other voices fit this cast", "map these roles to a decision lens", "페르소나 후보군 더 넓혀" (persona seed → tiered judgment-mapped cast; pairs with `persona-innovator` for naming) | `/persona-roster-expander` |
|
|
665
|
-
| "first install", "FH setup", "wizard", "install-wizard" | `/install-wizard` |
|
|
666
590
|
| "connect a project", "map this project", "link to hub" | `auto_project_mapping.md` (mapping) |
|
|
667
591
|
| "harness-ify this project", "full harness setup", "프로젝트 하네스화", "promote to full harness" | `auto_project_mapping.md §6` (Full-Harness Mode) |
|
|
668
592
|
| "check install", "verify setup", "confirm install", "install-doctor" | `/install-doctor` |
|
|
669
|
-
| "where does this go", "asset location", "hub vs project", "placement" | `/asset-placement-gate` |
|
|
670
|
-
| "add to marketplace", "OK to publish", "pre-publish check" | `/marketplace-gate` |
|
|
671
|
-
| "did I leak anything", "public surface audit", "private token scan", "is my split clean", "check tracked files for private tokens" | `/public-surface-audit` |
|
|
672
593
|
| "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. |
|
|
673
594
|
| "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`) |
|
|
674
|
-
| "
|
|
675
|
-
| "
|
|
595
|
+
| **"새 기능 검증해줘", "test this feature", "이 TC 확인해줘" — verifying the user's PRODUCT/feature (not FH itself)** | **Route to the mapped field harness first** (Cross-Project Skill Bus / registry) — the field harness owns product verification. The harness-verification rows in this table (`verify-bidirectional` · `prompt-regression` · `sim-conductor` · `pipeline-conductor`) verify the *harness*, and must not shadow a product-verification ask (a field project's *harness assets* — its skills/rules — still use those FH verification rows) |
|
|
596
|
+
| "지난주에 뭐 했지", "what did we do last week", "예전에 이거 한 적 있나" (recall intent) | §Searching Past Work (CATALOG-first) — read CATALOG.md, then open only candidate files |
|
|
676
597
|
| "add this MCP server", "mount this MCP", "mcp.json에 추가", "connect this tool server" (external-MCP mount intent — **proactive**, fire *before* first tool call; mount intent only — a failing/erroring mounted server is `/mcp-circuit-breaker`'s row above) | `templates/.claude/rules/mcp_tool_gating.md` (name-keyed ask/allow table — never trust server annotations or names; fill §3 at mount time) |
|
|
677
|
-
| "token budget", "how expensive", "estimate tokens", "will this cost a lot" | `/token-budget-gate` |
|
|
678
598
|
| "did my rule change break anything", "regression check", "test harness changes" | `/prompt-regression` |
|
|
679
|
-
| "SKILL.md too large", "split this skill", "skill is bloated", "skill file too long" | `/salience-splitter` |
|
|
680
599
|
| "review for the team", "CTO review", "decision-maker", "share with leadership", "approval deck" | `/apex-review` |
|
|
681
600
|
| "run full pipeline", "verify everything", "end-to-end sweep", "chain all verifications" | `/pipeline-conductor` |
|
|
682
601
|
| "help me write a prompt", "build a prompt", "improve this prompt", "prompt template" | `/meta-prompt-builder` |
|
package/README.ja.md
CHANGED
|
@@ -129,13 +129,14 @@ Project B ──→ CLAUDE.md でハブを接続
|
|
|
129
129
|
|
|
130
130
|
スケールが第二の要点です。**スキル · エージェント · プラグイン**は1つの道具です。**ハーネス**は一段上 —
|
|
131
131
|
1つの*星 (star)* です: あるプロジェクトの道具 · ルール · ゲート · 記憶が、1つの働く体へと束ねられたもの。
|
|
132
|
-
**forge-harness
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
132
|
+
**forge-harness はその星たちが暮らす銀河です**: 複数のハーネスを共通の床の上に束ねてドリフトを防ぎ、
|
|
133
|
+
散り散りになる代わりに共に進化させます。
|
|
134
|
+
|
|
135
|
+
この銀河はただの容れ物ではありません。FH はフィールドハーネスを**自らのサンドボックス内で
|
|
136
|
+
シミュレーションとして走らせることができ** — 1回あたりは高くつきますが、試行錯誤が一箇所に集まり
|
|
137
|
+
複利で積み上がるため総コストは安くなります — シミュレーションが検証されれば、その
|
|
138
|
+
プロジェクトを独立した特化ハーネスとして**送り出します (EMIT)**。これが目指す目標です。実際には、
|
|
139
|
+
4つの方法で働きます:
|
|
139
140
|
|
|
140
141
|
**① 組み立て (Assemble)** — FH はハーネスの*クラスター*を最適なトークンコストで運用し、プロジェクトに合う
|
|
141
142
|
ハーネスを手に握らせます。スキルを1つずつ配線するのではなく、**ハーネス**を — そのプラグイン · スキル ·
|
package/README.ko.md
CHANGED
|
@@ -129,12 +129,13 @@ Project B ──→ CLAUDE.md에서 허브 연결
|
|
|
129
129
|
|
|
130
130
|
스케일이 두 번째 핵심입니다. **스킬 · 에이전트 · 플러그인**은 하나의 도구입니다. **하네스**는 한 급 위 —
|
|
131
131
|
하나의 *별(star)*입니다: 한 프로젝트의 도구 · 규칙 · 게이트 · 기억이 하나의 작동하는 몸으로 묶인 것.
|
|
132
|
-
**forge-harness는 그 별들이 사는
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
**forge-harness는 그 별들이 사는 은하계입니다**: 여러 하네스를 공통 바닥 위에 묶어 드리프트를 막고,
|
|
133
|
+
흩어지는 대신 함께 진화하게 합니다.
|
|
134
|
+
|
|
135
|
+
이 은하계는 담는 그릇에 그치지 않습니다. FH는 현장 하네스를 자기 샌드박스 안에서 **시뮬레이션으로
|
|
136
|
+
돌려보고** — 한 번 돌리는 값은 비싸도 시행착오가 한곳에 모여 복리로 쌓이므로 총비용은 쌉니다 —
|
|
137
|
+
검증이 끝나면 그 프로젝트를 독립된 특화 하네스로 **내보냅니다(EMIT)**. 이것은 지향하는 목표입니다.
|
|
138
|
+
구체적으로는 네 가지 방식으로 작동합니다:
|
|
138
139
|
|
|
139
140
|
**① 조립(Assemble)** — FH는 하네스의 *클러스터*를 최적 토큰 비용으로 운용하며, 프로젝트에 맞는
|
|
140
141
|
하네스를 손에 쥐어줍니다. 스킬을 하나하나 배선하는 게 아니라, **하네스**를 — 그 플러그인 · 스킬 ·
|