@chrono-meta/fh-gate 1.4.92 → 1.4.93
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/AGENTS.md +1 -1
- package/CHEATSHEET.md +1 -0
- package/CLAUDE.md +9 -1
- package/README.md +9 -4
- package/docs/codex-compat.md +1 -1
- package/knowledge/shared/harness-core/fh_detail_protocols.md +11 -0
- package/knowledge/shared/harness-core/gate_locality_principle.md +10 -0
- package/knowledge/shared/harness-core/return_path_gate.md +15 -0
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +72 -0
- package/knowledge/shared/rules/knowledge_layer_seam.md +165 -0
- package/package.json +11 -2
- package/plugins/fh-commons/.claude-plugin/plugin.json +2 -2
- package/plugins/fh-commons/README.md +1 -0
- package/plugins/fh-commons/skills/ko-tech-writer/SKILL.md +157 -0
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/skills/agent-composer/SKILL.md +3 -1
- package/plugins/fh-meta/skills/context-doctor/SKILL.md +4 -0
- package/plugins/fh-meta/skills/edit-manifest/SKILL.md +4 -0
- package/plugins/fh-meta/skills/harvest-loop/SKILL.md +19 -1
- package/plugins/fh-meta/skills/install-wizard/SKILL.md +26 -1
- package/plugins/fh-meta/skills/install-wizard/SKILL_detail.md +25 -4
- package/plugins/fh-meta/skills/phantom-quench/SKILL.md +44 -0
- package/plugins/fh-meta/skills/pipeline-conductor/SKILL.md +11 -3
- package/plugins/fh-meta/skills/steel-quench/SKILL.md +1 -1
- package/scripts/.env_purity_tokens.defaults +8 -0
- package/scripts/env_purity_scan.sh +50 -0
- package/scripts/fh_env_delta_scan.sh +16 -1
- package/scripts/gate_anchor_check.sh +344 -0
- package/scripts/knowledge_seam_check.sh +171 -0
- package/scripts/rtk_gross_ablation.sh +64 -0
- package/scripts/selfcheck.sh +15 -0
- package/scripts/session_close_check.sh +3 -0
- package/scripts/sidecar_calibrate.sh +32 -1
- package/scripts/test_env_purity_lanes.sh +30 -0
- package/scripts/test_knowledge_seam_lanes.sh +142 -0
- package/scripts/test_marker_axes_run_lanes.sh +115 -0
- package/scripts/test_sidecar_calibrate_lanes.sh +15 -1
- package/templates/.git-hooks/pre-commit +63 -2
- package/templates/CLAUDE.md +7 -0
- package/templates/starter_profile.md +2 -2
- package/tests/seam_absence_probes.md +31 -0
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "1.4.
|
|
14
|
+
"version": "1.4.93",
|
|
15
15
|
"description": "Hub meta-operations toolkit — 35 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.
|
|
21
|
-
"description": "Project-agnostic utility skills —
|
|
20
|
+
"version": "1.4.93",
|
|
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
|
}
|
|
24
24
|
]
|
package/AGENTS.md
CHANGED
|
@@ -117,7 +117,7 @@ control; FH supplies the quality gate after goal completion.
|
|
|
117
117
|
|
|
118
118
|
| Tier | Definition | Skills |
|
|
119
119
|
|---|---|---|
|
|
120
|
-
| **M1 — Full** | No Claude-native dependency | `token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop` |
|
|
120
|
+
| **M1 — Full** | No Claude-native dependency | `token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop`, `ko-tech-writer` (visual-QA steps degrade to text-only) |
|
|
121
121
|
| **M2 — Partial** | Core works; native agent or slash-command steps need adaptation | `deliberation`, `steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop` |
|
|
122
122
|
| **M3 — Claude-only** | Requires a Claude hook or session-scoped dispatch | `goal-quench`, `hub-cc-pr-reviewer`, `install-wizard` |
|
|
123
123
|
|
package/CHEATSHEET.md
CHANGED
|
@@ -494,6 +494,7 @@ Claude agents feature
|
|
|
494
494
|
| Skill | What it does | Say this |
|
|
495
495
|
|---|---|---|
|
|
496
496
|
| `token-budget-gate` *(commons)* | Estimates token cost before a multi-step task, then calibrates against actual after | "how expensive is this", "estimate the token budget first" |
|
|
497
|
+
| `ko-tech-writer` *(commons)* | Korean tech-writing pipeline — venue calibration, translationese scan, number/claim gate, perceptual QA | "기술문서 써줘", "테크블로그 초안", "번역투 고쳐줘" |
|
|
497
498
|
| `asset-placement-gate` | Routes a new skill/agent/plugin to the right place (hub vs project), no role overlap | "where does this go", "should this be shared", "hub or project" |
|
|
498
499
|
| `marketplace-gate` | Scores a repo against 5 listing criteria (README, zero-config, maintenance, dup, safety) | "is this OK to publish", "ready for the marketplace", "pre-publish check" |
|
|
499
500
|
| `public-surface-audit` | Scans git-tracked files for operator-private tokens (real username, corp names, home paths) | "did I leak anything", "scan for private tokens", "is my split clean" |
|
package/CLAUDE.md
CHANGED
|
@@ -300,6 +300,14 @@ Compose session-card candidates **into door ③ (field) and the 🔧 door (FH-de
|
|
|
300
300
|
**Identity marker**: every greeting response (Step ②) opens with 🐿️ then an identity-revealing welcome line **on the same line** (a space after 🐿️; exact count not significant — the renderer collapses it — 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." It is embedded in all skeletons above (do not strip it when composing doors); the exploratory branch template (`fh_detail_protocols.md` Step 2) uses the "Welcome to FH." line.
|
|
301
301
|
|
|
302
302
|
**Guards**: explicit task-entry utterance → skip onboarding **menu** (the door skeleton / greeting) — but this **never skips the Mode D companion-store freshness load** (pull + INDEX read + card-vs-commit reconcile); that is a data-load, not the menu, and it fires even when the first message is a task — hook-backed via `scripts/fh_session_load.sh` (measured miss + mechanics: `fh_detail_protocols.md §Onboarding-Provenance` · `modes_and_value.md §Session-start freshness`) · once per session · code/debug requests → start working directly · project routing is a suggestion, mention at most once
|
|
303
|
+
**Wizard-state guard (prose layer — for nodes whose hooks were declined/never wired)**: during the
|
|
304
|
+
greeting auto-read, if `~/.cc_sentinels/{repo}_wizard_done` is absent, or `{repo}_wizard_declined`
|
|
305
|
+
is non-empty without a `_wizard_reminder_muted` sentinel, append ONE line to the response:
|
|
306
|
+
*"install-wizard 미실행(또는 거부 항목 N개) 상태 — FH 의 의도된 기능 일부가 정상 실행되지 않을 수
|
|
307
|
+
있다. 재실행: `/install-wizard`."* Wired nodes get the same line mechanically from the env-delta
|
|
308
|
+
hook — emit it once, not twice. Honest residual: a task-first entry on a fully-unwired node has no
|
|
309
|
+
surface for this line (no hook, no menu) — prose cannot close that, and it is named here rather
|
|
310
|
+
than papered over.
|
|
303
311
|
**Metadata-is-not-intent guard**: the trigger is the user's **typed message only**. Session metadata — branch name (auto-derived from the first message, e.g. `claude/korean-greeting-*`), repo name, file paths — is **never** a task spec and never suppresses or redirects the greeting trigger. A bare greeting fires onboarding even when the branch name looks like a feature request; if the only "task" signal lives in metadata and not in what the user typed, treat the message as a greeting and run the greeting branch + door skeleton above.
|
|
304
312
|
|
|
305
313
|
## New Skill Creation Pre-Commit Gate
|
|
@@ -578,7 +586,7 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
|
|
|
578
586
|
| "용광로모드", "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) |
|
|
579
587
|
| "review this PR", "check diff", "code review" | code diff → built-in `/code-review`·`/review` · FH-asset coherence → `/hub-cc-pr-reviewer` (role split) |
|
|
580
588
|
| "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 |
|
|
581
|
-
| "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. |
|
|
589
|
+
| "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. **Boundary («동향/trend»+«조사» in one utterance)**: decide by TOPIC, not verb — AI/harness-adjacent trend → `/frontier-digest`, anything else → the ladder (routing probe 2026-08-10 #8: the two vocabularies co-occur in real utterances). No-reinvention: FH routes, does not build a research engine. |
|
|
582
590
|
| "orchestrate agents", "parallel dispatch", "combine skills", "multiple agents" | `/agent-composer` |
|
|
583
591
|
| **a material work product is about to be called done / merged / published** — public or irreversible surface · affects others · carries external claims or numbers · new behavior · security/data/permissions (proactive; the everyday "커밋하고 머지하자" utterance does **not** name an agent, so agent-composer never self-fires here — that is why this row exists) | `agent-composer` **§Author-Exposure Table** — name the exposure row, dispatch that review pass, then decide. Materiality gate + `Exposure-unclear → challenger` default live there; the lens returns evidence, never the verdict |
|
|
584
592
|
| "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` |
|
package/README.md
CHANGED
|
@@ -62,15 +62,19 @@ claude plugin marketplace add https://github.com/chrono-meta/forge-harness.git
|
|
|
62
62
|
claude plugin install -s user fh-meta@forge-harness
|
|
63
63
|
|
|
64
64
|
# 2. Clone the hub
|
|
65
|
-
git clone https://github.com/chrono-meta/forge-harness.git ~/forge-harness
|
|
66
|
-
cd ~/forge-harness
|
|
65
|
+
git clone https://github.com/chrono-meta/forge-harness.git ~/projects/forge-harness
|
|
66
|
+
cd ~/projects/forge-harness
|
|
67
67
|
|
|
68
68
|
# 3. Start a session
|
|
69
69
|
claude
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
> ✅
|
|
72
|
+
> ✅ Then **type a greeting ("hi")** — the 🐿️ door menu appears on a typed greeting, not on launch alone.
|
|
73
73
|
> Say **"Connect a project"** → hub scans `../`, finds `.git` directories, creates `tracks/{project}/`.
|
|
74
|
+
> For full initial setup (hooks · gates · baseline — each item individually approved, declining is
|
|
75
|
+
> respected and recorded), ask for **`/install-wizard`**.
|
|
76
|
+
> Already cloned somewhere else? That path *is* your hub — read every `~/projects/forge-harness`
|
|
77
|
+
> in the docs as your actual clone path.
|
|
74
78
|
|
|
75
79
|
**Your first 15 minutes** — what success looks like, and what to do with it:
|
|
76
80
|
|
|
@@ -275,7 +279,7 @@ All four movements ship. Temper was named before it was built — deliberately (
|
|
|
275
279
|
two more signatures keep it running: `harvest-loop` (each session's lessons become permanent skills) and
|
|
276
280
|
`agent-composer` (orchestrate the dispatch). The other skills wait until you need them — full list below.
|
|
277
281
|
|
|
278
|
-
##
|
|
282
|
+
## 40 skills · 8 agents
|
|
279
283
|
|
|
280
284
|
> Count = non-deprecated skills (deprecated redirect stubs — kept only for old-name routing — excluded).
|
|
281
285
|
|
|
@@ -309,6 +313,7 @@ two more signatures keep it running: `harvest-loop` (each session's lessons beco
|
|
|
309
313
|
| `convergence-loop` *(fh-commons)* | N-round convergence loops | "Single-pass seems suspicious" |
|
|
310
314
|
| `token-budget-gate` *(fh-commons)* | Pre-task token cost estimate | "How expensive is this?" |
|
|
311
315
|
| `mcp-circuit-breaker` *(fh-commons)* | MCP tool failure pattern detection | "MCP keeps failing" |
|
|
316
|
+
| `ko-tech-writer` *(fh-commons)* | Korean technical-writing pipeline (register calibration, translationese removal, honesty layering, perceptual QA) | "기술문서 써줘", "번역투 고쳐줘" |
|
|
312
317
|
| `quench-challenger` *(fh-commons)* | Adversarial pressure-test agent | "Challenge this with a devil" |
|
|
313
318
|
| *(+ additional assets)* | marketplace-gate · contention-layer · edit-manifest · fact-checker · goal-quench · hub-persona-auditor · install-doctor · memory-hygiene · persona-innovator · prompt-regression · public-surface-audit · salience-splitter | |
|
|
314
319
|
|
package/docs/codex-compat.md
CHANGED
|
@@ -124,7 +124,7 @@ The sibling pattern for Gemini is `gemini -p "$(cat <skill+artifact>)"`. Outside
|
|
|
124
124
|
|
|
125
125
|
| Tier | Under Codex | Action |
|
|
126
126
|
|---|---|---|
|
|
127
|
-
| **M1** | Runs fully (`token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop`) | `cat SKILL.md artifact \| codex exec -m gpt-5.5 -` |
|
|
127
|
+
| **M1** | Runs fully (`token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop`, `ko-tech-writer` (visual-QA steps degrade to text-only)) | `cat SKILL.md artifact \| codex exec -m gpt-5.5 -` |
|
|
128
128
|
| **M2** | Core runs; agent/slash steps via adapter (`deliberation`, `steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop`) | Substitute each dispatch with `fh-run` or a direct `codex exec` on the sub-agent's `.md` |
|
|
129
129
|
| **M3** | Does not run automatically | Use native Codex session features where available; otherwise read as methodology reference or use a dedicated adapter |
|
|
130
130
|
|
|
@@ -213,6 +213,17 @@ Temporary session change: say "use light mode for this one" or "switch to max".
|
|
|
213
213
|
> stories justify stay resident in CLAUDE.md; only the archaeology moved. Read this when you are about to
|
|
214
214
|
> *change* one of those rules — the failure that produced each one is the reason it reads the way it does.
|
|
215
215
|
|
|
216
|
+
**하류 remap 소유 규약 (2026-08-10, pmh-dev #54 — 임시방편이 아니라 정본 설계다)**: 인사
|
|
217
|
+
발화 문구와 규약 파일명(`fh_completed_*` 등)의 **문자열 정본은 FH가 소유**하고, 분기 설치
|
|
218
|
+
(조직 내부 반입 등)는 그 문자열을 자기 정체성으로 변환하는 **remap 집합을 자기 쪽에서
|
|
219
|
+
소유**한다 — 공유층 본문은 불변이며, 하류가 본문을 직접 고치면 드리프트로 계상된다. 따라서
|
|
220
|
+
FH에서 발화 문구·규약 파일명을 **추가하거나 바꾸는 변경은 하류 remap 통지를 같은 변경에
|
|
221
|
+
동반**해야 한다 — 프로브 `G-GREET-05`가 문구 리터럴을 고정해 무음 변경을 막는다(하류
|
|
222
|
+
설치에서 ④-log 검사기가 존재 불가능한 파일명을 3개월 보고 있던 오귀인이 이 규약의 실측
|
|
223
|
+
근거다 — pmh-dev #54).
|
|
224
|
+
갈림 판별 기준: **사용자-대면 발화이거나 게이트가 찾는 파일명이면 remap 대상, 환경변수·훅
|
|
225
|
+
스크립트명·npm bin 같은 기계 결합 이름은 불변**(변환하면 파손된다).
|
|
226
|
+
|
|
216
227
|
### Why the greeting branch test is session files, never git history
|
|
217
228
|
|
|
218
229
|
A fresh-clone Sonnet simulation rendered the **returning-user menu** to a brand-new install, because it
|
|
@@ -62,6 +62,16 @@ locality — review alone cannot show it (review reads all files; the runtime do
|
|
|
62
62
|
(Ahn · Kim): independent convergence on code-enforced behavioral contracts over prompt instructions;
|
|
63
63
|
their ablation shows code-owned enforcement blocks violations prompting alone permits. Cross-audit:
|
|
64
64
|
`tracks/_audit/session_2026_08_01_prompts-to-contracts-sister.md` (B-tier, 2 imports identified).
|
|
65
|
+
- **[arXiv 2605.23950 — "Stop Comparing LLM Agents Without Disclosing the Harness"](https://arxiv.org/abs/2605.23950)**
|
|
66
|
+
(Zhang · Wang · Ge · Xu · Hamm · Reddy, May 2026): formalizes the **Binding Constraint Thesis** —
|
|
67
|
+
for long-horizon agent tasks, harness configuration (context construction, tool orchestration,
|
|
68
|
+
verification) is often a stronger determinant of measured performance than the underlying model;
|
|
69
|
+
harness-induced variance can exceed model-induced variance enough to **reverse published model
|
|
70
|
+
rankings**, and leaderboard comparisons that omit harness disclosure are incomplete and potentially
|
|
71
|
+
misleading. This anchors the *locality* claim from the adjacent direction: an undisclosed or
|
|
72
|
+
misplaced harness doesn't just under-enforce a gate (the HANDBOOK.md anchor above), it can silently
|
|
73
|
+
swap which system gets credit for an outcome — the same failure shape as a gate firing in a file the
|
|
74
|
+
enforcing actor never loads.
|
|
65
75
|
|
|
66
76
|
These are external anchors for the **prose-vs-mechanical premise**; the locality claim itself
|
|
67
77
|
(N=2, one operator) still awaits direct cross-operator confirmation as named above.
|
|
@@ -114,6 +114,21 @@ This is the default failure mode when a skill chain has no return path defined.
|
|
|
114
114
|
|
|
115
115
|
---
|
|
116
116
|
|
|
117
|
+
## Verdict Extension (harvested from field use — pmh-dev@cbe3932, 2026-08-10)
|
|
118
|
+
|
|
119
|
+
The 4-tier enum is the floor, not the ceiling. A project may extend it (field precedent:
|
|
120
|
+
`WAVE_SKIP` / `WAVE_INSERT` for wave-orchestrating callers) under two rules:
|
|
121
|
+
|
|
122
|
+
- the extended enum is declared in the **callee's** SKILL.md verdict section — a verdict value the
|
|
123
|
+
emitter never documents is prose, not a contract;
|
|
124
|
+
- the caller maps **any verdict value it does not recognize to ESCALATE** — an unknown verdict is a
|
|
125
|
+
human-decision signal, never a silent PASS. (Same degrade direction as the typed-Verdict contract:
|
|
126
|
+
unparseable ⇒ escalate, never optimistic.)
|
|
127
|
+
|
|
128
|
+
Do NOT harvest the field's `[Verdict]` block output format — FH's typed contract (final-line
|
|
129
|
+
`Verdict:` literal, #318) is newer and stricter; two competing formats would reopen the
|
|
130
|
+
divergent-normalizer class.
|
|
131
|
+
|
|
117
132
|
## Relation to Other Patterns
|
|
118
133
|
|
|
119
134
|
- **Three-Doctor Loop** (`harness-doctor ↔ context-doctor ↔ sim-conductor`) uses return paths implicitly — each doctor's output triggers the next. A full Return-Path Gate implementation would make the fold-back explicit.
|
|
@@ -1725,3 +1725,75 @@
|
|
|
1725
1725
|
outcome: accepted
|
|
1726
1726
|
evidence: "조사① runner 5지점+정직술어 지목→#139 그대로 채택 · 조사② B1~B12 판정표→NOT READY 판정 근거 · 감사③ 핵심수치 전건 CONFIRMED+정정 8건→핸드오프 반영 · codex 5R 반증 12건 전건 수리(S→S→S/A→A/B→B 소진, #137·#138 머지)"
|
|
1727
1727
|
notes: "sidecar 수치 액면 미인용 — S급 전건 governor 소스 재판정(재현 후 수리). 조사 에이전트 위치주장은 구현 중 파일 직독으로 교차확인"
|
|
1728
|
+
|
|
1729
|
+
- date: 2026-08-10
|
|
1730
|
+
session: ifkakao-numeric-recheck
|
|
1731
|
+
agents_summary: "1 dispatch: general-purpose 격리 원문 대조(덱 수치-서사 32행, 읽기전용·재측정금지·대상동결 bc487df, bg)"
|
|
1732
|
+
dispatch_count: 1
|
|
1733
|
+
outcome: accepted
|
|
1734
|
+
evidence: "32행 판정(CONFIRMED 25·MISMATCH 2·PARTIAL 3·SNF 1) — MISMATCH 2건 전부 실물 확인 후 덱 수리(열세개 stale·행위자 귀속) · 착지 = ifkakao26_numeric_recheck_2026-08-10.md + CANON_LEDGER 3일차"
|
|
1735
|
+
notes: "에이전트 계기한계 자기신고(기록 대 기록·미러 최심부·grep 사각) 그대로 기록에 병기. MISMATCH 는 governor 가 마커/캡처 원문 재확인 후 수리"
|
|
1736
|
+
|
|
1737
|
+
- date: 2026-08-10
|
|
1738
|
+
session: qasp-anchor-provenance-day2
|
|
1739
|
+
agents_summary: "6 dispatches (consolidated): codex gpt-5.5 sidecar×6 (앵커 출처 증명 적대 6라운드 — R1 전면 · R2~R3 수리 반증 · R4~R6 수렴 확인, 전부 bg)"
|
|
1740
|
+
dispatch_count: 6
|
|
1741
|
+
outcome: accepted
|
|
1742
|
+
evidence: "반증 23건 → 수리 21 · 기각 1(A-4: List[str] 선재 크래시 + p35 fail-safe — R2 에서 실행 재현으로 반박받아 dict-repr 유출로 재분류 수용) · 명명 2. 곡선 S1A5B2→S1A3B3→A2B1→A1B1→A1→0 CONVERGED. 전건 governor 소스 재판정 후 수리 · R6 «S/A 소진» 명시 후 머지(qasp-dev #141, af244fa)"
|
|
1743
|
+
notes: "R2 S(오라클 반전)·R3 A2·R5 A1 은 전부 직전 수리의 산물 — «수리가 결함의 주된 출처» 재확증. degrade_direction_scan 은 사후 실행(advisory 620, 순서 위반 기록) — 종국 판정은 6R 이 담당"
|
|
1744
|
+
|
|
1745
|
+
- date: 2026-08-10
|
|
1746
|
+
session: ifkakao-coldread-reverify
|
|
1747
|
+
agents_summary: "1 dispatch: fh-meta:beginner 수리본 전체 콜드리드(청중 시점 추출본, 주석 차단, bg)"
|
|
1748
|
+
dispatch_count: 1
|
|
1749
|
+
outcome: accepted
|
|
1750
|
+
evidence: "HARD 3/SOFT 14 — 그중 Critical 1건을 governor 가 계기 아티팩트로 판정(주석 중간삽입→추출 절단, 원문 재확인) · 실결함 8건 운영자 승인 수리 · 프로브 5문 응답 전건 처분"
|
|
1751
|
+
notes: "응시자 오귀속 아님 — 계기 결함(blind_separation 규율 적용). 추출본 known-pair 유출검사 선행"
|
|
1752
|
+
|
|
1753
|
+
- date: 2026-08-10
|
|
1754
|
+
session: qasp-anchor-provenance-day2-round2
|
|
1755
|
+
agents_summary: "4 dispatches (consolidated): codex gpt-5.5 sidecar×4 (라운드2 적대 4라운드 — R1 전면 · R2~R3 수리 반증 · R4 수렴 확인, 전부 bg)"
|
|
1756
|
+
dispatch_count: 4
|
|
1757
|
+
outcome: accepted
|
|
1758
|
+
evidence: "반증 12건 전건 수리(곡선 S2A2→A4→A2→0 CONVERGED) — reach 분모 소실 S(선재 결함 표면화)·다이어트 전이 소실 S 는 적대 실행-재현을 수용해 설계 완화. 머지 qasp-dev #142(a7523b5)"
|
|
1759
|
+
notes: "이번 캠페인도 신규 결함 다수가 직전 수리 산물(dup 병합 낙관·desc truthiness) — «수리가 결함의 주된 출처» 4연속. 프로브 계상 경계(시험관 제공 환경 vs qasp 발화)는 정답키 v3 §3 에 명문화해 자기채점 부풀리기 차단"
|
|
1760
|
+
|
|
1761
|
+
- date: 2026-08-10
|
|
1762
|
+
session: ifkakao-recheck-coldread (재등재 — 미커밋 append 가 공유 체크아웃 피어 작업에 소실된 2건 + 후속)
|
|
1763
|
+
agents_summary: "3 dispatches (consolidated): general-purpose 원문대조 32행(bg) · fh-meta:beginner 콜드리드(bg) · Explore 역수확 인벤토리 13건(bg)"
|
|
1764
|
+
dispatch_count: 3
|
|
1765
|
+
outcome: accepted
|
|
1766
|
+
evidence: "원문대조 CONFIRMED25/MISMATCH2→수리 · 콜드리드 HARD3(1건=계기 아티팩트 판정)→8건 운영자 승인 수리 · 인벤토리 13건→HARVEST 판정표(#9 오보는 이식 직전 자력 적발)"
|
|
1767
|
+
notes: "원장 append 즉시-커밋 규율 위반으로 초판 2건 소실(공유 체크아웃) — 이번 재등재는 전용 브랜치 즉시 커밋"
|
|
1768
|
+
|
|
1769
|
+
- date: 2026-08-10
|
|
1770
|
+
session: ifkakao-harvest-prABCD
|
|
1771
|
+
agents_summary: "8 dispatches (consolidated): fh-meta:challenger×2(PR A seam·PR C rtk, 격리) · codex gpt-5.5 sidecar×6(PR A 4R + PR B 1R + 초기 1회 flag 누락 재시도)"
|
|
1772
|
+
dispatch_count: 8
|
|
1773
|
+
outcome: accepted
|
|
1774
|
+
evidence: "PR A: challenger M4S5R5 + codex M6S3R2→M3S2→M1S1→M1S1 전건 수리/경계명명, 레인 34 · PR B: codex M6S3 전건 수리, 스모크 6/6 · PR C: challenger S2R5 수리, 실측 68.3% · 전부 머지 대기 PR #322-325"
|
|
1775
|
+
notes: "codex git-밖 실행은 --skip-git-repo-check 필수(메모리 재확인) · 수렴 정체 시 «조이지 말고 줄여라» 적용 1회(파서 경계 명명)"
|
|
1776
|
+
|
|
1777
|
+
- date: 2026-08-10
|
|
1778
|
+
session: qasp-condition-forming-first-detection
|
|
1779
|
+
agents_summary: "3 dispatches: codex gpt-5.5 sidecar×3 (액션 스텝 정착 리트라이 적대 3라운드 — R1 전면 · R2 수리반증 · R3 수렴확인, 전부 bg)"
|
|
1780
|
+
dispatch_count: 3
|
|
1781
|
+
outcome: accepted
|
|
1782
|
+
evidence: "R1 4건(S1A1B2) — [S] @absent 방향 뒤집힘이 governor 사전 예측과 일치(«재관측이 부재=PASS를 뒤집나»). 전건 수리 → R2 B1 → R3 «S/A 소진 CONVERGED». 머지 #145(ff62881), 검출 0→1 클린(R-10.1 ∧ KN PASS)"
|
|
1783
|
+
notes: "governor가 디스패치 전 위험(@absent 방향)을 명시 예측했고 sidecar가 실행 재현으로 확증 — 예측·검증 분리의 실측 사례. F-TC=팬텀 감사기 findings라는 진단 반전이 이 세션 최대 발견(검출 뿌리가 오라클 오염이었음)"
|
|
1784
|
+
|
|
1785
|
+
- date: 2026-08-10
|
|
1786
|
+
session: ko-tech-writer-skill-shipment
|
|
1787
|
+
agents_summary: "3 dispatches: fh-meta:challenger R1 (신규 SKILL 적대검토) · claude@sonnet 블라인드 sim (심은 결함 3종 known-pair) · fh-meta:challenger R2 (수리 검증, bg)"
|
|
1788
|
+
dispatch_count: 3
|
|
1789
|
+
outcome: accepted
|
|
1790
|
+
evidence: "sim: 심은 결함 3/3 검출·수리 + 창 없는 90%를 미확인 라벨 처리(창 조작 안 함) + 음성 컨트롤 무매치 + 모호 지점 4건 전부 실결함으로 수리 · challenger R1: M2 S6 R5 전건 수리(가짜-measured 분리 · 불가-탈출구 봉인 · 분모 기계화 · 격리 정의) — R1 #7(placement-gate 미이행)은 운영자 질문과 동시 적발되어 게이트 정식 실행 → fh-commons 이동"
|
|
1791
|
+
notes: "설계자≠응시자 known-pair가 스킬 판별력을 커밋 전에 실증 — 신규 스킬 출하의 표준 절차 후보. 운영자 지적으로 ko- 접두(언어 범위 정직 명명)"
|
|
1792
|
+
|
|
1793
|
+
- date: 2026-08-10
|
|
1794
|
+
session: qasp-detect-expansion-gugan2
|
|
1795
|
+
agents_summary: "11 dispatches (consolidated): Explore R-10.1 파이프라인 지도화(bg) · codex gpt-5.5 sidecar×10 (구간 2 적대 R1~R10 — 술어 3종·힌트·measured 레인)"
|
|
1796
|
+
dispatch_count: 11
|
|
1797
|
+
outcome: accepted
|
|
1798
|
+
evidence: "Explore 지도가 «R-10.1=하위호환 unknown 레인·P7 는 그 경로 못 탐·R-4.3 은 sourced 가능» 3판정을 사전 특정 — 구현이 그 지도 그대로 감. codex 10R: S10·A7·B9 중 수용 21·기각 2(스펙 근거), R10 «신규 없음» CONVERGED. 라이브 자기적발 1(전제 미형성 FAIL 이 이슈 오발화 — 1차 주행에서 즉시 실측). 머지 #146(7cb45ac), 검출 1→4"
|
|
1799
|
+
notes: "R5~R8 네 라운드가 전부 R3 증거-짝 수리의 후속 결함(«수리가 결함의 주된 출처» 4연쇄 실측) · R9 는 codex 가 내 회귀 레인의 공허성(.opine 계약 미준수로 단언 미실행)을 적발 — 레인 자체가 검증 대상이라는 사례"
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 하네스가 조직 지식층(조직 위키·도메인 문서)에서 무엇을 기대하는지 정의하는 계약. 조직은 이 계약만 만족하면 쓰던 위키를 그대로 매핑한다 — 포크가 아니라 매핑이 1차 경로다. 소비자 배선 현황과 미배선 사실을 함께 명시한다.
|
|
3
|
+
provenance: pmh-dev@cbe3932 knowledge/shared/rules/knowledge_layer_seam.md 역수확(2026-08-10) — 조직 고유 식별자 범용화 · 배선 현황을 FH 실상으로 교체. 원 계약의 자기정정 이력(K2 임계 UNCALIBRATED · conform 경로)은 보존.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 지식층 Seam — 하네스 ↔ 조직 위키 계약
|
|
7
|
+
|
|
8
|
+
## 왜 이 문서가 있나
|
|
9
|
+
|
|
10
|
+
하네스는 방법론과 게이트를 준다. 그것이 *무엇에 대해* 판단할지는 **조직 맥락**에서 온다.
|
|
11
|
+
|
|
12
|
+
**그런데 "쓰던 위키가 있으면 그걸 쓰세요"는 계약이 없으면 말로만 참이다.** 무엇을 만족해야
|
|
13
|
+
"쓸 수 있는" 것인지 적혀 있지 않으면 조직은 결국 처음부터 다시 만든다. 이 문서가 그 계약이다.
|
|
14
|
+
|
|
15
|
+
**관측 사실(원 필드, 2026-07-19~20)**: 4비트 양자화 로컬 모델이 이 계약 위에서 BUILD를
|
|
16
|
+
완주했다 — 구현·스킬 인큐베이팅·PR 개설까지(저자 정체성으로 런 분리).
|
|
17
|
+
⚠️ **인과는 분리되지 않았다**: 그 완주에 지식층이 얼마나 기여했는지는 **측정되지 않았다**
|
|
18
|
+
(스킬·게이트·운영자 교정이 함께 작용했다). 어블레이션 없이 "맥락층이 원인"이라 주장하지 않는다.
|
|
19
|
+
계약 문서는 *효과*를 증명할 필요가 없고 **무엇이 없으면 무엇이 깨지는지**만 정의하면 된다.
|
|
20
|
+
|
|
21
|
+
## 0. 배선 현황 (FH 기준)
|
|
22
|
+
|
|
23
|
+
| 소비자 | 무엇을 읽나 | 언제 | 상태 |
|
|
24
|
+
|---|---|---|---|
|
|
25
|
+
| `phantom-quench` **Step 2-O** | 진입 인덱스(`INDEX.md`/`index.md`/`README.md`/`readme.md` — 판정기와 동일 후보) → 후보 페이지 | **도메인 주장**(조직 고유 사실·용어·정책)이 Step 2 에서 **미선언**일 때 | ✅ **배선됨** (2026-08-10 역수확, FH 1호) |
|
|
26
|
+
| `steel-quench` Step 0.35 | 진입 인덱스(위와 동일 후보) → 관련 정책·용어·도메인 사실 | 공격 각도를 정하기 전 | ❌ **미배선** — 원 필드에 선례가 있는 후보이며, FH 에는 아직 없다. 배선되기 전까지 이 행은 약속이 아니라 후보다 |
|
|
27
|
+
|
|
28
|
+
**1호 소비자 배선의 의미**: 그전까지 도메인 주장은 로컬 선언 파일에도 외부 인용에도 안 걸려
|
|
29
|
+
**전부 🔴 Source-Missing 으로 떨어졌다** — 조직 지식층이 정확히 그 근거인데 탐색 경로에 없었다.
|
|
30
|
+
|
|
31
|
+
**이 배선이 계약의 어느 조항을 실제로 쓰는가** (조항이 장식이 아님을 보이는 표):
|
|
32
|
+
|
|
33
|
+
| 계약 조항 | Step 2-O 에서의 쓰임 |
|
|
34
|
+
|---|---|
|
|
35
|
+
| K2 진입 인덱스 | 진입 인덱스를 먼저 읽는다 — **전수 스캔 안 함** |
|
|
36
|
+
| K3-f `review_after` | 경과 시 **Grounded 가 아니라 Partial** — stale 근거는 근거가 아니다 |
|
|
37
|
+
| §1-a 충돌 우선순위 | 조직 위키의 판정 규칙이 스킬 판정을 **못 덮는다**, 충돌은 보고에 명시 |
|
|
38
|
+
| K1-s 반출 금지 | 조직층 원문은 외부 fetch/dispatch 로 **안 나간다** |
|
|
39
|
+
| §6 degrade | `{org}/` 부재 = **UNMEASURED**, 🔴 유지. "맥락 없음"이지 "근거 없음 확정" 아님 |
|
|
40
|
+
|
|
41
|
+
## 1. 경로 규약 — seam은 디렉터리다
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
knowledge/
|
|
45
|
+
├── shared/ 조직 불변. 하네스 레포에서 온다(§4 획득 경로 주의). 조직이 편집하지 않는다.
|
|
46
|
+
└── {org}/ 조직 맥락. 조직이 소유한다. 하네스는 읽기만 한다.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**빈 슬롯도 규약이다.** `knowledge/{org}/`가 비어 있으면 "맥락 없음"이지 "맥락 불필요"가 아니다.
|
|
50
|
+
에이전트는 **맥락 부재를 명시**해야 하며, 없는 맥락을 추론으로 메우지 않는다.
|
|
51
|
+
|
|
52
|
+
### 1-a. 충돌 우선순위 — 가장 비싼 실패 모드
|
|
53
|
+
|
|
54
|
+
`{org}/`은 **무엇**(도메인 사실·용어·정책)만 공급한다. **어떻게 판정하나**는 공급하지 않는다.
|
|
55
|
+
|
|
56
|
+
> **shared/의 게이트·floor·판정 규칙을 `{org}/`이 덮어쓸 수 없다. 충돌 시 shared 우선 + 충돌 사실 명시.**
|
|
57
|
+
|
|
58
|
+
이 줄이 없으면 다음이 일어난다: org 위키에 "핫픽스는 main 직푸시" 같은 로컬 관행이 있고 shared
|
|
59
|
+
게이트는 금지인데, 에이전트가 "org 맥락이 더 구체적"이라 판단해 **게이트를 우회한다.** 조직 맥락
|
|
60
|
+
도입의 가장 비싼 실패 모드이며, 우선순위가 없으면 무방비다.
|
|
61
|
+
|
|
62
|
+
## 2. 하네스가 기대하는 것 (최소 계약)
|
|
63
|
+
|
|
64
|
+
| # | 기대 | 필수? | 이유 |
|
|
65
|
+
|---|---|---|---|
|
|
66
|
+
| K1 | **마크다운 디렉터리** — 에이전트가 읽을 수 있는 경로 | **필수** | 없으면 아무것도 성립 안 함 |
|
|
67
|
+
| K1-s | **유입 스크럽** — 동기화 시점에 시크릿/PII 스캔 통과, 실패 시 **fail-closed**(부분 동기화 금지) | **필수** | seam은 조직 데이터가 모델 컨텍스트로 들어오는 **바로 그 지점**이다 |
|
|
68
|
+
| K2 | **진입 인덱스 1개**(`INDEX.md`/`index.md`/`README.md`/`readme.md` — 판정기 후보와 동일, 대소문자는 Linux 에서 유효) **존재**. 규모가 커지면 섹션 인덱스로 분기 | **필수(존재)** | 전수 스캔은 토큰을 태운다. 단 평면 대형 인덱스도 같은 문제다 |
|
|
69
|
+
| K2-c | 인덱스 **크기 보고**(자수·추정 토큰) — **임계는 미측정이라 판정 근거로 쓰지 않는다** | 보고 | ⚠️§2-c 참조 |
|
|
70
|
+
| K3 | **파일당 1줄 설명** — frontmatter `description:` **또는** 인덱스에 그 파일 상대경로 **+ 설명 텍스트**가 있는 줄(경로만 나열된 줄은 불인정). **수기·생성기 산출 모두 인정** | **필수** | 열기 전 관련성 판별의 유일 수단 |
|
|
71
|
+
| K3-d | **최종갱신일** — frontmatter `date:`/`updated:`/`last_updated:` | **권장** (누락 = §6 degrade: stale 판정 불가 → `미상` 보고, 차단 아님) | 날짜는 §6 stale 판정의 근거. ⚠️ 초판이 K3 에 «필수»로 합쳐 적어 판정기(WARN·비차단)와 모순됐다 — 쪼개서 정직하게 |
|
|
72
|
+
| K3-f | **`review_after:`** — 이 페이지를 재검토해야 하는 기한(날짜). `date`(과거 — 마지막으로 손댄 날)와 달리 **미래를 향한 신선도 계약**이다 | 권장 | Step 2-O 의 **Grounded** 판정 전제 — 이 필드가 없으면 슬롯 히트도 Partial 상한(신선도 미상). ⚠️ 초판엔 §0 표에만 등장하고 여기 정의가 없었다(팬텀 조항) — 판정기가 보유율을 INFO 로 보고한다 |
|
|
73
|
+
| K4 | **파생 인덱스 자동 갱신** | 경로1 권장 / **경로2·3 필수** | 기존 대형 위키에 사람이 수백 줄을 쓰게 하면 1차 경로가 역차별된다 — 스크립트가 쓴다 |
|
|
74
|
+
| K5 | `llms.txt` | 선택 | 외부 에이전트 진입 표면 |
|
|
75
|
+
| K6 | 읽기전용 MCP(`*_index`/`*_get`/`*_search`) | 선택 / **경로4 필수** | 파일시스템 접근이 없는 런타임·비문서 소스용 |
|
|
76
|
+
|
|
77
|
+
**진입 장벽을 낮게 두는 것이 이 계약의 목적이다.** 그래서 K3의 비용은 K4로 옮길 수 있게 열어뒀다.
|
|
78
|
+
|
|
79
|
+
## 2-c. ⚠️ K2 임계는 UNCALIBRATED 다 (원 계약의 자기정정 — 이력째 보존)
|
|
80
|
+
|
|
81
|
+
원 계약 초안은 **"≤200줄"** 을 필수 조건으로 걸었다. **그 숫자에 유도 과정이 없었다 — 지어낸
|
|
82
|
+
것이다.** 인용할 수 없는 임계는 판정 근거가 아니다. **게다가 줄수는 나쁜 계기다** — 실측
|
|
83
|
+
(2026-07-21, 실물 위키 974 파일): 인덱스가 **337줄인데 약 23k 토큰**이었다(줄당 143자).
|
|
84
|
+
비용은 토큰인데 줄로 재고 있었다.
|
|
85
|
+
|
|
86
|
+
**현재 규약**: 존재는 필수(K2) · 크기는 보고(K2-c — PASS/FAIL 근거로 쓰지 않는다) ·
|
|
87
|
+
분기 판단은 조직이 자기 예산으로. **임계를 되살리려면** 인덱스 크기와 (a) 관련성 판별 정확도
|
|
88
|
+
(b) 세션 토큰 예산의 관계를 실측해야 한다. 그 전까지 `UNCALIBRATED` 다.
|
|
89
|
+
|
|
90
|
+
## 3. 채택 경로 (다섯)
|
|
91
|
+
|
|
92
|
+
| 상황 | 경로 |
|
|
93
|
+
|---|---|
|
|
94
|
+
| **위키가 없다** | 조직 표준 LLM-위키 템플릿(있다면)을 포크해 `knowledge/{org}/`로 매핑 — 구조가 K1–K3 를 만족하도록 |
|
|
95
|
+
| **위키가 있다 (git)** | submodule 또는 동기화로 붙인다. 미충족분만 보충 + **K4 필수** |
|
|
96
|
+
| **위키가 있다 (비-git: 컨플루언스 등)** | export → 마크다운 → 동기화. **4항 명시 필수**: export 주체 · 주기 · 산출 경로 · 실패 시 동작(fail-closed). **K4 필수** |
|
|
97
|
+
| **문서 자체가 없다** (맥락이 티켓·채팅·코드 주석에만) | 주기 추출로 마크다운 스냅샷 생성, 또는 **K6 MCP로 노출**. K4·K6 필수 |
|
|
98
|
+
| **이미 위키가 있고 그 자리에서 계약에 맞춘다**(옮기지 않고 독립 운영) | **`conform`** — 부족분(설명·날짜)만 **생성기로 백필**. 새로 만들거나 이전하지 않는다 |
|
|
99
|
+
|
|
100
|
+
다섯 경로가 **같은 계약 위에 선다.** 그래서 "쓰던 걸 쓰세요"가 실제로 성립한다.
|
|
101
|
+
|
|
102
|
+
### 3-c. `conform` — 도그푸딩이 찾은 다섯 번째 경로 (원 필드 실측)
|
|
103
|
+
|
|
104
|
+
초안의 네 경로는 전부 **"위키를 어떻게 확보하나"** 였다(포크·매핑·export·추출). 그런데 계약을
|
|
105
|
+
처음 실물에 먹여본 대상(974 파일 개인 위키)은 넷 중 아무것도 아니었다 — 이미 있었고, 옮길 데도
|
|
106
|
+
없고, **그 자리에서 계약에 맞추면 되는** 경우였다. 아마 가장 흔한 실제 경우다.
|
|
107
|
+
`conform` 의 비용은 사람이 아니라 **생성기**가 낸다(K4 의 존재 이유). 실측: **설명 누락
|
|
108
|
+
406 → 0 · 날짜 누락 547 → 6.** 백필 도구가 96%를 처리했고, 본문에서 파생할 수 없는 9건은
|
|
109
|
+
**지어내지 않고 남겨서** 사람이 썼다. 그게 옳은 분업이다.
|
|
110
|
+
|
|
111
|
+
## 4. 포크가 아니라 매핑이 1차
|
|
112
|
+
|
|
113
|
+
원칙: **맥락 때문에 하네스를 포크하지 않는다.** 맥락은 `{org}/`에만 있으므로 그 디렉터리
|
|
114
|
+
매핑으로 충분하다. 포크는 하네스 자체를 개조할 때, 그리고 아래 예외에만.
|
|
115
|
+
|
|
116
|
+
**예외 — 폐쇄망 벤더링**: 배포 채널을 당길 수 없는 망 분리 조직에겐 버전 고정 vendored 복사가
|
|
117
|
+
유일 경로다. 그 경우 **upstream diff 주기를 명시**(예: 분기)하고 drift를 의도된 비용으로
|
|
118
|
+
관리한다.
|
|
119
|
+
|
|
120
|
+
## 5. 한 레포 = 한 **기밀 경계** (조직 수가 아니라)
|
|
121
|
+
|
|
122
|
+
*"위키 하나에 모든 조직 맥락을 모으면 안 되나"* — 기준은 **조직**이 아니라 **기밀 경계**다.
|
|
123
|
+
|
|
124
|
+
- **한 조직 안에서도 경계가 갈리면 쪼갠다** (공개 OSS 맥락 + 조직 기밀이 한 곳에 섞이면 조직이
|
|
125
|
+
하나여도 residency가 깨진다).
|
|
126
|
+
- **같은 경계를 공유하는 복수 조직은 `{org}/` 분리로 허용** (지주사·자회사 등).
|
|
127
|
+
- **예시/시드 org(`example/`)는 명시적 예외** — 없으면 워크드 예시조차 못 싣는다.
|
|
128
|
+
|
|
129
|
+
**메타층에 있어야 할 것은 맥락이 아니라 스키마의 스키마와 시드다** — 구체 스키마는 org가 소유한다.
|
|
130
|
+
|
|
131
|
+
## 6. Degrade 방향
|
|
132
|
+
|
|
133
|
+
| 상황 | 방향 |
|
|
134
|
+
|---|---|
|
|
135
|
+
| `knowledge/{org}/` 부재 | **맥락 부재를 명시하고 진행.** 추론으로 메우지 않는다 |
|
|
136
|
+
| 인덱스(K2) 부재 | 전수 스캔하지 않는다 — 부재 보고 + 인덱스 생성 제안 |
|
|
137
|
+
| 날짜(K3-d) 부재 | stale 판정 불가 → **`미상`으로 보고**. 최신으로 가정하지 않는다 |
|
|
138
|
+
| 위키는 있으나 stale | **stale 명시.** 최신인 척하는 것이 없는 것보다 나쁘다 |
|
|
139
|
+
| 매핑 실패(경로·권한) | 조용히 빈 결과로 진행하지 않는다 — **실패로 보고** |
|
|
140
|
+
| 스크럽(K1-s) 실패 | **fail-closed** — 부분 동기화 금지 |
|
|
141
|
+
|
|
142
|
+
공통: **부재와 실패는 0이 아니다.** 낮은 값은 PASS처럼 읽히므로 명시적으로 구분한다.
|
|
143
|
+
|
|
144
|
+
## Done When
|
|
145
|
+
|
|
146
|
+
- `knowledge/{org}/`가 K1·K2·K3를 만족한다
|
|
147
|
+
(check class: **mandatory-pass** — `scripts/knowledge_seam_check.sh`가 기계 판정,
|
|
148
|
+
known-pair 레인 = `scripts/test_knowledge_seam_lanes.sh` 34레인(권한 3레인은 root 실행 시 skip).
|
|
149
|
+
**exit 계약이 판정이다**: `0`=PASS · `1`=FAIL · `3`=UNMEASURED(부재/빈슬롯/내용 페이지 0건 —
|
|
150
|
+
보일러플레이트만으로 PASS 를 살 수 없다) · `4`=READ-FAIL(경로/권한 — §6 «실패로 보고»).
|
|
151
|
+
호출자는 3·4 를 명시 처리한다 — 0/비0 이분법에서 3·4 는 FAIL 쪽으로 떨어진다(안전 방향))
|
|
152
|
+
- **K1-s(유입 스크럽)는 이 판정기의 범위 밖이다 — 미기계화를 명시한다**
|
|
153
|
+
(check class: **judged — 미기계화**. 스크럽은 각 채택 경로(§3)의 동기화 도구 소관이며,
|
|
154
|
+
이 계약은 «실패 시 fail-closed» 요구까지만 정의한다. 판정기가 이것까지 초록으로 보이게
|
|
155
|
+
하지 않도록 여기 명시 — 스크럽 없는 동기화는 K1-s 위반이고, 그 검증은 동기화 파이프라인의
|
|
156
|
+
레인이 진다)
|
|
157
|
+
- 채택 경로가 `knowledge/{org}/SEAM.md` frontmatter에 기록된다:
|
|
158
|
+
`adoption_path: fork|git-map|export-sync|extract|conform` + `synced_at: YYYY-MM-DD`
|
|
159
|
+
(check class: **mandatory-pass** — 같은 스크립트가 frontmatter 위치·값 경계·날짜 형식까지 검사)
|
|
160
|
+
- 맥락 부재 시 에이전트가 그것을 명시한다
|
|
161
|
+
(check class: **judged** — 적대 짝: `tests/seam_absence_probes.md`의 고정 프롬프트 5건을
|
|
162
|
+
맥락 없는 상태로 주고 **추론으로 메우는지** 관찰. 합격 = **5/5 명시적 부재선언**.
|
|
163
|
+
⚠️ 이 짝은 §6이 에이전트가 읽는 자리에 인라인되기 전까지는 **구조적으로 통과가 어렵다** —
|
|
164
|
+
gate-locality: 규칙이 행위자가 안 읽는 파일에 있으면 장식이다. Step 2-O 가 §6 의 핵심
|
|
165
|
+
행(부재=UNMEASURED)을 스킬 본문에 인라인한 것이 그 1차 처방이다)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrono-meta/fh-gate",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.93",
|
|
4
4
|
"description": "FH runtime adapters — run FH governance, skills, and agents via Claude or Codex with machine-parseable gates.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -91,6 +91,10 @@
|
|
|
91
91
|
"scripts/tier_census_grep.sh",
|
|
92
92
|
"scripts/test_marker_floor_lanes.sh",
|
|
93
93
|
"scripts/test_marker_crossfamily_lanes.sh",
|
|
94
|
+
"scripts/test_marker_axes_run_lanes.sh",
|
|
95
|
+
"scripts/test_env_purity_lanes.sh",
|
|
96
|
+
"scripts/.env_purity_tokens.defaults",
|
|
97
|
+
"scripts/env_purity_scan.sh",
|
|
94
98
|
"scripts/directional_diff_gate.sh",
|
|
95
99
|
"scripts/reviewer_capability_corpus.tsv",
|
|
96
100
|
"scripts/test_reviewer_capability_conformance.sh",
|
|
@@ -175,6 +179,11 @@
|
|
|
175
179
|
"scripts/field_canon_preload.sh",
|
|
176
180
|
"scripts/test_field_canon_lanes.sh",
|
|
177
181
|
"templates/settings.FieldCanon.snippet.json",
|
|
178
|
-
".claude/judgment_circuits.txt"
|
|
182
|
+
".claude/judgment_circuits.txt",
|
|
183
|
+
"scripts/knowledge_seam_check.sh",
|
|
184
|
+
"scripts/test_knowledge_seam_lanes.sh",
|
|
185
|
+
"tests/seam_absence_probes.md",
|
|
186
|
+
"scripts/gate_anchor_check.sh",
|
|
187
|
+
"scripts/rtk_gross_ablation.sh"
|
|
179
188
|
]
|
|
180
189
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fh-commons",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.93",
|
|
4
4
|
"engines": {
|
|
5
5
|
"claudeCode": ">=1.0.0"
|
|
6
6
|
},
|
|
7
|
-
"description": "Cross-project utility skill bundle —
|
|
7
|
+
"description": "Cross-project utility skill bundle — 5 skills + 1 agent. Domain-agnostic and portable: convergence-loop, deliberation, mcp-circuit-breaker, token-budget-gate, ko-tech-writer + quench-challenger agent.",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "chrono-meta",
|
|
10
10
|
"email": "chrono-meta@users.noreply.github.com"
|
|
@@ -21,6 +21,7 @@ When the `contention-layer` skill harvests contentions and generates new skill c
|
|
|
21
21
|
|---|---|---|
|
|
22
22
|
| `convergence-loop` | General-purpose gate reinforcement that replaces single-pass structures with a convergence loop of up to N rounds | harvest-loop (recurring single-pass-distrust pattern across hub gates) |
|
|
23
23
|
| `deliberation` | Innovator → Devil-Advocate → Mediator 3-layer multi-perspective synthesis. Generates conditional verdicts without binary win/loss | Migrated from fh-meta (2026-05-23 — domain-agnostic general decision structure) |
|
|
24
|
+
| `ko-tech-writer` | Korean technical-writing pipeline — register detection, venue calibration, translationese scan, honesty layering, number/claim gate, perceptual QA | Field-session harvest (2026-08-10 — conference tech-doc revision session, operator-driven shipping) |
|
|
24
25
|
|
|
25
26
|
## The `origin` Field
|
|
26
27
|
|