@chrono-meta/fh-gate 2.5.0 → 2.6.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.
- package/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +11 -0
- package/CATALOG.md +41 -0
- package/CLAUDE.md +45 -10
- package/README.ja.md +4 -3
- package/README.ko.md +4 -3
- package/README.md +4 -3
- package/README.zh.md +4 -3
- package/docs/USER_GUIDE.md +118 -0
- package/docs/platform_sustainability.md +174 -0
- package/knowledge/shared/GLOSSARY.md +26 -1
- package/knowledge/shared/harness-core/fh_detail_protocols.md +44 -2
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +117 -0
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +50 -0
- package/package.json +5 -2
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/CHANGELOG.md +37 -0
- package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +44 -0
- package/plugins/fh-meta/skills/fh/SKILL.md +31 -0
- package/plugins/fh-meta/skills/goal-quench/SKILL_detail.md +1 -1
- package/plugins/fh-meta/skills/harness-doctor/SKILL.md +7 -1
- package/plugins/fh-meta/skills/harvest-loop/SKILL.md +32 -0
- package/scripts/adapters/fixtures/mate_agent_boundary_known_negative.md +31 -0
- package/scripts/adapters/fixtures/mate_agent_boundary_known_positive.md +56 -0
- package/scripts/cluster_capability_scan.sh +18 -5
- package/scripts/digest_landing_check.sh +39 -8
- package/scripts/package_coverage_check.sh +9 -0
- package/scripts/selfcheck.sh +29 -1
- package/scripts/test_satellite_publish_gate_lanes.sh +0 -339
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "2.
|
|
14
|
+
"version": "2.6.0",
|
|
15
15
|
"description": "New in 2.2.0: BREAKING (gate): chamber step 6 now reads ACTUAL.md, not BUDGET.md — an in-flight chamber run whose actual cost sits in BUDGET.md blocks until the ACTUAL: line moves to tracks/_chamber/<slug>/ACTUAL.md (the runner prints the path). Why: BUDGET.md's pre-verdict hash IS the ordering witness, and step 6 hard-blocked until that same file changed, so every run that reached COMPLETE necessarily mutated a witnessed artifact and verify returned TAMPERED — the chamber's promotion condition was unsatisfiable by construction, not by strictness. Two roles (immutable witness / post-verdict calibration sink) had collided in one file; each was correct alone, so neither side's code showed the conflict. Also: ko-tech-writer Step 2/4-b scans are now calibration-backed (known-pair fixtures + reproducible command, shipped) — discrimination is proven, 'zero residue' is explicitly NOT; chamber lane suite 12 -> 33 including the runner x witness seam no test covered; chamber_run.sh now teaches the two-commit discipline (gate hashes and verdict hash must land in separate commits/PRs — it previously advised the opposite). New in 2.1.0: BREAKING (gate): `crossfamily: declined` in an Axes 2-3 marker now requires grounds naming a record path that RESOLVES on disk — bare `declined`, and `declined` justified by author judgment, are blocked at commit. Remedy: cite where the operator decision lives (e.g. `.. — operator declined sidecars, per knowledge/shared/rules/operational_adaptation.md`), or use `DEGRADED_PANEL_UNUSED` if a panel was reachable and you chose not to recruit it — which is what author judgment actually is. `declined` was the only enum value with no grounds requirement; a cross-family review then broke the first (vocabulary-grep) fix three ways — self-validating on the value's own token, vacuous keyword passes, and over-blocking real declinations in natural prose — so the check asserts a resolvable record instead of words. Also: standpoint axis gains `tier1b` (a STATIC read of a target repo, executed nothing) plus a decide-in-order procedure, after blind floor-tier sims graded pure cold-reads as `tier2` three rounds running; steel-quench Wave 1's sixth angle (gate-locality) gains the output-template row it never had, so a mandatory angle stops being structurally unreportable; verify-bidirectional gains category 5 (prescriptive doctrine statement); Sister Asset Protocol gains an active-adoption trigger; new resident doctrine — Mechanization Boundary, Local Execution First, Skeleton-not-Muscle, Expedition track, and this package's versioning policy. Hub meta-operations toolkit — 35 skills + 7 agents. New in 2.0.1: harness-doctor cadence hook, portability lint wired into pre-commit, branch_claim.sh claim-count-vs-tree-count warning, louder confidentiality-scan fail-open notice, fh-gate.sh missing-package.json survival, identity ① reclassified 🟢 (cross-harness adapters + relay argument channel). New in 1.4.53: `fh-codex-doctor` (npm bin) — Codex adapter drift scanner; reads the documented M1/M2/M3 skill tier map + skill/agent source and reports codex-native/adapter-required/claude-native/unclassified per unit, wired into `npm test`/`prepublishOnly` (fail-closed on unclassified Claude-native primitives). New in 1.4.49: steel-quench gains Step 0.6 Verdict-Invariance Probe (groundedness axis — a load-bearing judged gate's verdict must track behavior, not rubric phrasing; measured flip-count over cross-family paraphrases; arXiv:2605.06161 Policy Invariance anchor); multi_model_sidecar_strategy §Vendor-native harness (a model is strongest in its own vendor CLI — Claude/CC, GPT/codex, Gemini/Antigravity; a universal router degrades all of them, so it stays an autocomplete/QA sidecar, never orchestration); predelete_check.sh fail-closed rewrite; memory-hygiene A-TMA anchor. New in 1.4.48: phantom-quench + steel-quench gain external frontier anchors (arXiv:2607.02052 package-hallucination; arXiv:2607.02057 prompt-coverage-adequacy); README model-flat claim reframed from a per-release point-curve to structural invariants (operation flattens across tiers; depth tier-order fixed within a generation). New in 1.4.47: onboarding step ① surfaces the Mode D companion-store session-start load in the auto-read salience anchor (previously only in the local binding + rules, so a greeting could skip the load). New in 1.4.46: context-doctor command-output axis (route to rtk/proxy for verbose CLI stdout, complementing .claudeignore; risk-gated to token-scarce envs). New in 1.4.41: context-doctor 2026 trigger vocab (context engineering/rot/collapse) + phantom-citation hardening; hub measurement-integrity-checklist (cross-model measurement pre-flight: display-name pin/reps≥3/discriminating probe). New in 1.4.40: install-wizard queryable-wiki scaffold (INDEX + session-start read + R/W/C ingest). New in 1.4.39: auto-decorrelation (cross-family verifier sidecar recruitment) + video-ingest (capability-routed video ingestion). New in 1.4.x: verify-axis check-class taxonomy (mandatory-pass/measured/judged), no-reinvention Tier-0 inventory, 7-class failure taxonomy, Destructive-Op Gate, Wave-T (Temper), tier-floor governance, Mode D Model Notice, FC consent lane, default-Sonnet guidance. New in 1.3.0: public-surface-audit, field-harvest Mode B auto-trigger, 4-axis gate scope ext. Validated cross-CLI: Claude Code, Codex, Gemini.",
|
|
16
16
|
"source": "./plugins/fh-meta"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"name": "fh-commons",
|
|
20
|
-
"version": "2.
|
|
20
|
+
"version": "2.6.0",
|
|
21
21
|
"description": "Project-agnostic utility skills — 5 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate · ko-tech-writer) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
|
|
22
22
|
"source": "./plugins/fh-commons"
|
|
23
23
|
}
|
package/AGENTS.md
CHANGED
|
@@ -152,6 +152,17 @@ Because non-Claude runtimes do not auto-load Claude path rules, apply these rule
|
|
|
152
152
|
misjudged the force-push surface three times; the symmetric single-endpoint case is untested,
|
|
153
153
|
but the same failure shape applies.
|
|
154
154
|
|
|
155
|
+
9. **Shared checkout:** when more than one session works in one clone, the working tree and `HEAD`
|
|
156
|
+
are shared, so a branch switch moves the other session's ground. Before `git switch`, read the
|
|
157
|
+
live head with `git branch --show-current`; immediately after cutting a branch, run
|
|
158
|
+
`git log main..HEAD --oneline` — a non-empty result means the branch was cut on top of someone
|
|
159
|
+
else's commits, and a later squash of the parent closes the child PR. The claim files under
|
|
160
|
+
`.git/fh-claims/` are a snapshot written at claim time, not a lock: they do not update when
|
|
161
|
+
somebody moves a branch, so they answer a different question than the two commands above.
|
|
162
|
+
Record a switch with `scripts/branch_claim.sh claim`; the pre-commit hook blocks a commit whose
|
|
163
|
+
claim does not match the live head. In a shared checkout `git add -A` and `git stash` both reach
|
|
164
|
+
the whole tree, including another session's uncommitted work — stage by explicit path instead.
|
|
165
|
+
|
|
155
166
|
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Mandatory-checklist-procedures`
|
|
156
167
|
> — exact supporting procedures and canonical doctrine links — read when any checklist trigger fires.
|
|
157
168
|
|
package/CATALOG.md
CHANGED
|
@@ -4,6 +4,47 @@ AI reads this file first when searching past work. Open individual files for det
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## 2026-08-20 — Seven canonical `knowledge/` docs were missing from this index
|
|
8
|
+
|
|
9
|
+
Found by the 30-day `harness-doctor` cadence run. Seven files under `knowledge/` had **zero**
|
|
10
|
+
CATALOG entries, so the CATALOG-first recall path (CLAUDE.md §Autonomous Initiative — *"read
|
|
11
|
+
`CATALOG.md`, identify candidates by tag/date, then open only those files"*) could not reach them
|
|
12
|
+
at all. Measured with a live control in the same run (`harness_6axis_framework` → 2 hits, so the
|
|
13
|
+
grep was alive; each of the seven → 0).
|
|
14
|
+
|
|
15
|
+
🟥 **The worst of the seven is `fh_three_layer_canon.md`** — CLAUDE.md names it a *mandatory*
|
|
16
|
+
pre-read before naming, re-scoping, or citing the 3-layer canon, and it was unreachable from the
|
|
17
|
+
index that the recall protocol reads first. A mandatory document that the lookup path cannot find
|
|
18
|
+
is, for any session that does not already know its filename, indistinguishable from absent.
|
|
19
|
+
|
|
20
|
+
- `knowledge/shared/harness-core/fh_three_layer_canon.md` — #canon, #3-stage, #4-engines,
|
|
21
|
+
#5-identities, #6-axis. The 3-layer canon (3-stage process · 4 engines · 5 identities) and the
|
|
22
|
+
definition of the **six verification axes** (ⓐ계열 · ⓑ입장 · ⓒ격리 그라운딩 · ⓓ3자대면 ·
|
|
23
|
+
ⓔ첫실사용 · ⓕ되돌림) that stage ③ actually consists of. **Read before citing any of the three.**
|
|
24
|
+
- `knowledge/shared/harness-core/capability_composition_contract.md` — #capability, #composition,
|
|
25
|
+
#strictest-wins. How a field harness's typed capability merges with hub constraints
|
|
26
|
+
(strictest-wins regardless of layer; an untyped or silent channel is `HARNESS_ERROR`, never PASS).
|
|
27
|
+
- `knowledge/shared/harness-core/dispatch_conditional_prohibition.md` — #dispatch, #subagent,
|
|
28
|
+
#conditional. The measured resolution order behind the runtime's *"do not call the AgentTool
|
|
29
|
+
unless the user requested it"* line — why it is a **conditional** a request satisfies, not an
|
|
30
|
+
override. Carries the calibrated where-it-is-not table and reproduction commands.
|
|
31
|
+
- `knowledge/shared/harness-core/agents_md_runtime_details.md` — #codex, #agents-md, #entrypoint.
|
|
32
|
+
Runtime detail for the non-Claude entry point.
|
|
33
|
+
- `knowledge/shared/harness-core/harness_terminal_correlation_and_recommendations.md` —
|
|
34
|
+
#correlation, #terminal, #recommendations.
|
|
35
|
+
- `knowledge/shared/rules/knowledge_layer_seam.md` — #seam, #org-knowledge, #unwired. Names FH's own
|
|
36
|
+
unwired candidates at the knowledge-layer seam (including `steel-quench` Step 0.35).
|
|
37
|
+
- `knowledge/shared/rules/multi_session_close_protocol.md` — #close, #multi-session, #parallel.
|
|
38
|
+
Canonical close discipline when two or more sessions run on one harness — order, discriminators,
|
|
39
|
+
write discipline. **Not replaceable by a `gh pr list` re-check** (that structurally misses deltas
|
|
40
|
+
with no PR).
|
|
41
|
+
|
|
42
|
+
- Decision: indexed as one consolidated entry rather than seven, because the finding is a *class*
|
|
43
|
+
(index drift on `knowledge/`), and splitting it would hide that they were all missed the same way.
|
|
44
|
+
- Open: nothing mechanically prevents the next `knowledge/` file from landing unindexed. A
|
|
45
|
+
`knowledge/**` → CATALOG coverage check is a candidate, not built (recurrence N=1 as a measured
|
|
46
|
+
class; the repo's own bar is N≥3 or a second surface before mechanizing).
|
|
47
|
+
|
|
7
48
|
## 2026-08-15 — Global positioning & distribution roadmap (Homebrew/npm compatibility)
|
|
8
49
|
|
|
9
50
|
- **New doc** (`knowledge/shared/harness-core/fh_global_positioning_and_distribution_roadmap.md`):
|
package/CLAUDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# forge-harness — Persistent Knowledge Hub
|
|
2
2
|
|
|
3
|
-
> **This file is the operational ruleset for AI (Claude Code).** For human-facing guidance, see `README.md`. For command reference, see `CHEATSHEET.md`.
|
|
3
|
+
> **This file is the operational ruleset for AI (Claude Code).** For human-facing guidance, see `README.md`. For command reference, see `CHEATSHEET.md`. **For a first-time user asking «how do I use this»**, the answer is `docs/USER_GUIDE.md` — not CHEATSHEET (that is a reference to look things up in, not a document to read through). Blind floor-tier sim 2026-08-19 named exactly this: the header alone routes a beginner to CHEATSHEET, and only reading `fh_detail_protocols.md` corrects it.
|
|
4
4
|
>
|
|
5
5
|
```
|
|
6
6
|
forge-harness/
|
|
@@ -457,17 +457,42 @@ Simplification guard: trivial denials with one obvious fix → state block + sin
|
|
|
457
457
|
|
|
458
458
|
- **New user** (no session files AND no mapped project tracks under `tracks/` — fresh clone/install; **any underscore-prefixed dir** (`tracks/_*` — `_meta`/`_audit`/`_contrib`/`_chamber`…) doesn't count, general rule not a closed list — `_chamber` holds incubation chamber runs, never mapped projects): 2-door starter, never the returning menu —
|
|
459
459
|
|
|
460
|
-
> 🐿️ **Welcome to FH.** *Looks like you're new here!
|
|
460
|
+
> 🐿️ **Welcome to FH.** *Looks like you're new here! What would you like to do?*
|
|
461
|
+
> - **① Create your first project** — guided
|
|
462
|
+
> - **② Map an existing project**
|
|
463
|
+
> - **📖 Read the guide / ask me anything**
|
|
464
|
+
>
|
|
465
|
+
> *…and I can run `/install-wizard` to finish initial setup.*
|
|
461
466
|
|
|
462
467
|
- **Returning user** (session files OR mapped project tracks exist): fixed 4-door menu —
|
|
463
468
|
|
|
464
|
-
> 🐿️ **Welcome back to FH.**
|
|
469
|
+
> 🐿️ **Welcome back to FH.** *What would you like to start?*
|
|
470
|
+
> - **① Map a project**
|
|
471
|
+
> - **② Create a new project**
|
|
472
|
+
> - **③ Accelerate or diagnose a mapped project** (work · Full-Harness · skills/agents/plugins · 진단) — {field candidates}
|
|
473
|
+
> - **④ Cross-project synergy**
|
|
474
|
+
> - **📖 Guide / Q&A**
|
|
465
475
|
>
|
|
466
476
|
> (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.")
|
|
467
477
|
|
|
468
|
-
|
|
478
|
+
🟥 **한 줄로 이어붙이지 마라 — 문은 한 줄에 하나다** (운영자 지적 2026-08-20). `·` 로 이어붙인
|
|
479
|
+
한 줄짜리 메뉴는 터미널 폭에서 임의로 접혀서 **어디까지가 한 문인지 눈으로 안 갈린다**. 세로
|
|
480
|
+
목록은 G-GREET-02(🐿️+환영문 **같은 줄**)·G-GREET-03(고정 4문)·G-GREET-05(문구 리터럴)를
|
|
481
|
+
**셋 다 그대로 만족한다** — 그 프로브들이 박은 것은 문 집합·리터럴·환영문 줄이지 **메뉴의 줄
|
|
482
|
+
수가 아니다**. 세로로 펴는 것은 렌더 층이고 판정 층이 아니다.
|
|
483
|
+
|
|
484
|
+
**📖 문 (비번호, 항상)**: `docs/USER_GUIDE.md` 를 **띄우고**, FH 사용법 문답을 받는다.
|
|
485
|
+
🟥 **번호를 늘리지 않는다** — ①~④ 는 고정 4문이고 🔧 만 비번호 예외였다(`fh_detail_protocols.md`
|
|
486
|
+
Step 2 가 문 집합 고정을 명시). 가이드는 「작업의 시작」이 아니라 「작업 전 참조」라 성격이 다르다.
|
|
487
|
+
🟥 **띄운다 = 경로 + 3줄 목차 출력이 먼저다.** 전문을 인라인으로 뱉지 마라 — 매 세션 토큰을
|
|
488
|
+
태우는 형태이고, 이 문이 존재하는 이유가 그걸 안 하기 위해서다. opener(`open`/`xdg-open`/`start`)는
|
|
489
|
+
`uname -s` 로 분기해 **제안만** 하고, 없으면 조용히 넘어간다(경로는 이미 나갔으므로 손실 0).
|
|
490
|
+
⚠️ `open` 은 macOS 전용이다 — FH 는 npm 배포물이라 그걸 기본값으로 두면 안 된다.
|
|
491
|
+
운용 상세(허용 코퍼스 · 모르면 「못 찾음」)는 `/fh` Step 3.5.
|
|
492
|
+
|
|
493
|
+
Render conditions: ①②③ always (③'s candidates composed live) · ④ only when **2+ project tracks** exist (underscore meta dirs don't count) — synergy findings flow back into each project, and may *propose* an FH contribution (`/field-harvest` → `tracks/_contrib`) as an **outcome of findings, never a standing door**.
|
|
469
494
|
|
|
470
|
-
- **Developer door (unnumbered, outside the menu)**: when **FH-dev state exists** (session card `tracks/_meta/reference_next_session_starter.md` · open `fh_signal_*` files · `CLAUDE.local.md`), append
|
|
495
|
+
- **Developer door (unnumbered, outside the menu)**: when **FH-dev state exists** (session card `tracks/_meta/reference_next_session_starter.md` · open `fh_signal_*` files · `CLAUDE.local.md`), append it as **its own row at the bottom of the menu list**, not tacked onto another line: `- **🔧 FH self-development** — {FH worklist}`. The hub operator always has this state, so the owner always sees it — no flag needed. Without dev state the door is **silently absent**; the user typing `developer` / `개발자` **as a standalone utterance or menu reply** (not a substring of a task sentence) opens it on demand (routes to `docs/CONTRIBUTING.md` + `tracks/_contrib/` + open `fh_signal_*` items).
|
|
471
496
|
|
|
472
497
|
Compose session-card candidates **into door ③ (field) and the 🔧 door (FH-dev)**, never as a raw priority dump that replaces the menu. An urgent open item (time-windowed handoff · blocking external deadline) outranks the menu; an explicit task utterance skips it entirely (see Guards below); cadence reminders (§Cadence Rules) ride below it, they don't displace it. Canonical source: `fh_detail_protocols.md` Step 2 — keep branch tests and door labels in sync.
|
|
473
498
|
|
|
@@ -598,10 +623,19 @@ written — a static read was recorded as `tier2` because `tier1b` did not yet e
|
|
|
598
623
|
gets filled by the next one up rather than staying empty.) Naming note: this collides in
|
|
599
624
|
English with FH's own persona/viewpoint sense of "standpoint" (`fh-meta:beginner`/`main-player`/
|
|
600
625
|
`expert`) — a different axis (which persona reviews, not whose repo is ground truth); kept as-is,
|
|
601
|
-
not renamed, but do not conflate the two. **
|
|
602
|
-
pre-commit hook or fixture suite validates this field yet
|
|
603
|
-
|
|
604
|
-
|
|
626
|
+
not renamed, but do not conflate the two. 🟥 **CORRECTED 2026-08-20 — this paragraph used to say
|
|
627
|
+
`standpoint:` was "Prose-only today — no pre-commit hook or fixture suite validates this field yet".
|
|
628
|
+
That is FALSE and was false in this same file**: `validate_standpoint_leg()` is defined at
|
|
629
|
+
`templates/.git-hooks/pre-commit:798` and called at `:1575`, and its fixture suite
|
|
630
|
+
`scripts/test_marker_standpoint_lanes.sh` is wired through `scripts/selfcheck.sh:531`. §자기 대조
|
|
631
|
+
above already said so (PR #429), so **one file carried both claims at once** and a reader landed on
|
|
632
|
+
whichever they reached first. Found by the residency-ledger pass, not by a lane — no check compares
|
|
633
|
+
a rule's self-description against the machinery it describes, which is why a stale "we have not
|
|
634
|
+
built this yet" is the quietest form of drift: it reads as honest modesty and it suppresses use of a
|
|
635
|
+
control that already exists. **What is validated is FORM, not truth** — the hook checks that the
|
|
636
|
+
value is inside the closed enum and that its grounds are non-empty; whether `tier2` is *true* is
|
|
637
|
+
still self-attested, exactly as with `crossfamily:`. That residual is real and unchanged; it is the
|
|
638
|
+
sentence above that was wrong, not the caution. Three artifacts, one carrying two
|
|
605
639
|
independent trials (forge-harness PR #368, a sibling field harness's PR #8 reps=3 and its
|
|
606
640
|
known-answer trial, qasp-dev PR #161 as adjacent corroboration) crossed this repo's own evidence
|
|
607
641
|
bar the same day this was formalized — including one caught by this session's own qasp PR #161
|
|
@@ -1249,7 +1283,8 @@ Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
|
|
|
1249
1283
|
--state open` cross-repo). Classify, **surface-not-auto**: **self-mergeable** PR (own repo,
|
|
1250
1284
|
checks green) → *propose merge now* (never auto-merge — HITL); **awaiting-external** →
|
|
1251
1285
|
*surface for tracking only*. (Origin PR#111 + count-consistency pairing → §detail below.)
|
|
1252
|
-
→ ② If FH assets changed
|
|
1286
|
+
→ ② If FH assets changed, **or `close_retro` is granted**: harvest-loop
|
|
1287
|
+
(후자는 Step 0-d 세션 회고 — 자산 미변경 세션에도 회고는 의미가 있다)
|
|
1253
1288
|
→ ③ Sync local/gitignored session state to your durable companion store, if you keep one
|
|
1254
1289
|
→ ④ Memory hygiene — update stale entries + record new session findings.
|
|
1255
1290
|
**Deliberately unmechanized, and stated so rather than left ambiguous**: hygiene is a judged
|
package/README.ja.md
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<a href="
|
|
7
|
-
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
6
|
+
<a href="https://github.com/walkinglabs/awesome-harness-engineering#coding-agent-harnesses"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Harness Engineering"></a>
|
|
8
7
|
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
9
8
|
<a href="https://github.com/chrono-meta/forge-harness/issues/72"><img src="https://img.shields.io/badge/Codex-beta_·_help_validate-f59e0b.svg" alt="Codex-compatible beta — help validate (issue #72)"></a>
|
|
10
9
|
<a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
|
|
11
10
|
<a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
|
|
11
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
12
|
+
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
12
13
|
<a href="https://github.com/chrono-meta/forge-harness/stargazers"><img src="https://img.shields.io/github/stars/chrono-meta/forge-harness?style=social" alt="GitHub stars"></a>
|
|
13
14
|
</p>
|
|
14
15
|
|
|
@@ -137,7 +138,7 @@ cd ~/projects/{your-project} && claude
|
|
|
137
138
|
|---|---|
|
|
138
139
|
| 個人開発者、プロジェクト1つ、まず試したい | [`templates/starter_profile.md`](templates/starter_profile.md) — コマンド1つ、厳選された最初の5つのスキル |
|
|
139
140
|
| プロジェクトが複数、複利で積み上がるハブが欲しい | ハブをクローン(上のクイックスタート) |
|
|
140
|
-
| CI / 非 Claude ランタイム、ゲートだけ欲しい | `npx @chrono-meta/fh-gate`(インストール不要のガバナンスゲート) |
|
|
141
|
+
| CI / 非 Claude ランタイム、ゲートだけ欲しい | `npx --package @chrono-meta/fh-gate fh-gate`(インストール不要のガバナンスゲート) |
|
|
141
142
|
| `npx`/`npm` より `brew` がいい | `brew tap chrono-meta/forge-harness && brew install forge-harness` — 内容は100%同一、インストール体験だけが違います(コミュニティ tap; まだ Homebrew Core には入っていないので、先に tap しないと `brew search` では見つかりません) |
|
|
142
143
|
|
|
143
144
|
---
|
package/README.ko.md
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<a href="
|
|
7
|
-
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
6
|
+
<a href="https://github.com/walkinglabs/awesome-harness-engineering#coding-agent-harnesses"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Harness Engineering"></a>
|
|
8
7
|
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
9
8
|
<a href="https://github.com/chrono-meta/forge-harness/issues/72"><img src="https://img.shields.io/badge/Codex-beta_·_help_validate-f59e0b.svg" alt="Codex-compatible beta — help validate (issue #72)"></a>
|
|
10
9
|
<a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
|
|
11
10
|
<a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
|
|
11
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
12
|
+
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
12
13
|
<a href="https://github.com/chrono-meta/forge-harness/stargazers"><img src="https://img.shields.io/github/stars/chrono-meta/forge-harness?style=social" alt="GitHub stars"></a>
|
|
13
14
|
</p>
|
|
14
15
|
|
|
@@ -135,7 +136,7 @@ cd ~/projects/{your-project} && claude
|
|
|
135
136
|
|---|---|
|
|
136
137
|
| 1인 개발자, 프로젝트 하나, 일단 써보는 중 | [`templates/starter_profile.md`](templates/starter_profile.md) — 명령 하나, 엄선된 첫 5개 스킬 |
|
|
137
138
|
| 프로젝트 여럿, 복리 허브를 원함 | 허브 클론(위 빠른 시작) |
|
|
138
|
-
| CI / 비-Claude 런타임, 게이트만 | `npx @chrono-meta/fh-gate` (무설치 거버넌스 게이트) |
|
|
139
|
+
| CI / 비-Claude 런타임, 게이트만 | `npx --package @chrono-meta/fh-gate fh-gate` (무설치 거버넌스 게이트) |
|
|
139
140
|
| `npx`/`npm`보다 `brew`를 선호 | `brew tap chrono-meta/forge-harness && brew install forge-harness` — 100% 동일한 내용, 설치 UX만 다름(커뮤니티 탭; 아직 Homebrew Core에 없어서 탭을 먼저 추가하지 않으면 `brew search`로는 안 잡힙니다) |
|
|
140
141
|
|
|
141
142
|
---
|
package/README.md
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<a href="
|
|
7
|
-
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
6
|
+
<a href="https://github.com/walkinglabs/awesome-harness-engineering#coding-agent-harnesses"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Harness Engineering"></a>
|
|
8
7
|
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
9
8
|
<a href="https://github.com/chrono-meta/forge-harness/issues/72"><img src="https://img.shields.io/badge/Codex-beta_·_help_validate-f59e0b.svg" alt="Codex-compatible beta — help validate (issue #72)"></a>
|
|
10
9
|
<a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
|
|
11
10
|
<a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
|
|
11
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
12
|
+
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
12
13
|
<a href="https://github.com/chrono-meta/forge-harness/stargazers"><img src="https://img.shields.io/github/stars/chrono-meta/forge-harness?style=social" alt="GitHub stars"></a>
|
|
13
14
|
</p>
|
|
14
15
|
|
|
@@ -135,7 +136,7 @@ cd ~/projects/{your-project} && claude
|
|
|
135
136
|
|---|---|
|
|
136
137
|
| Solo dev, one project, just trying it | [`templates/starter_profile.md`](templates/starter_profile.md) — one command, curated first-five skills |
|
|
137
138
|
| Multiple projects, want the compounding hub | Clone the hub (quickstart above) |
|
|
138
|
-
| CI / non-Claude runtime, gates only | `npx @chrono-meta/fh-gate` (zero-install governance gate) |
|
|
139
|
+
| CI / non-Claude runtime, gates only | `npx --package @chrono-meta/fh-gate fh-gate` (zero-install governance gate) |
|
|
139
140
|
| Prefer `brew` over `npx`/`npm` | `brew tap chrono-meta/forge-harness && brew install forge-harness` — same 100%-parity content, different install UX (community tap; not yet in Homebrew Core, so `brew search` won't find it without the tap first) |
|
|
140
141
|
|
|
141
142
|
---
|
package/README.zh.md
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<a href="
|
|
7
|
-
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
6
|
+
<a href="https://github.com/walkinglabs/awesome-harness-engineering#coding-agent-harnesses"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Harness Engineering"></a>
|
|
8
7
|
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
9
8
|
<a href="https://github.com/chrono-meta/forge-harness/issues/72"><img src="https://img.shields.io/badge/Codex-beta_·_help_validate-f59e0b.svg" alt="Codex-compatible beta — help validate (issue #72)"></a>
|
|
10
9
|
<a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
|
|
11
10
|
<a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
|
|
11
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
12
|
+
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
12
13
|
<a href="https://github.com/chrono-meta/forge-harness/stargazers"><img src="https://img.shields.io/github/stars/chrono-meta/forge-harness?style=social" alt="GitHub stars"></a>
|
|
13
14
|
</p>
|
|
14
15
|
|
|
@@ -130,7 +131,7 @@ cd ~/projects/{your-project} && claude
|
|
|
130
131
|
|---|---|
|
|
131
132
|
| 单人开发者,一个项目,只想先试试 | [`templates/starter_profile.md`](templates/starter_profile.md) —— 一条命令,一份精选的头五个技能 |
|
|
132
133
|
| 有多个项目,想要那个复利累积的中枢 | 克隆中枢(见上面的快速上手) |
|
|
133
|
-
| CI / 非 Claude 运行时,只要门禁 | `npx @chrono-meta/fh-gate`(零安装的治理门禁) |
|
|
134
|
+
| CI / 非 Claude 运行时,只要门禁 | `npx --package @chrono-meta/fh-gate fh-gate`(零安装的治理门禁) |
|
|
134
135
|
| 比起 `npx`/`npm` 更习惯 `brew` | `brew tap chrono-meta/forge-harness && brew install forge-harness` —— 内容 100% 一致,只是安装体验不同(社区 tap;尚未进入 Homebrew Core,所以不先加 tap 的话 `brew search` 找不到它) |
|
|
135
136
|
|
|
136
137
|
---
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# forge-harness 사용 가이드
|
|
2
|
+
|
|
3
|
+
> **이 문서는 「읽는」 문서다.** 명령을 찾으려면 `CHEATSHEET.md`, 과거 작업을 찾으려면
|
|
4
|
+
> `CATALOG.md`, FH 가 무엇이고 왜 작동하는지는 `README.md` 를 봐라. 여기는 **처음 쓰는 사람이
|
|
5
|
+
> 첫 세션을 완주하는 것**만 다룬다.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 0. 먼저 — 지금 내 상태가 무엇인가
|
|
10
|
+
|
|
11
|
+
FH 는 세 가지 상태로 쓸 수 있고, **되는 일이 다르다.** 아래를 그대로 실행해서 확인해라.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
ls CLAUDE.md knowledge/ plugins/ 2>/dev/null # 있으면 → 클론했다 (A/B)
|
|
15
|
+
claude plugin list | grep fh-meta # 있으면 → 플러그인이 깔렸다
|
|
16
|
+
ls tracks/ 2>/dev/null # 디렉토리가 있으면 → 프로젝트가 매핑돼 있다
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
| 상태 | 무엇이 되나 | 무엇이 안 되나 |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| **클론 + 플러그인** | 전부 | — |
|
|
22
|
+
| **클론만** | 규칙·지식·게이트(훅) | 슬래시 커맨드(`/harness-doctor` 등) |
|
|
23
|
+
| **플러그인만** | 스킬 호출 | `knowledge/` 정본, 세션 기록(`tracks/`), 자체 게이트 |
|
|
24
|
+
|
|
25
|
+
셋 다 아니면 `README.md` 의 설치 절을 먼저 보고 오면 된다.
|
|
26
|
+
확신이 안 서면 **`/install-doctor`** 를 부르면 기계가 대신 판정해준다.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 1. 첫 세션 — 실제로 무엇을 타이핑하나
|
|
31
|
+
|
|
32
|
+
**「안녕」 한 마디면 된다.** 인사가 온보딩 트리거다(어느 언어든).
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
당신: 안녕
|
|
36
|
+
FH : 🐿️ Welcome to FH. ① 첫 프로젝트 만들기 · ② 기존 프로젝트 매핑 …
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
문이 뜨면 **번호를 말하거나 그냥 하고 싶은 일을 문장으로 말하면 된다.** 문은 안내지 강제가 아니다.
|
|
40
|
+
바로 일을 시키고 싶으면 인사를 건너뛰고 작업을 말해도 된다 — 그러면 메뉴는 안 뜬다.
|
|
41
|
+
|
|
42
|
+
**문이 하는 일**
|
|
43
|
+
|
|
44
|
+
| 문 | 언제 고르나 |
|
|
45
|
+
|---|---|
|
|
46
|
+
| ① 프로젝트 매핑 | 이미 있는 레포를 FH 가 알게 한다. 여기서부터 대부분 시작한다 |
|
|
47
|
+
| ② 새 프로젝트 | 아직 없는 것을 처음부터 |
|
|
48
|
+
| ③ 가속/진단 | 매핑된 프로젝트에 대해 «개선해줘» · «진단해줘» |
|
|
49
|
+
| ④ 크로스 시너지 | 프로젝트가 2개 이상일 때만 뜬다 |
|
|
50
|
+
| 🔧 FH 자체 개발 | FH 를 고치는 사람에게만 뜬다 |
|
|
51
|
+
| 📖 가이드 · Q&A | 이 문서를 열거나, FH 사용법을 묻는다 |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 2. 알아두면 헷갈리지 않는 것 넷
|
|
56
|
+
|
|
57
|
+
**ⓐ FH 는 「대신 해주는」 게 아니라 「틀리기 어렵게」 만든다.**
|
|
58
|
+
그래서 가끔 **막는다.** 커밋이 막히면 고장이 아니라 게이트가 일한 것이고, 화면에 **무엇을 하면
|
|
59
|
+
풀리는지**가 같이 뜬다. 그 문구를 그대로 따르면 된다.
|
|
60
|
+
|
|
61
|
+
**ⓑ 「없음」과 「못 쟀음」을 구별해서 말한다.**
|
|
62
|
+
FH 는 확인 못 한 것을 0 으로 적지 않는다. `UNMEASURED` · `SKIPPED` · `못 쟀다` 같은 말이 보이면
|
|
63
|
+
**그건 실패가 아니라 정직한 공백**이다. 숫자가 안 나온 게 아니라 안 나왔다고 말하는 중이다.
|
|
64
|
+
|
|
65
|
+
**ⓒ 비가역한 일 앞에서는 반드시 멈춘다.**
|
|
66
|
+
공개 전환 · 삭제 · 히스토리 재작성. 되돌릴 수 있는 일(커밋 등)은 경고만 하고 넘어간다.
|
|
67
|
+
**이 둘의 차이가 FH 설계의 중심**이다.
|
|
68
|
+
|
|
69
|
+
**ⓓ 기록은 자동으로 쌓인다.**
|
|
70
|
+
`tracks/` 는 gitignored 라 공개 레포에 안 올라간다. 세션이 끝날 때 카드가 갱신되고,
|
|
71
|
+
다음 세션이 그걸 읽고 이어간다. 「지난번에 뭐 했지」라고 물으면 거기서 찾아 답한다.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 3. 자주 막히는 곳 (FAQ)
|
|
76
|
+
|
|
77
|
+
**Q. 커밋했는데 `🚫 BLOCKED` 가 뜬다.**
|
|
78
|
+
FH 자산(규칙·스킬·스크립트 등)을 고치면 4축 검증 마커를 요구한다. 화면에 **정확히 무엇을 어디에
|
|
79
|
+
쓰라고** 나온다. 우회(`--no-verify`)는 같은 훅에 있는 삭제 방지 게이트까지 같이 끄니 쓰지 마라.
|
|
80
|
+
|
|
81
|
+
**Q. 슬래시 커맨드가 안 먹는다.**
|
|
82
|
+
플러그인이 안 깔렸거나 옛 버전이다. `claude plugin list` 로 버전을 보고, 레포 `package.json` 의
|
|
83
|
+
버전과 다르면 `claude plugin update fh-meta@forge-harness` 후 재시작해라.
|
|
84
|
+
**등록됐다 ≠ 최신이다** — 이건 실제로 자주 난다.
|
|
85
|
+
|
|
86
|
+
**Q. 훅이 안 도는 것 같다.**
|
|
87
|
+
`git config core.hooksPath` 가 `templates/.git-hooks` 를 가리켜야 한다. 비어 있으면
|
|
88
|
+
`/install-wizard` 를 다시 돌려라(멱등이다).
|
|
89
|
+
|
|
90
|
+
**Q. 플러그인만 깔면 뭐가 없나?**
|
|
91
|
+
`knowledge/` 정본 · `tracks/` 세션 기록 · 이 레포 자체 게이트. 스킬은 돈다.
|
|
92
|
+
|
|
93
|
+
**Q. `tracks/` 는 왜 gitignored 인가?**
|
|
94
|
+
세션 기록엔 로컬 경로·프로젝트 이름 같은 개인 정보가 섞인다. 공개 레포에 안 올라가는 게 기본이고,
|
|
95
|
+
따로 보관하고 싶으면 개인 저장소를 붙이면 된다.
|
|
96
|
+
|
|
97
|
+
**Q. 「진단해줘」와 「개선해줘」는 뭐가 다른가?**
|
|
98
|
+
같은 문이다(③). FH 가 기존 검사들을 모아 **M/S/R 로 등급 매긴 목록**을 주고, **자동으로 안 고친다.**
|
|
99
|
+
무엇을 할지는 사람이 고른다.
|
|
100
|
+
|
|
101
|
+
**Q. 토큰이 너무 든다.**
|
|
102
|
+
`/context-doctor` 를 불러라. 무엇이 상주 중이고 무엇을 뺄 수 있는지 진단한다.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 4. 더 읽을 것
|
|
107
|
+
|
|
108
|
+
| 알고 싶은 것 | 어디 |
|
|
109
|
+
|---|---|
|
|
110
|
+
| 명령·트리거 문구 전체 | `CHEATSHEET.md` |
|
|
111
|
+
| FH 가 무엇이고 왜 작동하나 | `README.md` |
|
|
112
|
+
| 용어 | `knowledge/shared/GLOSSARY.md` |
|
|
113
|
+
| 예전에 무슨 작업을 했나 | `CATALOG.md` |
|
|
114
|
+
| 기여하기 | `docs/CONTRIBUTING.md` |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
*이 문서가 답을 안 주면 그냥 물어봐라 — FH 는 위 문서들을 근거로 답하고, **없으면 없다고 말한다.***
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: FH Platform Sustainability — Plan B + Simplification Criteria
|
|
3
|
+
type: strategy
|
|
4
|
+
date: 2026-05-18
|
|
5
|
+
tags: [sustainability, plan-b, simplification-gate, scenario]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# FH Platform Sustainability
|
|
9
|
+
|
|
10
|
+
> **Purpose**: Document how forge-harness survives and evolves in scenarios where the Anthropic official ecosystem expands. Describes simplification gate criteria and meta-harness specification principles together.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. FH Survival Strategy Per Anthropic Official Ecosystem Expansion Scenario
|
|
15
|
+
|
|
16
|
+
As Anthropic develops Claude Code, some FH functions may overlap with default features. This section states FH's differentiation points and survival strategy for each scenario.
|
|
17
|
+
|
|
18
|
+
### Scenario A: Anthropic official skill marketplace launches
|
|
19
|
+
|
|
20
|
+
**Risk**: If Anthropic operates an official skill marketplace, FH's plugin distribution function could be replaced.
|
|
21
|
+
|
|
22
|
+
**FH differentiation**:
|
|
23
|
+
- **Organization-specific domain curation**: Generic skills in the official market vs FH's optimized combinations for your organization's specific infrastructure — irreplaceable
|
|
24
|
+
- **Organizational context preservation**: `tracks/` session history and `knowledge/` domain knowledge are organization-specific assets — cannot be transferred to the official market
|
|
25
|
+
- **Federated market role**: FH becomes a sub-channel (specialized marketplace) of the official market → actually strengthens canonical source positioning
|
|
26
|
+
|
|
27
|
+
**Strategy**: When official market launches, use `marketplace-gate` skill to select FH assets worth registering in the official market → contribute to the official market in reverse.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
### Scenario B: Claude Code harness diagnostic features built-in
|
|
32
|
+
|
|
33
|
+
**Risk**: Features similar to `harness-doctor` and `context-doctor` may be added as Claude Code default features.
|
|
34
|
+
|
|
35
|
+
**FH differentiation**:
|
|
36
|
+
- **Organization context-specific diagnosis**: Default features are generic — FH has organization-specific diagnostic layers (your GHE structure, network policies, etc.)
|
|
37
|
+
- **Three-Doctor Loop**: `harness-doctor` + `context-doctor` + `sim-conductor` closed-loop connection is a system, not a single feature — not replaceable by one default feature
|
|
38
|
+
- **L4~L5 layers**: Field project connection diagnosis (L4) + skill activity, context fit, and effect indicators (L5) are FH-unique layers
|
|
39
|
+
|
|
40
|
+
**Strategy**: Delegate L1~L3 that overlap with default features to defaults, and FH focuses on L4·L5 organization-specific layers.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
### Scenario C: Organization-internal marketplace newly created
|
|
45
|
+
|
|
46
|
+
**Risk**: If an internal official marketplace is created by your organization's leadership, FH's internal distribution role could be replaced.
|
|
47
|
+
|
|
48
|
+
**FH differentiation → FH becomes canonical source**:
|
|
49
|
+
- FH = the **original input** for the internal marketplace. Verified skills originate from FH → the market is a distribution channel
|
|
50
|
+
- `marketplace-gate` skill already performs pre-registration 5-point suitability gate — can naturally integrate with the internal market quality gate
|
|
51
|
+
- `field-harvest` feeds field patterns back to FH → plays the role of automatic supply pipeline to the internal market
|
|
52
|
+
|
|
53
|
+
**Strategy**: When internal marketplace is created, position FH as canonical source. Register FH in the internal market as an official source.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### Common principle: Replacement vs Complement judgment criteria
|
|
58
|
+
|
|
59
|
+
| Judgment criterion | Replaced (delegate) | Complement maintained |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| Generic function | Delegate to default feature + remove from FH | — |
|
|
62
|
+
| Organization-specific function | — | Maintain in FH + layer on top of default feature |
|
|
63
|
+
| Domain knowledge assets (`knowledge/`) | — | FH-unique — irreplaceable |
|
|
64
|
+
| Session history (`tracks/`) | — | FH-unique — irreplaceable |
|
|
65
|
+
| Cross-project synergy combinations | — | FH-unique combination — not possible with single default feature |
|
|
66
|
+
|
|
67
|
+
> **Core principle**: FH differentiates through **combination, context, and accumulation** rather than feature competition. As default features get stronger, the value of FH's combination layer grows more.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 2. Simplification Gate Criteria
|
|
72
|
+
|
|
73
|
+
> **Basis**: "A good harness gets simpler over time. If it's getting more complex, something is wrong." — CLAUDE.md throughline
|
|
74
|
+
|
|
75
|
+
### Required checks before adding new skills (RULE-AUTO-EXPANSION-GATE)
|
|
76
|
+
|
|
77
|
+
Every time a new skill addition proposal arises, the following checklist must be passed first.
|
|
78
|
+
|
|
79
|
+
**Checklist** (check in order):
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
[ ] 1. Is there an existing skill among the current skills that can cover it?
|
|
83
|
+
→ If yes: replace with existing skill SKILL.md improvement. No new creation.
|
|
84
|
+
→ If no: proceed to next check.
|
|
85
|
+
|
|
86
|
+
[ ] 2. Did it pass `/asset-placement-gate` 4-criteria judgment?
|
|
87
|
+
→ ①(cross-project value) + ④(non-duplicate with existing skills) must pass
|
|
88
|
+
→ If not passed: no new creation.
|
|
89
|
+
|
|
90
|
+
[ ] 3. Has it been demonstrated as a pattern repeated 3+ times in the field?
|
|
91
|
+
→ 1-2 time pattern: mark as candidate only + ★ 1 → create properly after 3+ accumulation
|
|
92
|
+
→ 3+ time pattern: creation possible.
|
|
93
|
+
|
|
94
|
+
[ ] 4. Can `/marketplace-gate` Check 1~5 PASS?
|
|
95
|
+
→ If FAIL items exist: revise then re-verify.
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
All 4 checks must pass to proceed with creation. **If any one fails, no creation**.
|
|
99
|
+
|
|
100
|
+
### Existing skill deprecation criteria
|
|
101
|
+
|
|
102
|
+
`harness-doctor` L5-A INACTIVE_90D judgment = Deprecation Gate entry:
|
|
103
|
+
|
|
104
|
+
| Status | Criteria | Handling |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| INACTIVE_30D | 0 times within 30 days | `/sim-conductor D skill {name}` — trigger phrase verification |
|
|
107
|
+
| INACTIVE_90D | 0 times within 90 days | Deprecation Gate — consider deprecation/consolidation |
|
|
108
|
+
| Deprecation confirmed | INACTIVE_90D + coverable skill exists | archive + remove corresponding skill SKILL.md |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 3. Meta-Harness Specification Simplification Principle
|
|
113
|
+
|
|
114
|
+
> **Core proposition**: "The meta-harness gets simpler **within its own specification (meta layer)** — do not evaluate by single project standards."
|
|
115
|
+
|
|
116
|
+
### Server room vs data center distinction
|
|
117
|
+
|
|
118
|
+
| Classification | Criteria | Application |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| **Server room** (single project) | 200-line CLAUDE.md standard | Single project exceeds 200 lines = M-tier |
|
|
121
|
+
| **Data center** (meta-harness) | Meta layer specification standard | **No line/count threshold exists.** `harness-doctor` declares meta CLAUDE.md raw line and section count **"Not a verdict"** and judges by the char-based always-loaded footprint (S > 40k · M > 80k) plus the residency ledger and the doctrine red flags (orphaned · redundant · decorative) |
|
|
122
|
+
|
|
123
|
+
`harness-doctor` L2 complexity diagnosis automatically applies this separation:
|
|
124
|
+
- Scope is decided **mechanically at the TARGET root** (`tracks/` ∧ `knowledge/` ∧ `plugins/` all present = meta),
|
|
125
|
+
never from cwd and never self-declared — a bare cwd test misclassifies every field target as meta
|
|
126
|
+
- On a meta target the line-count rows are **disabled outright**, not swapped for a larger number —
|
|
127
|
+
so `harness-doctor` cannot fire an **M-tier** on FH's own CLAUDE.md off a single-project line
|
|
128
|
+
standard. The verdict comes instead from the footprint rows, which apply to both scopes and are
|
|
129
|
+
char-based; those *can* legitimately reach M-tier, and when they do the lever is capability-level
|
|
130
|
+
(merge or retire a governance unit), never "the file is long"
|
|
131
|
+
|
|
132
|
+
### Meta-harness self-constraint prohibition
|
|
133
|
+
|
|
134
|
+
Prohibit the pattern of applying external standards (single project complexity standards) to the meta-harness to self-constrain:
|
|
135
|
+
|
|
136
|
+
- **Prohibited**: "FH has N skills, it's gotten complex → needs to be reduced" (single project standard applied)
|
|
137
|
+
- **Allowed**: "Among FH skills, some have 0 invocation records within 90 days → those skills enter Deprecation Gate" (meta layer standard applied)
|
|
138
|
+
|
|
139
|
+
🟥 **Why this section carries no numbers (2026-08-20).** It used to pin "500-line / 16 skills".
|
|
140
|
+
Both went stale (CLAUDE.md is past 1,400 lines; there are 40 skills) and — worse — the 500 was
|
|
141
|
+
**contradicted by the skill it claimed to describe**: `harness-doctor` disables the line-count row for
|
|
142
|
+
meta targets rather than raising it. That live-but-wrong number is not inert: a run once fabricated
|
|
143
|
+
`M-1 · exceeds the FH threshold of 500` and a downstream sidecar reasoned from the invented figure
|
|
144
|
+
(recurrence N=2 — `harness-doctor/SKILL.md` §"Every M/S-tier must cite the row it fired"). The skill's
|
|
145
|
+
own post-mortem grepped **itself** and found 0 hits, so it concluded the threshold was invented from
|
|
146
|
+
nothing — it never grepped the repo, where **this file was the source**. Do not re-pin a number here:
|
|
147
|
+
thresholds belong in the skill that measures them, where a citation can be quoted verbatim.
|
|
148
|
+
|
|
149
|
+
Judgment standard: **If there are no real-use problems, no simplification pressure**. Simplification is solving real-use problems, not reducing complexity.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 4. External Contribution Facilitation Structure (not one-way)
|
|
154
|
+
|
|
155
|
+
FH aims for a **bidirectional contribution structure**, not one-way distribution.
|
|
156
|
+
|
|
157
|
+
### Contribution occurrence examples
|
|
158
|
+
|
|
159
|
+
| Contribution direction | Example | Channel |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| FH → field | Skill/agent distribution, session context connection | plugin install, clone |
|
|
162
|
+
| Field → FH | Field pattern feedback (`field-harvest`) | PR |
|
|
163
|
+
| External → FH | External user contributions, cascade β | External PR / autonomous operation |
|
|
164
|
+
|
|
165
|
+
### cascade β demonstration
|
|
166
|
+
|
|
167
|
+
- An external user (not the owner) autonomously operated FH skills → caught and merged a bug in a PR
|
|
168
|
+
- Contribution from external project: owner contributed to that project → demonstrated structure where FH facilitates external contributions
|
|
169
|
+
|
|
170
|
+
**Meaning**: FH looks like a 1-contributor project but it's an **amplifier structure** where contributions to other projects occur through FH.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
*Reference: `CONTRIBUTING.md` (PR rules) · `plugins/fh-meta/skills/asset-placement-gate/SKILL.md` (new asset judgment) · `plugins/fh-meta/skills/harness-doctor/SKILL.md` (L5 activity check)*
|
|
@@ -74,4 +74,29 @@
|
|
|
74
74
|
|
|
75
75
|
---
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
## Notation — `[[wikilink]]` in FH documents
|
|
78
|
+
|
|
79
|
+
FH documents (this package included) use `[[some_note_name]]` to cite a **provenance note in the
|
|
80
|
+
author's local memory store** — the per-project memory directory a Claude Code session keeps outside
|
|
81
|
+
the repository. Measured 2026-08-20 across the npm-published file set: **156 shipped `.md` files
|
|
82
|
+
carry 98 such references to 59 distinct targets, and none of those targets exist inside the
|
|
83
|
+
package** (hand-verified sample: `CLAUDE.md` cites `[[feedback_not_found_is_not_zero_family]]`,
|
|
84
|
+
which resolves only at the operator's memory path — `git ls-files` returns 0).
|
|
85
|
+
|
|
86
|
+
**So, for a reader who is not the author, these are not navigable links.** They are *attribution
|
|
87
|
+
markers*: they say "this sentence came from a recorded failure, not from taste", and they name that
|
|
88
|
+
failure so it can be discussed. Read them as footnote labels, not as paths.
|
|
89
|
+
|
|
90
|
+
🟥 **Do not treat one as a broken reference or try to repair it.** They are deliberately not
|
|
91
|
+
vendored — a memory store is per-operator, session-scoped, and frequently contains project-private
|
|
92
|
+
material, so shipping it would be a residency violation, not a fix. Equally, do not read a
|
|
93
|
+
`[[…]]`-cited claim as *unsourced*: the surrounding text always states the claim in full, and the
|
|
94
|
+
marker is provenance on top of it, never a substitute for it.
|
|
95
|
+
|
|
96
|
+
The convention is scoped to memory notes. A pointer to a file that **does** ship is written as an
|
|
97
|
+
ordinary path (`knowledge/shared/harness-core/…`), and those are checked mechanically by the
|
|
98
|
+
detail-pointer resolution gate at commit time.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
*Updated: 2026-08-20*
|