@chrono-meta/fh-gate 1.4.56 → 1.4.58
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/CLAUDE.md +26 -9
- package/README.md +13 -0
- package/knowledge/shared/harness-core/claude_md_gate_details.md +20 -0
- package/knowledge/shared/harness-core/fh_detail_protocols.md +1 -1
- package/knowledge/shared/harness-core/harness_incubator_doctrine.md +41 -6
- package/knowledge/shared/harness-core/ship_readiness_gate.md +132 -0
- package/knowledge/shared/rules/auto_project_mapping.md +2 -1
- package/package.json +1 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "1.4.
|
|
14
|
+
"version": "1.4.58",
|
|
15
15
|
"description": "Hub meta-operations toolkit — 33 skills + 7 agents. 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": "1.4.
|
|
20
|
+
"version": "1.4.58",
|
|
21
21
|
"description": "Project-agnostic utility skills — 4 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
|
|
22
22
|
"source": "./plugins/fh-commons"
|
|
23
23
|
}
|
package/CLAUDE.md
CHANGED
|
@@ -148,7 +148,7 @@ Simplification guard: trivial denials with one obvious fix → state block + sin
|
|
|
148
148
|
|
|
149
149
|
**Greeting branch + door skeleton (summary-level — applies even if the detail file read is skipped)**: the branch test is **mechanical local state — session files under `tracks/`** — never git log / CATALOG residue (a fresh clone carries full history but zero session files: it is a NEW install — origin: a fresh-clone sonnet sim rendered the returning menu off commit messages, `fh_signal_2026-06-11` FP8). Every variant opens with **🐿️ then an identity-revealing welcome line on the SAME line** (🐿️ is no longer alone on its own line), followed by the menu — one salience unit, not a separate rule. (Put a space after 🐿️; the exact count is **not significant** — a markdown renderer collapses multiple mid-line spaces to one — so the verifiable invariant is *same-line*, NOT a space count.) Welcome line by branch: new / exploratory = "Welcome to FH." · returning = "Welcome back to FH." · operator (FH-dev state) = "The FH operator — good to see you." (rendered in the user's language **as a plain, natural translation of the pinned phrase — not an invented coinage** (cf. the operator-caught `안 조종실…` mistranslation); the lid/onboarding-smoothness matters even though it is not the substance).
|
|
150
150
|
|
|
151
|
-
- **New user** (no session files AND no mapped project tracks under `tracks/` — fresh clone/install; underscore
|
|
151
|
+
- **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 —
|
|
152
152
|
|
|
153
153
|
> 🐿️ **Welcome to FH.** *Looks like you're new here! ① Create your first project (guided) · ② Map an existing project — and I can run `/install-wizard` to finish initial setup.*
|
|
154
154
|
|
|
@@ -204,7 +204,7 @@ No user request is needed — this is a mandatory autonomous step, not a proposa
|
|
|
204
204
|
**Commit gate**: `git commit` on FH asset changes is hard-blocked by `templates/.git-hooks/pre-commit` until all required axes PASS. Hook installation (one-time): `git config core.hooksPath templates/.git-hooks && chmod +x templates/.git-hooks/pre-commit templates/.git-hooks/pre-push` (the same `core.hooksPath` also activates the **pre-push** Destructive-Op gate — see that section below).
|
|
205
205
|
|
|
206
206
|
```
|
|
207
|
-
FH asset modified → Axis 1 (regression_guard.sh --pr {BRANCH})
|
|
207
|
+
FH asset modified → Axis 1 (templates/regression_guard.sh --pr {BRANCH})
|
|
208
208
|
→ Axis 2 (/steel-quench) → Axis 3 (/phantom-quench)
|
|
209
209
|
→ marker: tracks/_meta/.axes_23_passed_{branch}_{date}.marker
|
|
210
210
|
(required fields: axis2-engine / axis2-model / floor-status / axis2-evidence;
|
|
@@ -281,7 +281,7 @@ no weak-local-judge regression of the judge-robustness principle (mechanical anc
|
|
|
281
281
|
|
|
282
282
|
| Axis | Skill | What it catches |
|
|
283
283
|
|---|---|---|
|
|
284
|
-
| Backward | `regression_guard.sh` | Critical section loss, broken refs, syntax errors, line reduction |
|
|
284
|
+
| Backward | `templates/regression_guard.sh` | Critical section loss, broken refs, syntax errors, line reduction |
|
|
285
285
|
| Adversarial | `steel-quench` | Trigger phrase collisions, design attack surface, over-engineered steps |
|
|
286
286
|
| Forward | `phantom-quench` | Phantom references, paths that don't exist, stale external links |
|
|
287
287
|
| Record | `edit-manifest` RECORD | Logs predicted impact — closes the predict-verify loop for future harvest-loop |
|
|
@@ -427,10 +427,18 @@ let the innovator center a recommend cascade, produce a ranked install plan, and
|
|
|
427
427
|
*maintain* (mature harness → route to the Field-Harness Diagnostic instead).
|
|
428
428
|
**new-build sub-branch — simulate-first (incubator doctrine)**: judge the project's character before
|
|
429
429
|
building. Clear · small · low failure-cost → build immediately (current flow). Uncertain · exploratory ·
|
|
430
|
-
failure-expensive → **
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
430
|
+
failure-expensive → **flag simulate-first as an option**: doctrine says such a project *should* be
|
|
431
|
+
chamber-simulated before emit. The chamber **run orchestration is now wired** (`scripts/chamber_run.sh`
|
|
432
|
+
— an intent-driven, resumable 7-step runner: budget-entry cap, ≥3-blind-persona gate, Emission Gate,
|
|
433
|
+
G4 ledger auto-append; run #3 exercised it 2026-07-14). But a **live one-command autonomous
|
|
434
|
+
simulate→EMIT of a field harness is NOT yet a capability**: step-4 persona dispatch is human/Claude-driven
|
|
435
|
+
(bash cannot spawn the isolated Agents — the honest muscle boundary), the EMIT terminus is HITL, and
|
|
436
|
+
**EMIT has never fired — the ledger's real runs are 2/2 KILL** (the chamber to date *screens*, it has not
|
|
437
|
+
*birthed*). So today this branch = a one-line HITL recommendation to run the chamber (`chamber_run.sh`),
|
|
438
|
+
then fall back to Full-Harness Mode §6 for the actual onboarding; the runner gates and records a
|
|
439
|
+
human-driven run — it must **not** be presented as a push-button autonomous emit. The same branch applies
|
|
440
|
+
to a **new capability of an existing harness** — the incubate-in-chamber-then-transplant flow is likewise
|
|
441
|
+
run-orchestrated but not autonomously emitting today. Rationale + economics:
|
|
434
442
|
`knowledge/shared/harness-core/harness_incubator_doctrine.md §3`. This audit-and-branch pre-step
|
|
435
443
|
is imported from the revfactory/harness Phase-0 State Audit (sister-audit 2026-07-07) — it tightens FH's
|
|
436
444
|
found→extend reflex and is the "이미 로컬에 연결돼 있으면 자동 탐색" mechanism.
|
|
@@ -744,6 +752,8 @@ Based on LOCAL_SKILL_REGISTRY (Step 1-c), **propose and connect skills from othe
|
|
|
744
752
|
|
|
745
753
|
**Method**: create `tracks/_meta/fh_signal_{YYYY-MM-DD}_{source}.md` (1 file/session, append if same date+source). Structural candidates only — exclude typos and in-session-resolved issues.
|
|
746
754
|
|
|
755
|
+
**Chamber-candidate hook (feeds the discovery pipeline)**: when a signal is an *incubatable capability or project* (uncertain / exploratory / failure-expensive / high-reinvention-risk — a chamber-run candidate, not just a fix), add a `CHAMBER-CANDIDATE: <one-line description>` line to the signal file. `scripts/chamber_candidate_collect.sh` greps that convention across the 6 sources (harness-doctor · harvest-loop · fh-signal · field-harvest · frontier-digest · uap), dedups/ranks, screens for reinvention, and skips anything the G4 ledger already KILLed. Adoption is incremental — the queue is honestly sparse until sources emit the marker; the collector measures the real volume.
|
|
756
|
+
|
|
747
757
|
## Execution Tier Settings
|
|
748
758
|
|
|
749
759
|
> **Full tier table + config**: `knowledge/shared/harness-core/fh_detail_protocols.md` — read when selecting a non-default tier.
|
|
@@ -795,10 +805,17 @@ Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
|
|
|
795
805
|
→ ③ Sync local/gitignored session state to your durable companion store, if you keep one
|
|
796
806
|
→ ④ Memory hygiene — update stale entries + record new session findings
|
|
797
807
|
→ ④-b npm freshness — if any npm-shipped asset changed (`package.json` `files[]`: skills · agents ·
|
|
798
|
-
README · AGENTS.md · CLAUDE.md · CHEATSHEET)
|
|
808
|
+
knowledge/ · docs/ · README · AGENTS.md · CLAUDE.md · CHEATSHEET · CATALOG.md): **first a Codex-entrypoint
|
|
809
|
+
drift check** — the script (`session_close_check.sh`) auto-*fires a candidate reminder* by cheap grep
|
|
810
|
+
(file co-occurrence, not topical parity), then **you judge**: does the changed CLAUDE.md/knowledge topic
|
|
811
|
+
actually mirror a section in `AGENTS.md` / `docs/codex-compat.md` (both files[]-shipped Codex entry
|
|
812
|
+
points)? sync it, else record `drift:none`. The grep flags; it does not determine — the parity call is
|
|
813
|
+
judged. Version lockstep invalidates the plugin.json *cache* but is **orthogonal** to
|
|
814
|
+
entry-point *content* — a version-only bump can ship a stale Codex entry point (gate-locality,
|
|
815
|
+
Codex side). Then **propose republish**: version bump **in lockstep**
|
|
799
816
|
across `package.json` + every `.claude-plugin/plugin.json` + `marketplace.json` (single-source =
|
|
800
817
|
`package.json`) → Pre-Publish gate → `npm publish` → `git tag vX.Y.Z` at publish. **Propose, don't
|
|
801
|
-
auto-publish.** (Why lockstep — Codex caches on plugin.json version — + tag-drift caveat → §detail below.)
|
|
818
|
+
auto-publish.** (Why lockstep — Codex caches on plugin.json version — + drift-check + tag-drift caveat → §detail below.)
|
|
802
819
|
→ ④-c Handoff lifecycle (cross-machine continuity) — when a durable **result artifact lands** this
|
|
803
820
|
session (mechanical hint: a new `*result*`/`*signal*`/`*_run_*` file in your companion store or
|
|
804
821
|
`tracks/`), do two things: **(a) ④-c stamps** any `"run this/start here"` run-handoff whose
|
package/README.md
CHANGED
|
@@ -224,6 +224,19 @@ The broader FH automation layer still depends on Claude Code for sub-agents, hoo
|
|
|
224
224
|
|
|
225
225
|
**Empirical result (2026-05-31)**: Applied to OpenCode's AI-generated `permission/arity.ts` (163 lines, CI green). Current gate semantics classify this as BLOCKED: 2 A-grade findings CI didn't catch (short-token overflow in allowlist, executor tools absent from arity table).
|
|
226
226
|
|
|
227
|
+
**Does the method actually add anything? A measured check (2026-07-14).** We held the model fixed at a
|
|
228
|
+
mid-tier floor and varied only the review *method*, on unseen gate snippets with planted *default-toward-PASS*
|
|
229
|
+
(fail-open) holes. On eight subtle holes — authored by two other models so the test set wasn't tuned to our
|
|
230
|
+
method — a plain review caught 5/8 (and two of those "catches" were the wrong bug, i.e. false confidence);
|
|
231
|
+
the same model with FH's degrade-direction lens caught 6/8 with zero false alarms. The honest part: **both
|
|
232
|
+
single-model lanes missed the same two holes** (a falsy error-sentinel, and a separator-negation parse). A
|
|
233
|
+
different model family, same lens, caught both — so the FH *stack* (lens + cross-family + a mechanical
|
|
234
|
+
pre-screen) reaches 8/8. The takeaway isn't a headline score; it's that the value comes from the
|
|
235
|
+
**decorrelated stack**, because even a well-prompted single model has a correlated blind spot that only a
|
|
236
|
+
different family closes. The two missed classes are now caught mechanically (a lint pre-screen), one layer
|
|
237
|
+
earlier. Small sample (single draw); reps and harder holes are the stated next step. Method + full result:
|
|
238
|
+
[`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md).
|
|
239
|
+
|
|
227
240
|
Full spec: [`fh_integration_contract.md`](knowledge/shared/harness-core/fh_integration_contract.md)
|
|
228
241
|
|
|
229
242
|
---
|
|
@@ -159,6 +159,26 @@ package stale. **Tag drift caveat**: when a bump rides inside a functional commi
|
|
|
159
159
|
commit), tag *that* commit — otherwise the version ships to npm untagged (e.g. 1.4.4/1.4.5 shipped
|
|
160
160
|
untagged, backfilled 2026-06-08).
|
|
161
161
|
|
|
162
|
+
**Entry-point content drift (④-b drift-check — orthogonal to the version cache above).** The plugin.json
|
|
163
|
+
version keys the *cache path*, so bumping it forces Codex to refetch — that closes the **stale-cache**
|
|
164
|
+
axis. It does **not** close a second, orthogonal axis: `AGENTS.md` / `docs/codex-compat.md` are the
|
|
165
|
+
Codex-user entry points, and their *prose* must mirror whatever CLAUDE.md/knowledge change triggered the
|
|
166
|
+
republish. A version-only bump invalidates the cache yet still serves an AGENTS.md that never absorbed the
|
|
167
|
+
change — **version fresh, entry point stale** (the Codex-side face of `[[feedback_gate_locality_principle]]`:
|
|
168
|
+
a gate/pointer is only as fresh as the surface the actor actually reads). So ④-b greps whether the changed
|
|
169
|
+
topic touches a mirrored AGENTS.md/codex-compat section → sync it, else record `drift:none`. Mechanical
|
|
170
|
+
grep, ~0 cost. **Mechanically *emitted*, judged-*determined* (honest scope)**:
|
|
171
|
+
`scripts/session_close_check.sh` ④-b-drift auto-fires a drift-*candidate* warning when a shipped
|
|
172
|
+
CLAUDE.md/knowledge path changed but the Codex entry points (`AGENTS.md`/`docs/codex-compat`) did not.
|
|
173
|
+
What is mechanized is the *reminder* — it no longer depends on the runner remembering to look (that half
|
|
174
|
+
of the old "prose-only" gap is closed). What is **not** mechanized is the *parity determination*: the
|
|
175
|
+
script tests file **co-occurrence**, not topical parity, so it (a) can false-positive when the changed
|
|
176
|
+
path doesn't actually mirror an entry-point section, and (b) can false-negative if AGENTS.md was touched
|
|
177
|
+
for an unrelated reason in the same tag range. So the runner still judges each candidate (sync it, else
|
|
178
|
+
record `drift:none`) — the script flags, it does not *catch*. Origin: 2026-07-13 the close chain
|
|
179
|
+
lockstep-bumped v1.4.56/57 but only an operator question ("코덱스 호환성도 자동?") confirmed AGENTS.md was
|
|
180
|
+
clean — the chain never auto-checked it (`fh_signal_2026-07-13_self-dev` S3).
|
|
181
|
+
|
|
162
182
|
---
|
|
163
183
|
|
|
164
184
|
## §Session-Close-Handoff-Lifecycle
|
|
@@ -67,7 +67,7 @@ install too — `/install-wizard` records HUB/ROOT so the runtime never guesses;
|
|
|
67
67
|
|
|
68
68
|
Identity marker: every greeting response opens with **🐿️ then an identity-revealing welcome line on the same line** (a space after 🐿️; exact count not significant — the renderer collapses multiple mid-line spaces — the invariant is *same-line*, not 🐿️ alone) — new / exploratory = "Welcome to FH." · returning = "Welcome back to FH." · operator (FH-dev state) = "The FH operator — good to see you." This is FH's session-start signal — friendly, consistent, distinct; the onboarding-smoothness / lid matters even though it is not the substance. The marker + welcome are **part of each skeleton itself** (one salience unit with the menu — do not strip it when composing doors; mirrored in CLAUDE.md §Active Onboarding).
|
|
69
69
|
|
|
70
|
-
**Branch test (mechanical — local state only)**: returning = session files exist (any `tracks/**/session_*.md` or `tracks/_meta/*.md` beyond `.gitkeep`) **OR** mapped project tracks exist (`tracks/{name}/` dirs — underscore
|
|
70
|
+
**Branch test (mechanical — local state only)**: returning = session files exist (any `tracks/**/session_*.md` or `tracks/_meta/*.md` beyond `.gitkeep`) **OR** mapped project tracks exist (`tracks/{name}/` dirs — **any underscore-prefixed dir doesn't count** (`tracks/_*`, general rule not a closed list: `_meta`/`_audit`/`_contrib`/`_chamber`…); covers mapped-but-not-yet-synced users). **Never infer the branch from git log or CATALOG residue** — a fresh clone carries full commit history but zero session files: it is a NEW install (origin: fresh-clone sonnet sim rendered the returning menu off commit messages, `fh_signal_2026-06-11` FP8).
|
|
71
71
|
|
|
72
72
|
**New user** (neither condition holds — fresh clone/install): 2-door starter, never the returning menu —
|
|
73
73
|
> 🐿️ **Welcome to FH.** *Looks like you're new here! ① Create your first project (guided) · ② Map an existing project — and I can run `/install-wizard` to finish initial setup.*
|
|
@@ -85,12 +85,47 @@ chamber, then landed in the field repo.
|
|
|
85
85
|
|
|
86
86
|
**Minimal execution skeleton (when the operator accepts simulate-first)**: the procedure is currently
|
|
87
87
|
*judged/ad-hoc*, standardization deferred to a second real occurrence (measured-trigger, per the
|
|
88
|
-
evidence-threshold build discipline): ① open a chamber workspace (a worktree or `tracks/{project}
|
|
89
|
-
— never a real project repo
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
evidence-threshold build discipline): ① open a chamber workspace (a worktree or `tracks/_chamber/{project}/`
|
|
89
|
+
— never a real project repo; the underscore prefix rides the onboarding carve-out for meta dirs
|
|
90
|
+
(any `tracks/_*` dir — general rule, stated as such in the branch tests), so a **chamber run** never
|
|
91
|
+
registers as a mapped project and never pollutes the returning-menu door counts — a
|
|
92
|
+
`tracks/{project}-sim/` path would); ② scope the run through `goal-quench`'s budget
|
|
93
|
+
gate (chamber runs are the expensive path — cap them); ③ drive the simulation with existing FH assets
|
|
94
|
+
(dispatch, gates, live surfaces as needed); ④ the **Emission Gate** — the emit judgment "the simulation
|
|
95
|
+
holds" — is a *judged* call paired with the run's own mechanical evidence (tests passing, gate verdicts,
|
|
96
|
+
reproduced flows), decided **with the operator (HITL)**; ⑤ on emit, route by candidate class: a **field
|
|
97
|
+
harness** goes through Full-Harness Mode / field scaffolds (`auto_project_mapping.md §6` — that mode is
|
|
98
|
+
this chamber's field emit terminus); an **FH-internal utility** (a skill/script/rule, not a standalone
|
|
99
|
+
field harness) instead routes through the **New-Skill Pre-Commit gate + `asset-placement-gate`** (the
|
|
100
|
+
same gate every FH asset passes). KILL emits nothing — the workspace stays as the evidence record.
|
|
101
|
+
|
|
102
|
+
**EMIT-worthiness — the measured screening criterion (run #5, 2026-07-14)**: five chamber runs, EMIT 0/5,
|
|
103
|
+
all KILL. Run #5 (`degrade-lint`) measured *why* the chamber has not birthed, and the finding is a reusable
|
|
104
|
+
screen: a candidate is emit-worthy only if it clears **all three** of — (1) **net-new** (not a reinvention
|
|
105
|
+
of an existing FH/official asset, nor a cosmetic re-wrap of code that already ships — runs #2–#4 died here);
|
|
106
|
+
(2) **artifact-shaped** (a tool/script/rule that stands alone, *not* a judgment-method — run #5's genuine
|
|
107
|
+
niche was real, but its value lived in a scan∪cross-family *lens*, i.e. an LLM judgment, which cannot be
|
|
108
|
+
`npm publish`ed); (3) **real-code-precision-adequate** (its mechanical form, measured on real external code,
|
|
109
|
+
does not cry-wolf — run #5's rule scored 5/5 false-positive on 111 real files because the fail-open shape is
|
|
110
|
+
syntactically identical to ubiquitous-benign skip-if-empty code; the real/benign split is semantic, not
|
|
111
|
+
grep-able). 0/5 candidates cleared all three. This is not "keep trying" — it is a **pre-screen for future
|
|
112
|
+
candidates**: a KILL that fails (1) or (2) is cheap to predict; only (3) needs a measurement leg (semgrep
|
|
113
|
+
baseline + real-repo FP run), which run #5 established as the decisive test. The chamber's honest value to
|
|
114
|
+
date remains *screening* — preventing reinventions and low-precision births — not yet *birthing*.
|
|
115
|
+
|
|
116
|
+
*Vocabulary reservation (term hygiene, not standardization)*: a run of this skeleton is a **chamber
|
|
117
|
+
run** — going forward, run/workspace/log labels use "chamber" for incubation and keep "sim/simulation"
|
|
118
|
+
for *verification* sims (target-tier blind sim, sim-conductor persona sims). Established names are
|
|
119
|
+
grandfathered, not renamed: the Autopilot branch stays **simulate-first**, and this section's
|
|
120
|
+
"simulation holds" phrasing stands — the reservation governs new labels (grep keys), not existing
|
|
121
|
+
doctrine prose. The Emission Gate and chamber-run labels exist so a second real occurrence is
|
|
122
|
+
recoverable from logs; the procedure itself stays evidence-gated as above.
|
|
123
|
+
*Routing baseline (measured)*: the Autopilot's simulate-first routing branch passed a Step 0.5
|
|
124
|
+
trigger-accuracy probe 2026-07-13 — 10/10 blind Sonnet sims (5 should-fire incl. 2 borderline, 5
|
|
125
|
+
should-not-fire incl. 3 borderline near-misses), 0 malformed verdicts. Scope honestly: an
|
|
126
|
+
authored-case baseline (single-draw per case; reps waived per measurement-integrity since every
|
|
127
|
+
first draw matched expected — see the 2026-07-13 subagent-invocations log entry), not a calibrated
|
|
128
|
+
accuracy estimate.
|
|
94
129
|
|
|
95
130
|
**Incubation unit — projects AND features**: incubation applies not only to new projects but to **new
|
|
96
131
|
capabilities of an existing harness**. A field harness's self-development is itself run inside the
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Ship-Readiness Gate — Identity All-Green as the Release Condition
|
|
2
|
+
|
|
3
|
+
> **What this is**: the release gate for a harness (FH itself, or any field harness it incubates). A
|
|
4
|
+
> harness **ships** — and earns a **formal release tag** — only when the identities that define it are
|
|
5
|
+
> **all-green**: each proven REALIZED by a concrete track-record artifact (n≥1), not merely documented.
|
|
6
|
+
> This is the "품질보증서 (quality-assurance certificate)" the operator asked for: it certifies the
|
|
7
|
+
> harness does what its identity claims, with evidence, before it goes out. Origin: the 2026-07-14
|
|
8
|
+
> identity-fulfillment audit (`tracks/_meta/identity_audit_2026-07-14.md`).
|
|
9
|
+
|
|
10
|
+
## Why an identity gate, not a feature checklist
|
|
11
|
+
A harness is a means, not a feature list. Shipping it means promising it *does what its identity claims*.
|
|
12
|
+
A feature can be present yet the identity still be 이상론 (aspirational) — e.g. an incubator with a runner
|
|
13
|
+
but zero real emits. So the gate scores **identities by evidence**, and the honest states are:
|
|
14
|
+
|
|
15
|
+
| Status | Meaning | Bar |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| 🟢 GREEN | **REALIZED** | a concrete track-record artifact proves the identity fired for real, n≥1 (a real gate block, a measured probe, a real orchestration record) — *not* a doc that describes it |
|
|
18
|
+
| 🟡 YELLOW | **PARTIAL** | pieces work but no single closed track record (e.g. two half-pipelines that never connected end-to-end) |
|
|
19
|
+
| 🔴 RED | **이상론 (ideal-only)** | documented aspiration, never actually run; or the source itself says "not built yet / named target" |
|
|
20
|
+
|
|
21
|
+
**All-green rule**: ship + tag only when **every** identity is 🟢. A 🟡 or 🔴 blocks the tag — and names
|
|
22
|
+
exactly what real run is missing. The remedy for RED is never to relabel it green; it is to **run it and
|
|
23
|
+
leave the artifact** (the operator's standing rule: "이상론이면 실제로 돌려봐서 실적을 남겨야 한다").
|
|
24
|
+
|
|
25
|
+
## Dominance, not concession — the AlexNet bar
|
|
26
|
+
A harness earns the right to say "we compose with other harnesses" **only from proven dominance**, never
|
|
27
|
+
as a humble concession. The reference is AlexNet: on data it had never seen, it did not *participate* — it
|
|
28
|
+
**crushed every competitor**. That is the bar for a shippable identity: on unseen input, in a head-to-head
|
|
29
|
+
against the realistic alternative (a plain single-model session, a competing harness's flow), our harness
|
|
30
|
+
must **decisively win**, not merely tie or "also work."
|
|
31
|
+
|
|
32
|
+
The composition identity (멀티하네스 클러스터) is downstream of this: we equip *other* harnesses onto the
|
|
33
|
+
parts **we deliberately chose not to cover, or left general-purpose** — a decision made from strength, after
|
|
34
|
+
proving we would win the parts we do cover. Composing because we *can't* win is weakness wearing the costume
|
|
35
|
+
of humility; composing because we *choose* the frontier and hand the rest to specialists is dominance.
|
|
36
|
+
|
|
37
|
+
**The squirrel-and-equipment shape (operator, 2026-07-14)**: the squirrel (🐿️ FH) dons **specialized gear**
|
|
38
|
+
for a specific harness/project — micro-work can't be done barehanded, and the gear (a field/domain harness)
|
|
39
|
+
makes it easier and more specialized. But **the squirrel itself must be an all-rounder master** at the one
|
|
40
|
+
thing it does everywhere: *creating and accelerating harnesses*. The mastery is the squirrel (general,
|
|
41
|
+
must-dominate — the governance/quality/harness-craft); the specialization is the equipment (per-domain,
|
|
42
|
+
composed-in). You never concede the craft; you equip for the domain. So the dominance bar applies to the
|
|
43
|
+
**craft** (does FH out-govern / out-build any alternative on unseen ground?), and composition applies to the
|
|
44
|
+
**gear** (which specialist harness to bolt on for this domain's micro-work).
|
|
45
|
+
|
|
46
|
+
**Dominance result (governance craft, 2026-07-14)** — `tracks/_meta/dominance_benchmark_2026-07-14.md`.
|
|
47
|
+
Model held fixed at the Sonnet floor; only the harness *method* varied. Two rounds:
|
|
48
|
+
- **Round 1 (5 easy holes)**: FH degrade-lens **5/5 (0 FP)** vs plain review **3/5** (1 miss + 1 false-alarm).
|
|
49
|
+
Honest read: obvious fail-opens are caught by both — the lens's edge showed only on the subtle hole and
|
|
50
|
+
in not crying wolf. Not a blowout; it pointed to harder holes as the real test.
|
|
51
|
+
- **Round 2 (8 subtle holes, authored by Fable + Codex — decorrelated from the method under test)**: plain
|
|
52
|
+
review **5/8** (and 2 of its "catches" were distractor mis-identifications = false confidence, worse than
|
|
53
|
+
a clean miss); degrade-lens **6/8, 0 FP**; and critically **both single Sonnet lanes missed the same 2
|
|
54
|
+
holes** (a falsy-error-sentinel return, and a separator-negation parse). A **cross-family (Codex) lane
|
|
55
|
+
with the same lens caught both** — the correlated blind spot inside one model family, closed only by a
|
|
56
|
+
*different* family. **FH stack (degrade-lens ∪ cross-family) = 8/8, 0 FP.**
|
|
57
|
+
|
|
58
|
+
The load-bearing finding is architectural, not a headline number: **dominance comes from the decorrelated
|
|
59
|
+
stack (`degrade-lint ∪ cross-family ∪ mechanical-anchor`), not from any single clever reviewer** — even a
|
|
60
|
+
well-prompted floor model has a correlated blind spot that only a different family closes. This is the
|
|
61
|
+
*empirical* basis for why FH is a stack, not a prompt. And the two blind-spot classes round 2 exposed were
|
|
62
|
+
**immediately mechanized** — `degrade_direction_scan.sh` probes E (falsy-sentinel→PASS) and F
|
|
63
|
+
(split-positional-verdict) now flag both at the pre-lens layer (0 false-positive on the FH codebase), so the
|
|
64
|
+
correlated miss is caught one layer earlier. Forward direction: more such classes, and reps≥3 to fix the numbers.
|
|
65
|
+
|
|
66
|
+
**Gate consequence**: each 🟢 identity should carry not just an existence artifact (n≥1) but, where a
|
|
67
|
+
competitor exists, a **dominance result** — a measured head-to-head where our harness catches / completes /
|
|
68
|
+
survives what the alternative misses. The governance identity already has one (blind cross-family: FH's gate
|
|
69
|
+
the *only* thing that caught the irreversibility/safety class; competitors HITL 8/8 ABSENT). The others owe
|
|
70
|
+
theirs. A dominance benchmark is also *diagnostic*: where we do NOT yet dominate tells us exactly where to go
|
|
71
|
+
next (the operator: "압도성을 결과로 봐야 앞으로 나아갈 방향을 안다").
|
|
72
|
+
|
|
73
|
+
## The gate is the audit method (reusable)
|
|
74
|
+
Score with the same triangulation the 2026-07-14 audit used — no single-source self-attestation:
|
|
75
|
+
1. **Cross-family falsifiable checklist** — draft the per-identity PASS criteria with ≥2 decorrelated
|
|
76
|
+
models (e.g. Fable higher-tier + Codex cross-family); they must converge on the load-bearing checks.
|
|
77
|
+
2. **Origin-grounding** — for each identity, quote its *original intent* from the accumulated record
|
|
78
|
+
(memory / tracks / companion store) and find the artifact that proves it fired (or prove none exists).
|
|
79
|
+
3. **Blind floor-tier probe** — for any identity whose value is "intent-based autonomous completion"
|
|
80
|
+
(a user gets the value by intent, without naming the skill), *measure* it: blind Sonnet sessions given
|
|
81
|
+
novice-vocabulary intents, scored on whether the right skill/gate fires. Salience-only ≠ measured.
|
|
82
|
+
|
|
83
|
+
## Versioning policy — the formal release track
|
|
84
|
+
The formal release tag is **independent of the npm package version**. The npm version (currently in the
|
|
85
|
+
`1.4.x` range) is the **plugin-cache lockstep number** — it bumps on every shipped-asset change so Codex/
|
|
86
|
+
marketplace cache-invalidate; it is not a maturity claim. The **formal identity-maturity release starts at
|
|
87
|
+
`v0.1.0`**. Do not conflate the two counters; a high npm number does not make the harness mature.
|
|
88
|
+
|
|
89
|
+
**The `0.x` ↔ `1.0` mapping (refined 2026-07-14, informed operator decision).** Semver `0.x` explicitly
|
|
90
|
+
means *early / not-yet-complete*, so the formal track maps cleanly onto the identity gate:
|
|
91
|
+
- **`v0.1.0` = the first formal-release baseline.** It is tagged when the harness has a *proven core*
|
|
92
|
+
(≥1 identity 🟢 by real artifact) and an *honest, evidence-scored status for the rest* — NOT when every
|
|
93
|
+
identity is green. `v0.1.0` makes **no all-green claim**; its release notes carry the real per-identity
|
|
94
|
+
status (🟢/🟡/🔴). This is the baseline *from which* all-green is tracked, not the all-green ship itself.
|
|
95
|
+
- **`v1.0.0` = the all-green ship.** The original "ship only when every identity is 🟢" condition maps to
|
|
96
|
+
**v1.0.0**, not v0.1.0. A 🟡/🔴 blocks *v1.0*, and names exactly what real run is missing — it does not
|
|
97
|
+
block the honest v0.1.0 baseline.
|
|
98
|
+
|
|
99
|
+
This refinement resolves the tension of tagging a baseline while identities are still maturing: `0.x` is
|
|
100
|
+
*designed* to carry an incomplete-but-honest status. What it must never do is **lie** — a v0.x tag whose
|
|
101
|
+
notes claim more green than the audit shows is the defect the gate exists to prevent. The operator, shown
|
|
102
|
+
the non-all-green status (③⑤ 🟢, ④ 🟡, ①② 🔴), elected to tag `v0.1.0` as this honest baseline; the
|
|
103
|
+
decision is logged here and the tag's notes state the real status.
|
|
104
|
+
|
|
105
|
+
## FH's own status (2026-07-14) — NOT yet all-green
|
|
106
|
+
|
|
107
|
+
| # | Identity | Status | Evidence / what's missing |
|
|
108
|
+
|---|---|---|---|
|
|
109
|
+
| ③ | 거버넌스 게이트 (governance) | 🟢 GREEN | pre-commit/pre-push physically block; moat measured 3–4 family blind (HITL 8/8 ABSENT); cross-family caught a real companion-store-name leak 2026-07-14 (fail-closed) |
|
|
110
|
+
| ⑤ | 증폭자 (amplifier) | 🟢 GREEN | short-intent→literature-grounding→ultimate-doc real instances; rules-diet −18.2k measured; intent-routing probe 94% (below) |
|
|
111
|
+
| ④ | 프런티어→조직 전파 | 🟡 YELLOW | frontier-digest launchd auto + AX submission docs both real, but digest→org never closed as ONE pipeline |
|
|
112
|
+
| ① | 멀티하네스 클러스터 (연속경유) | 🔴 RED | mapping/routing materials work, but continuous relay channel + external-harness recommend are "not built yet" (source-admitted); cluster-wizard parked |
|
|
113
|
+
| ② | 프로젝트 인큐베이터 (챔버 EMIT) | 🔴 RED | chamber ran **5×, EMIT 0× (5 KILL)**. run #5 (2026-07-14) *measured* why it hasn't birthed: all 5 candidates were either **reinventions** (#2 sim-conductor, #3 G4/resume, #4 steel-quench) or a **non-artifact judgment-method** (#5 degrade-lint — a genuine niche, but the mechanical rule scored **5/5 false-positive on 111 real qasp files**; the valuable capability is scan∪cross-family *judgment*, which cannot be shipped as a standalone tool). A real EMIT needs **net-new ∧ artifact-shaped ∧ real-code-precision-adequate** — 0/5 cleared all three. Runner wired; the gap is a candidate, not the pipe |
|
|
114
|
+
|
|
115
|
+
**Cross-cutting measured (intent-based autonomous completion)**: blind floor-tier Sonnet trigger-accuracy
|
|
116
|
+
probe (n=10, 2026-07-14): **should-fire 7.5/8 (94%), false-fire 0/2**. One weak trigger (simulate-first /
|
|
117
|
+
incubator entry absorbed into deep-clarify) — the identity-② weakness surfaces in routing too.
|
|
118
|
+
|
|
119
|
+
**Verdict (2026-07-14)**: FH is tagged **`v0.1.0` = honest baseline**, not all-green. ③⑤ are 🟢, ④ 🟡,
|
|
120
|
+
①② 🔴 — the `v0.1.0` notes state exactly this and make no all-green claim (per the refined 0.x↔1.0 mapping
|
|
121
|
+
above). **`v1.0.0` remains the all-green target.** What blocks v1.0 is **real runs, not wiring**: ①'s live
|
|
122
|
+
2-node orchestration, ②'s first *net-new ∧ artifact-shaped ∧ precision-adequate* chamber candidate (the
|
|
123
|
+
measured criterion from run #5), ④'s closed digest→org pipeline. Each remedy is a run that leaves an
|
|
124
|
+
artifact, tracked in `tracks/_meta/identity_audit_*.md`. The honest baseline is publishable *because* 0.x
|
|
125
|
+
carries an incomplete status by design; forcing a green it hasn't earned would be the theater the gate bars.
|
|
126
|
+
|
|
127
|
+
## For a field harness (e.g. pmh, qasp)
|
|
128
|
+
Same gate, its own identities. A field harness ships to its team when its identity checklist is all-green,
|
|
129
|
+
certified by a **실증상세 (demonstration-detail) doc in that harness's own repo** — the QA certificate
|
|
130
|
+
listing each identity, its PASS criterion, and the artifact proving it. FH≡field parity: what FH proves
|
|
131
|
+
about itself, a field harness proves about itself, by the same method. (Company-residency: a field
|
|
132
|
+
harness's 실증상세 lives in its own private repo; FH holds only the method, never the field's evidence.)
|
|
@@ -66,7 +66,7 @@ Mapping complete: N projects
|
|
|
66
66
|
|
|
67
67
|
Basic mapping (steps 1–5) registers a project *lightly* (tracks/ + a starter CLAUDE.md + hub link). **Full-Harness Mode adds the project-local harness assets** — identity ① (Control Tower) propagating harness structure to a connected project; the *how* is executed via the Core Axis.
|
|
68
68
|
|
|
69
|
-
**Scope**: target *mapped* projects only. For FH-self setup / acceleration baseline (zshrc, sentinels, the FH self-gate) use `/install-wizard` — do **not** run §6 on the FH hub itself. **Prerequisite**: the project is already mapped (steps 1–5); §6 is strictly additive.
|
|
69
|
+
**Scope**: target *mapped* projects only. For FH-self setup / acceleration baseline (zshrc, sentinels, the FH self-gate) use `/install-wizard` — do **not** run §6 on the FH hub itself. **Prerequisite**: the project is already mapped (steps 1–5); §6 is strictly additive. This mode is also the **emit terminus of a chamber run** — a simulate-first incubation that holds routes here on emit (`harness_incubator_doctrine.md §3` Minimal execution skeleton ⑤).
|
|
70
70
|
|
|
71
71
|
**Triggers**: "harness-ify this project", "full harness setup", "프로젝트 하네스화", "promote to full harness", or an opt-in prompt offered right after a basic mapping (*"Promote {project} to a full harness now?"*).
|
|
72
72
|
|
|
@@ -121,6 +121,7 @@ The scaffold **enforces the creation gate by construction** — a field skill is
|
|
|
121
121
|
- **Do not overwrite existing project files** — if CLAUDE.md exists, propose block addition only
|
|
122
122
|
- **Warn when large monorepo detected** — repos with 10+ subprojects: ask "Which subproject is the track unit?"
|
|
123
123
|
- **Name collision** — if track name already exists, ask user to specify a new track name
|
|
124
|
+
- **Underscore prefix reserved** — a track name must not start with `_`: `tracks/_*` is the meta/chamber namespace the onboarding branch tests exclude from project counts (`_meta`/`_audit`/`_contrib`/`_chamber`…). Mapping a project as `tracks/_foo/` would make it invisible to the menu — rename (e.g. strip the underscore) before mapping
|
|
124
125
|
- **Pre-existing `.claude/` config is untrusted input, not a mapping detail** — a candidate project
|
|
125
126
|
(step 1 scan) may already carry a `.claude/settings.json` from a source FH did not author (a clone,
|
|
126
127
|
a fork, a prior contributor). Two disclosed Claude Code CVEs show that file class is a live RCE /
|
package/package.json
CHANGED