@chrono-meta/fh-gate 3.1.4 → 3.4.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.
Files changed (69) hide show
  1. package/.claude/registry/agent_cards.json +1 -1
  2. package/.claude/rules/fh_4axis_gate.md +26 -1
  3. package/.claude-plugin/marketplace.json +3 -3
  4. package/AGENTS.md +8 -2
  5. package/CATALOG.md +4 -4
  6. package/CHEATSHEET.md +1 -1
  7. package/CLAUDE.md +54 -10
  8. package/README.ja.md +3 -3
  9. package/README.ko.md +3 -3
  10. package/README.md +3 -3
  11. package/README.zh.md +3 -3
  12. package/docs/OUTPUT_EVIDENCE.md +2 -2
  13. package/docs/STANDARDS_ALIGNMENT.md +1 -1
  14. package/docs/codex-compat.md +1 -1
  15. package/knowledge/shared/harness-core/agents_md_runtime_details.md +2 -2
  16. package/knowledge/shared/harness-core/claude_md_gate_details.md +26 -0
  17. package/knowledge/shared/harness-core/fh_three_layer_canon.md +1 -1
  18. package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +76 -3
  19. package/knowledge/shared/harness-core/governance_engineering_definition.md +89 -0
  20. package/knowledge/shared/harness-core/iso_ai_standards_crosswalk.md +1 -1
  21. package/knowledge/shared/harness-core/skill_quality_rubric.md +1 -1
  22. package/knowledge/shared/learnings/subagent_invocations_log.yaml +99 -0
  23. package/knowledge/shared/rules/auto_project_mapping.md +1 -1
  24. package/knowledge/shared/rules/modes_and_value.md +2 -2
  25. package/package.json +12 -1
  26. package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
  27. package/plugins/fh-commons/README.md +38 -0
  28. package/plugins/fh-commons/skills/preprep/SKILL.md +23 -0
  29. package/plugins/fh-commons/skills/preprep/fixtures/font_revert_probe.py +92 -0
  30. package/plugins/fh-commons/skills/preprep/lane_font.py +462 -0
  31. package/plugins/fh-commons/skills/preprep/preprep.py +16 -1
  32. package/plugins/fh-commons/skills/preprep/surfaces.example.yaml +17 -0
  33. package/plugins/fh-commons/skills/preprep/test_lane_font.py +452 -0
  34. package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
  35. package/plugins/fh-meta/CHANGELOG.md +164 -0
  36. package/plugins/fh-meta/skills/agent-composer/SKILL.md +2 -2
  37. package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +40 -0
  38. package/plugins/fh-meta/skills/frontier-digest/SKILL.md +1 -1
  39. package/plugins/fh-meta/skills/frontier-digest/SKILL_detail.md +43 -5
  40. package/plugins/fh-meta/skills/{hub-cc-pr-reviewer → harness-pr-reviewer}/SKILL.md +75 -3
  41. package/plugins/fh-meta/skills/{hub-cc-pr-reviewer → harness-pr-reviewer}/SKILL_detail.md +2 -2
  42. package/plugins/fh-meta/skills/harvest-loop/SKILL_detail.md +2 -2
  43. package/plugins/fh-meta/skills/install-doctor/SKILL.md +1 -1
  44. package/plugins/fh-meta/skills/install-wizard/SKILL.md +1 -1
  45. package/plugins/fh-meta/skills/meta-prompt-builder/SKILL.md +1 -1
  46. package/plugins/fh-meta/skills/pipeline-conductor/SKILL.md +1 -1
  47. package/plugins/fh-meta/skills/plugin-recommender/SKILL.md +1 -1
  48. package/plugins/fh-meta/skills/sim-conductor/SKILL.md +1 -1
  49. package/plugins/fh-qp/.claude-plugin/plugin.json +1 -1
  50. package/scripts/doc_claim_triad_scan.py +303 -0
  51. package/scripts/finding_fleet.sh +558 -0
  52. package/scripts/finding_pipeline.sh +572 -0
  53. package/scripts/finding_verifier.sh +173 -0
  54. package/scripts/finding_verify.py +468 -0
  55. package/scripts/frontier_digest_autopilot.sh +3 -3
  56. package/scripts/gate_pathspec_check.sh +1 -0
  57. package/scripts/gate_shape_scan.sh +120 -0
  58. package/scripts/selfcheck.sh +50 -0
  59. package/scripts/test_doc_claim_triad_lanes.sh +124 -0
  60. package/scripts/test_finding_pipeline_lanes.sh +2011 -0
  61. package/scripts/test_gate_shape_scan_lanes.sh +47 -0
  62. package/scripts/test_heavy_classifier_lanes.sh +13 -3
  63. package/scripts/test_marker_crossfamily_lanes.sh +75 -3
  64. package/scripts/test_marker_standpoint_lanes.sh +31 -6
  65. package/scripts/test_preprep_font_lanes.sh +87 -0
  66. package/templates/.git-hooks/pre-commit +158 -11
  67. package/templates/PRE-PUBLISH-CHECKLIST.md +29 -0
  68. package/templates/local_fh_context.md +1 -1
  69. package/templates/regression_guard.sh +1 -1
@@ -50,7 +50,7 @@
50
50
  "file": "plugins/fh-meta/agents/hub-persona-auditor.md",
51
51
  "role": "Pre-publication audit of external-facing assets — 3+ persona simulation, 4-axis review (resonance/confusion/resistance/supplement), 3-tier revision proposals",
52
52
  "allowed_tools": ["Read", "Grep", "Glob"],
53
- "invoked_by": ["hub-cc-pr-reviewer", "sim-conductor", "direct"],
53
+ "invoked_by": ["harness-pr-reviewer", "sim-conductor", "direct"],
54
54
  "writes": false
55
55
  },
56
56
  {
@@ -45,7 +45,7 @@ paths:
45
45
 
46
46
  ## FH Improvement 4-Axis Auto-Gate (Self-Verification Orchestrator)
47
47
 
48
- **Whenever the AI modifies FH assets** (SKILL.md · **`SKILL_detail.md`** · `.claude/rules/*.md` · `knowledge/shared/rules/*.md` (relocated protocol rules — always full-gate, NOT under the knowledge carve-out) · `templates/` · `CLAUDE.md` · substantive `knowledge/` docs · substantive `docs/*.md` · `AGENTS.md` · `scripts/**/*.sh` · agent definitions (`plugins/*/agents/**/*.md` · `.claude/agents/**/*.md`) — see Substantive carve-out below),
48
+ **Whenever the AI modifies FH assets** (SKILL.md · **`SKILL_detail.md`** · `.claude/rules/*.md` · `knowledge/shared/rules/*.md` (relocated protocol rules — always full-gate, NOT under the knowledge carve-out) · `templates/` · `CLAUDE.md` · substantive `knowledge/` docs · substantive `docs/*.md` · `AGENTS.md` · `scripts/**/*.sh` · `scripts/**/*.py` (🟥 `.py` since 2026-09-07 — shipped python under scripts/ was unclassified; 7 shipped files sat outside the gate, `fh_signal_2026-09-07_gate-python-blindspot.md`) · agent definitions (`plugins/*/agents/**/*.md` · `.claude/agents/**/*.md`) — see Substantive carve-out below),
49
49
  the 4-axis verification chain runs **automatically before the first commit** of that session.
50
50
  No user request is needed — this is a mandatory autonomous step, not a proposal.
51
51
 
@@ -87,6 +87,31 @@ FH asset modified → Axis 1 (templates/regression_guard.sh --pr {BRANCH})
87
87
  (`residency=(CLEAN|TAINTED|NOT_SCANNED)(...)`), and BLOCKS a `panel(...)` line that co-carries
88
88
  `residency=TAINTED(` or `residency=NOT_SCANNED(` — a sent payload and an unscreened/tainted
89
89
  one cannot both be true on the same line. Same fixtures file, cases `r1`–`r13`;
90
+ 🟥 **since 2026-09-12 (`EVIDENCE_TOKEN_GRACE_DATE`, no retroactivity), a `panel(<families>)`
91
+ value ALSO requires an `evidence=` token in the same grounds** — a closed set of three:
92
+ `evidence=SHARED(<what every family read>)` · `evidence=INDEPENDENT(<what each got separately>)` ·
93
+ `evidence=MIXED(<which member got which>)`. e.g.
94
+ `crossfamily: panel(codex) — residency=CLEAN(files=3) · evidence=SHARED(same staged diff to both) · R1, 3 findings`.
95
+ **Why**: `arXiv:2609.10969` separated the two decorrelation axes at a fixed call budget
96
+ (48 templates, 2,880 scenarios) and a cross-model vote over SHARED evidence approved **62.9 %**
97
+ of unsafe proposals against **22.9 %** with an independent source — source effect **40.9 pp**
98
+ vs **11.3 pp** for model diversity. A `panel(codex, gemini)` that read the *same diff* is that
99
+ 62.9 % arm while recording as this enum's strongest value; the token makes the distinction
100
+ sayable. 🟥 **`SHARED` is legal and common — it is not a failure.** What is blocked is a
101
+ `panel(...)` that does not say which it was, a value outside the three, a malformed/duplicated
102
+ token, and a vacuous body on `SHARED`/`MIXED` (those two are the values whose whole content is
103
+ *which* evidence was shared; `INDEPENDENT` is self-describing and is not body-checked, because
104
+ over-blocking the honest answer trains the override). Same fixtures file, cases `e1`–`e10`;
105
+ 🟥 **`standpoint:`'s `tier2`+ grounds check BLOCKS since 2026-09-12**
106
+ (`STANDPOINT_GROUNDS_GRACE_DATE`, no retroactivity) — it printed `⚠️` and returned 0 before.
107
+ `tier2`/`tier2b`/`tier3` assert code RAN in the target, so the grounds must **name the command
108
+ and the output** (`ran \`bash scripts/x.sh\` there, output: 30/30 PASS`); if you only read
109
+ files the honest rung is `tier1b`, which is not grounds-checked. Same external number is the
110
+ reason: leaving the STRONGER axis advisory while hard-blocking the weaker one was not a
111
+ balance. Fixtures `scripts/test_marker_standpoint_lanes.sh` `N8`(blocks) / `N8b`(named command
112
+ passes) / `N8c`(tier1b exempt) / `N8d`(pre-grace still advisory). 🟥 Both changes gate the
113
+ **shape of the record**, never whether the run was real — §Mechanization Boundary's deliberate
114
+ residual is untouched;
90
115
  **recorded-by-convention, validated by nothing**: `axis2-rounds` (per-round yield vector) —
91
116
  steel-quench §Convergence Criteria consumes it, and a hook check for it was built and then
92
117
  REMOVED the same day for firing on 100% of markers. The convergence claim it supports is
@@ -11,19 +11,19 @@
11
11
  "plugins": [
12
12
  {
13
13
  "name": "fh-meta",
14
- "version": "3.1.4",
14
+ "version": "3.4.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": "3.1.4",
20
+ "version": "3.4.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
  },
24
24
  {
25
25
  "name": "fh-qp",
26
- "version": "3.1.4",
26
+ "version": "3.4.0",
27
27
  "description": "QP (Quality Platform) — the generic edition of a field QA harness's Prepare→Automation→Regression loop as an FH plugin: 4 skills (qp router · qp-plan · qp-run · qp-regress) + qp_tools.sh (target-class · adapter-probe · mask · surface-reach · mtm-check · run-verbs, typed exit codes) + a zero-domain-constant profile slot + 29 known-pair lanes. Drives web targets through the session's Playwright MCP and desktop targets through computer-use MCP (mobile deferred); calls a registered qasp typed capability when one exists (strictest-wins) — none is registered today, so the MCP fallback is the first edition. Verdict contract: a MACHINE closure requires a recorded assertion; a failed first step is attributed BLOCKED, not FAIL; surface_reach counts every TC in the denominator. Born as chamber run #18 (EMIT, 2026-09-05).",
28
28
  "source": "./plugins/fh-qp"
29
29
  }
package/AGENTS.md CHANGED
@@ -32,7 +32,7 @@ operations or steel-quench.
32
32
  | `expert` | `plugins/fh-meta/agents/expert.md` | Web-grounded domain accuracy and current practice | `sim-conductor` Area E/D, paper review, direct |
33
33
  | `challenger` | `plugins/fh-meta/agents/challenger.md` | Evidence-cited adversarial evaluation | `steel-quench`, `harvest-loop`, `sim-conductor`, direct |
34
34
  | `fact-checker` | `plugins/fh-meta/agents/fact-checker.md` | Pre-recommendation duplicate and stale-fact search | Before new asset creation or recommendation |
35
- | `hub-persona-auditor` | `plugins/fh-meta/agents/hub-persona-auditor.md` | External-facing pre-publication persona audit | `hub-cc-pr-reviewer`, `sim-conductor`, direct |
35
+ | `hub-persona-auditor` | `plugins/fh-meta/agents/hub-persona-auditor.md` | External-facing pre-publication persona audit | `harness-pr-reviewer`, `sim-conductor`, direct |
36
36
  | `quench-challenger` | `plugins/fh-commons/agents/quench-challenger.md` | Steel-quench attack plus concrete fix direction | `steel-quench` Wave 1, `install-doctor`, `marketplace-gate` |
37
37
  | `persona-innovator` | `plugins/fh-meta/agents/persona-innovator.md` | Naming gaps, frame proposals, frontier signals | `sim-conductor` Area A, `harvest-loop`, direct |
38
38
 
@@ -120,6 +120,12 @@ Because non-Claude runtimes do not auto-load Claude path rules, apply these rule
120
120
  require instrument suspicion.
121
121
  6. **Irreversible intent:** before publish, delete, or history rewrite, read and apply the
122
122
  Pre-Publish or Destructive-Op gate in `CLAUDE.md`. `pre-push` is only the git-side backstop.
123
+ **An automated verdict never clears an irreversible gate on its own, whatever its measured error
124
+ rate.** Surface class decides, not the number: a wrong finding on a review surface costs a reader
125
+ a minute, while on publish/delete/rewrite the wrong call is the whole loss. So improving a verdict
126
+ engine's score is not a route to promoting it onto an irreversible surface — the terminal step
127
+ stays a human or an explicit logged override. This matters here because a non-Claude runtime
128
+ reading this file is itself often the verdict engine in question.
123
129
  7. **Self-contrast on asset touch:** the trigger for the three-layer self-contrast (process ·
124
130
  engines · identities) is *touching an FH/PMH asset*, not being asked. Pick verification axes by
125
131
  failure mode — running all six every time is not the rule. Record, in the existing Axes 2–3
@@ -268,7 +274,7 @@ control; FH supplies the quality gate after goal completion.
268
274
  |---|---|---|
269
275
  | **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) |
270
276
  | **M2 — Partial** | Core works; native agent or slash-command steps need adaptation | `deliberation`, `steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop` |
271
- | **M3 — Claude-only** | Requires a Claude hook or session-scoped dispatch | `goal-quench`, `hub-cc-pr-reviewer`, `install-wizard` |
277
+ | **M3 — Claude-only** | Requires a Claude hook or session-scoped dispatch | `goal-quench`, `harness-pr-reviewer`, `install-wizard` |
272
278
 
273
279
  > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Invocation-patterns`
274
280
  > — single, parallel, and wave composition examples — read when choosing a dispatch shape.
package/CATALOG.md CHANGED
@@ -742,8 +742,8 @@ FH 전체 지도(2026-09-05) — 5층: ① 무엇인가(문 → 3단 공정 →
742
742
  - cross-family codex R1 21건(S2 = «막는다» 무조건 단정) → 수리 → R2 CONVERGED
743
743
 
744
744
  **File:** plugins/fh-meta/.claude-plugin/plugin.json + .claude-plugin/marketplace.json
745
- Hub meta operations tool bundle — 6 skills operation. harvest-loop path B generalization + verify-bidirectional path B generalization + frontier-digest path B generalization + cross-ecosystem-synergy-detection + plugin-recommender + **hub-cc-pr-reviewer** command tower gate operations rule automation (new). 2 agents (hub-persona-auditor + fact-checker). Beta operation — harness core principle *"beta + public release = practical capability obligation"* followed.
746
- - Decision: hub-cc-pr-reviewer skill newly created — command tower gate operations rule automation + PR lifecycle 4-run accumulated + explicit decision trigger
745
+ Hub meta operations tool bundle — 6 skills operation. harvest-loop path B generalization + verify-bidirectional path B generalization + frontier-digest path B generalization + cross-ecosystem-synergy-detection + plugin-recommender + **harness-pr-reviewer** command tower gate operations rule automation (new). 2 agents (hub-persona-auditor + fact-checker). Beta operation — harness core principle *"beta + public release = practical capability obligation"* followed.
746
+ - Decision: harness-pr-reviewer skill newly created — command tower gate operations rule automation + PR lifecycle 4-run accumulated + explicit decision trigger
747
747
  - Decision: plugin level v0.4.3 → v0.5.0 promoted — 6 skills operation baseline + path B generalization baseline followed
748
748
  - Decision: 3 skills path B generalization — harvest-loop + verify-bidirectional + frontier-digest / external user environment adaptation path enhanced
749
749
  - Note: audit-learnings deprecated from plugin (2026-05-xx) → transferred to hub-internal deprecated/; replaced by harvest-loop
@@ -763,8 +763,8 @@ Self-evolution pipeline — field-harvest → contention-layer → devil/innovat
763
763
  Bidirectional self-verification pattern automation — when user's precision counter-argument manifests after AI recommendation/agreement persistence, baseline update channel 6-step processing.
764
764
  - Decision: v0.5 official release — accumulated runs + mode C correction catch fully persisted
765
765
 
766
- ### 2026-05-08 | fh-meta | hub-cc-pr-reviewer, command-tower-gate-automation, baseline-coherence-check, layer-5-self-catch
767
- **File:** plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL.md
766
+ ### 2026-05-08 | fh-meta | harness-pr-reviewer, command-tower-gate-automation, baseline-coherence-check, layer-5-self-catch
767
+ **File:** plugins/fh-meta/skills/harness-pr-reviewer/SKILL.md
768
768
  Command Tower Gate operations rule automation — on PR input, auto-generates baseline coherence check 8-matrix + Layer 5 self-catch matrix + review comment attachment + admin override merge recommendation.
769
769
  - Decision: v0.1 newly created — PR lifecycle 4-run accumulated + explicit decision trigger met
770
770
 
package/CHEATSHEET.md CHANGED
@@ -567,7 +567,7 @@ Claude agents feature
567
567
  | Skill | What it does | Say this |
568
568
  |---|---|---|
569
569
  | `install-wizard` | First-install onboarding (zshrc, sentinels, the FH self-gate) | "first-time setup", "run the install wizard" |
570
- | `hub-cc-pr-reviewer` | Reads a PR diff → 8-matrix baseline-consistency check → review comment + merge call | "review this PR", "check this diff" |
570
+ | `harness-pr-reviewer` | Reads a PR diff → 8-matrix baseline-consistency check → review comment + merge call | "review this PR", "check this diff" |
571
571
  | `salience-splitter` | Splits an over-large SKILL.md that "does everything" into scoped files | "this skill is bloated", "SKILL.md too large", "split this skill" |
572
572
 
573
573
  ### Agents (sub-agents, dispatched — not slash commands)
package/CLAUDE.md CHANGED
@@ -41,21 +41,21 @@ core invariants never melt). The nursery also **verifies what it births**: harne
41
41
  | **① Control Tower** | Coordinates all connected projects and **drives harness-ification across them** — decides *which* projects to harness and *when*, propagates harness assets to each, and feeds their synced learnings into the hub's compounding loop. The *how* (rules · gates · 6-axis) is executed via the Core Axis. Command HQ, not a passive registry. | `knowledge/shared/rules/auto_project_mapping.md` (mapping + **Full-Harness Mode**) · `harvest-loop` (compounding loop) · `templates/` (project-harness bundle) · `CATALOG.md` |
42
42
  | **② 프런티어 답습 · Frontier absorption** | 확신이 안 서는 자리에서 **책장(우리가 이미 가진 것) → 도서관(세상이 이미 만든 것)** 순으로 먼저 뒤진다. 목적은 **재발명 차단**이지 외부 인용으로 똑똑해 보이는 것이 아니다. | `knowledge/shared/harness-core/harness_frontier_diagnosis_*.md` · `knowledge/{your-org}/` |
43
43
  | **③ AI Collaboration Guide** | Accumulates and distributes best practices for token efficiency and dialogue methodology — "how to ask, delegate, and record". | `CHEATSHEET.md` · `knowledge/shared/dialogue/ai_dialogue_playbook.md` · `MEMORY.md` intent-based + associative recall (`knowledge/shared/dialogue/memory_intent_recall.md`) |
44
- | **Core Axis** | **Harness Engineering (How)** — the methodology and practice axis that realizes the three layers above. The 6-axis framework is the operating unit. **A harness is a means, not an end** — Field harness: "simpler over time" (complexity = warning signal). Meta-harness: *optimize*, not necessarily simplify — complexity earns its scope; red flags are orphaned, redundant, and decorative units, not complexity itself. | `harness_6axis_framework.md` · `hub_compounding_loop.md` · `claude_code_runtime_flow.md` · `plugins/*/agents/` (sub-agents) |
44
+ | **Core Axis** | **Harness Engineering (How)** — the methodology and practice axis that realizes the three layers above. The 6-axis framework is the operating unit. **A harness is a means, not an end** — Field harness: "simpler over time" (complexity = warning signal). Meta-harness: *optimize*, not necessarily simplify — complexity earns its scope; red flags are orphaned, redundant, and decorative units, not complexity itself.<br>**And what it is a means *to* is Governance Engineering (What for)** — 🐿️ *«수치를 목표로 움직이되, 그 수치가 게이트를 열지는 않는다»*: drive the error rate toward 0.x% **and** hold the surfaces where no number buys passage. Two verbs, and the second one carries the load — drop it and the discipline decays into "lower the number and the gate opens", which §Irreversibility Gates forbids by name. Measured content, not a slogan: five review arms ran **2.7 %–13.6 %** claim-error on the same eight cases — every one usable on a review surface, **not one** usable on publish/delete/rewrite. That distance is why this axis exists. Canon: `governance_engineering_definition.md` (operator formulation 2026-09-09; the term exists in IT/data governance — what is ours is the referent, and an outbound claim of novelty owes a stated delta, never mere absence of prior use). | `harness_6axis_framework.md` · `hub_compounding_loop.md` · `claude_code_runtime_flow.md` · `plugins/*/agents/` (sub-agents) |
45
45
 
46
46
  > **번호가 둘이다 — 이 표의 ①②③ 은 «3층 미션»이고, 정체성 등급표의 ①~④·Ⓑ 는 «5대 정체성»이다.**
47
47
  > 같은 것을 다르게 세는 게 아니라 **다른 분류**이므로 번호가 어긋나도 모순이 아니다. 여기 **②**(프런티어 답습)는
48
48
  > 등급표에서 **④** 다. 🟥 등급은 이 표가 아니라 `ship_readiness_gate.md` 가 정본이고, 이름도 거기가 정본이다.
49
49
 
50
50
 
51
- > **3층 정본 — 공정 · 엔진 · 정체성**: FH 를 설명하는 뼈대는 세 층이고 셋의 관계가 정본으로 적혀 있다 — **3단 공정**(FH 의 모든 작업이 밟는 방법론 — 엔진을 벼릴 때도 같다: 초기 영혼 → 중간 **병렬 탈상관** 가속화(두 다이얼 — **탈상관**=사각 위험[모델 계열 ⓐ + 입장 ⓑ] · **병렬**=표면 크기. 곱하지 말고 골라라) → **마무리 6축 태우기**) → **4대 엔진**(영혼·품질게이트·질문하기·맥락유지) → **정체성**(방법론과 코어가 맞물려 나타나는 능력 — 5대는 단련된 실물과 등급을 가진 안정 정체성, 그 외는 방향·레버에 따라 나타나고 사라지는 면모; 운영자 정식화 2026-09-05). 기억용 형태는 **3단 공정 · 4대 엔진 · 5대 정체성 · 6축 검증**이나 🟥 **6축은 네 번째 층이 아니다** — 3단 공정 ③단계가 무엇으로 이루어지는지다. **Read `knowledge/shared/harness-core/fh_three_layer_canon.md`** before naming, re-scoping, or citing any of the three — it also defines the **6 verification axes** (ⓐ계열 · ⓑ입장 · ⓒ격리 그라운딩 · ⓓ3자대면 · ⓔ첫실사용 · ⓕ되돌림; §1-a 가 최초 4축, §1-a-2 가 2026-08-16 확장) that the third stage actually consists of, and states why the three are *not* a clean stack. 🟥 **축은 «얼마나 적대적인가»가 아니라 «무엇을 받았는가»로 갈린다** — 받는 것이 같으면 리뷰어를 몇 명 붙여도 같은 사각이 남는다. 🟥 **명칭 충돌 — 이 파일 안에 「4축」이 두 개다.** §FH Improvement **4-Axis Auto-Gate** 의 4축(Axis 1 회귀 · 2 적대 · 3 팬텀 · 4 매니페스트)은 **커밋 게이트**이고, 여기 6축은 **검증 축**이다. 부분적으로만 겹치고(Axis 1·4 는 ⓐ~ⓕ 에 대응이 없다) **서로 대체하지 않는다**. 그래서 6축은 「6축 게이트」가 아니라 「**6축 검증**」으로 부른다. Grade table stays canonical in `ship_readiness_gate.md`; this pointer never carries grades.
51
+ > **3층 정본 — 공정 · 엔진 · 정체성**: FH 를 설명하는 뼈대는 세 층이고 셋의 관계가 정본으로 적혀 있다 — **3단 공정**(FH 의 모든 작업이 밟는 방법론 — 엔진을 벼릴 때도 같다: 초기 영혼 → 중간 **병렬 탈상관** 가속화(두 다이얼 — **탈상관**=사각 위험[모델 계열 ⓐ + 입장 ⓑ] · **병렬**=표면 크기. 곱하지 말고 골라라) → **마무리 6축 태우기**) → **4대 엔진**(영혼·품질게이트·질문하기·맥락유지) → **정체성**(방법론과 코어가 맞물려 나타나는 능력 — 5대는 단련된 실물과 등급을 가진 안정 정체성, 그 외는 방향·레버에 따라 나타나고 사라지는 면모; 운영자 정식화 2026-09-05). 기억용 형태는 **3단 공정 · 4대 엔진 · 5대 정체성 · 6축 검증**이나 🟥 **6축은 네 번째 층이 아니다** — 3단 공정 ③단계가 무엇으로 이루어지는지다. **Read `knowledge/shared/harness-core/fh_three_layer_canon.md`** before naming, re-scoping, or citing any of the three — it also defines the **6 verification axes** (ⓐ계열 · ⓑ입장 · ⓒ격리 그라운딩 · ⓓ3자대면 · ⓔ첫실사용 · ⓕ되돌림; §1-a 가 최초 4축, §1-a-2 가 2026-08-16 확장) that the third stage actually consists of, and states why the three are *not* a clean stack. 🟥 **축은 «얼마나 적대적인가»가 아니라 «무엇을 받았는가»로 갈린다** — 받는 것이 같으면 리뷰어를 몇 명 붙여도 같은 사각이 남는다. 🟢 **외부 수치가 생겼다(2026-09-12)**: `arXiv:2609.10969`(*Engineering Reliable Commit Gates for Agentic AI*, 2026-09-10)이 고정예산 2×2 로 **48 템플릿 · 2,880 시나리오**에서 두 축을 분리해 쟀다 — «**같은 증거를 읽는 교차-모델 투표**»는 위험 제안의 **62.9 %** 를 승인하고, «**독립 출처**»는 **22.9 %** 다. 출처 효과 **40.9 %p** vs 모델 다양성 효과 **11.3 %p** — **3.6 배**. 🟥 **그 수치를 읽고 바꿨다(같은 날)**: 강한 쪽(`standpoint:`)의 `tier2`+ grounds 검사가 **advisory 에서 차단으로** 올라갔고(`STANDPOINT_GROUNDS_GRACE_DATE=2026-09-12`, 소급 없음), `crossfamily:` 의 `panel(...)` 은 이제 **`evidence=SHARED|INDEPENDENT|MIXED`** 토큰을 요구한다 — «같은 diff 를 읽은 패널» 이 강한 값으로 기록되던 자리가 그 62.9 % 팔이다. 🟥 **닫힌 것은 여전히 형식이지 진위가 아니다** — 게임 가능성은 §Mechanization Boundary 가 사람에게 남긴 의도된 잔여다. 이 줄은 n=4+4 내부 관찰로 서 있었고 이제 외부 n=2,880 이 같은 방향을 가리킨다(숫자는 초록 직독으로 재확인, 2026-09-12). 🟥 **명칭 충돌 — 이 파일 안에 「4축」이 두 개다.** §FH Improvement **4-Axis Auto-Gate** 의 4축(Axis 1 회귀 · 2 적대 · 3 팬텀 · 4 매니페스트)은 **커밋 게이트**이고, 여기 6축은 **검증 축**이다. 부분적으로만 겹치고(Axis 1·4 는 ⓐ~ⓕ 에 대응이 없다) **서로 대체하지 않는다**. 그래서 6축은 「6축 게이트」가 아니라 「**6축 검증**」으로 부른다. Grade table stays canonical in `ship_readiness_gate.md`; this pointer never carries grades.
52
52
 
53
53
  > **자기 대조는 상시 의무 — 트리거는 발화가 아니라 «지금 FH/PMH 자산을 건드리고 있다»**
54
54
  > (운영자 결정 2026-08-09; 이 저장소든 **다른 사용자의 install 이든** 동일). §FH Improvement
55
55
  > 4-Axis Auto-Gate 와 **같은 트리거**이므로 새 트리거도 새 파일도 만들지 않는다 — 기록 자리는
56
56
  > **4축 마커의 기존 필드**(`axis2-*` · `axis3-*` · `residual`)다.
57
57
  > **마커에 반드시 남는 3줄** ① **①영혼** — 설계 *전에* 쓴 «성공 정의 / 절대 안 함»(없으면 `없음`)
58
- > · ② **돌린 축과 안 돌린 축을 각각 이름으로.** 마커 `axes-run` 은 **2026-08-17 부로 여섯 글자**를 요구한다 — **기호 키**(ⓐ계열 · ⓑ입장 · ⓒ격리 그라운딩 · ⓓ3자대면 · ⓔ첫실사용 · ⓕ되돌림). 그 전 날짜의 마커는 옛 **ASCII 네 글자**(a·b·c·d) 그대로다. 🟥 **두 배열은 같은 글자가 다른 축을 가리킨다** — 옛 `b`=첫실사용은 지금 **ⓔ**, 옛 `d`=되돌림은 지금 **ⓕ** 라서, 옛 줄을 그대로 옮기면 축 둘이 조용히 뒤바뀌고 아무 오류도 안 난다. **어느 배열인지는 마커 파일명의 날짜로 판별한다**(`< 2026-08-17` = 옛 4축). ⚠️ **표기법은 판별자가 아니다** — 초판이 «기호 키를 보면 6축인 줄 안다» 고 적었는데 **코퍼스 실측이 반증했다**: axes-run 보유 53건 중 기호 키가 4건인데 그중 **2건이 2026-08-10 자이면서 옛 4축 의미로 기호를 쓴다**(`ⓑ 첫실사용` · `ⓓ 되돌림` — 현 배열에선 각각 ⓔ·ⓕ), 혼용도 1건 있다. 훅은 그 셋을 안 읽으므로 커밋은 안 막지만 **감사자의 grep 은 거기서 틀린 답을 낸다**. ⓑ입장은 값을 여기 적지 않고 **`standpoint:` 자기 필드**를 가리킨다(`ⓑ=→standpoint`, 그 줄이 비면 죽은 포인터라 차단). 즉 산문 정본과 기계가 **축 개수로는 맞았고**, 남은 어긋남은 `standpoint:` 값의 **grounds** 한 칸이다. 🟥 **초판은 여기에 «값을 검증하는 코드가 아직 0줄»이라고 적었는데 그건 거짓이었다 — 2026-08-23 정정(RETRACTED).** 실측: `templates/.git-hooks/pre-commit` 의 `validate_standpoint_leg()` 는 **86줄**이고 `:1953` 에서 호출되어 `FAILED=1` 로 **커밋을 차단한다**(레인 = `scripts/test_marker_standpoint_lanes.sh`, 실재). 정확한 잔여는 「0줄」보다 훨씬 좁고, **그 구분을 접으면 안 된다**: ⓐ **enum 은 닫혀 있고 차단한다** — 함수 안 `return 1` **6개**(`standpoint:` 줄 부재 · 중복 `standpoint:` 줄 · enum 비-멤버 값 · `crossfamily:` 토큰 오염 · 근거 없는 `not-applicable` · 근거 없는 `DEGRADED_*`/`UNKNOWN`). ⓑ **`tier2`+ 의 «실행을 명명했는가» grounds 검사만 advisory** 미달이면 `⚠️` 찍고 `return 1` 을 **안 한다**(훅 스스로 *"Advisory by design"* 이라 적는다). 줄은 grounds 미검증」이라 적었어야 참이었다. **왜 그렇게 적혔나**: 2026-08-20 정정이 «enum 은 닫혔고 grounds 는 advisory» 로 이미 들어왔는데(§Standpoint-Execution-Evidence 포인터 줄이 그대로 적고 있다) **이 줄만 옛 서술로 남았다** — 같은 파일이 자기 자신과 어긋난 반쪽-픽스 전파경계다(`[[feedback_half_fix_propagation_boundary]]`). 🟥 **이 문단의 논지는 바뀌지 않는다** — 닫힌 것은 여전히 **«형식»이지 «진위»가 아니고**, 자평·게임 가능성은 그대로 열려 있다. 오히려 좁아진 만큼 정확해졌다. 형식 정본 = `.claude/rules/fh_4axis_gate.md §Marker axis fields`
58
+ > · ② **돌린 축과 안 돌린 축을 각각 이름으로.** 마커 `axes-run` 은 **2026-08-17 부로 여섯 글자**를 요구한다 — **기호 키**(ⓐ계열 · ⓑ입장 · ⓒ격리 그라운딩 · ⓓ3자대면 · ⓔ첫실사용 · ⓕ되돌림). 그 전 날짜의 마커는 옛 **ASCII 네 글자**(a·b·c·d) 그대로다. 🟥 **두 배열은 같은 글자가 다른 축을 가리킨다** — 옛 `b`=첫실사용은 지금 **ⓔ**, 옛 `d`=되돌림은 지금 **ⓕ** 라서, 옛 줄을 그대로 옮기면 축 둘이 조용히 뒤바뀌고 아무 오류도 안 난다. **어느 배열인지는 마커 파일명의 날짜로 판별한다**(`< 2026-08-17` = 옛 4축). ⚠️ **표기법은 판별자가 아니다** — 초판이 «기호 키를 보면 6축인 줄 안다» 고 적었는데 **코퍼스 실측이 반증했다**: axes-run 보유 53건 중 기호 키가 4건인데 그중 **2건이 2026-08-10 자이면서 옛 4축 의미로 기호를 쓴다**(`ⓑ 첫실사용` · `ⓓ 되돌림` — 현 배열에선 각각 ⓔ·ⓕ), 혼용도 1건 있다. 훅은 그 셋을 안 읽으므로 커밋은 안 막지만 **감사자의 grep 은 거기서 틀린 답을 낸다**. ⓑ입장은 값을 여기 적지 않고 **`standpoint:` 자기 필드**를 가리킨다(`ⓑ=→standpoint`, 그 줄이 비면 죽은 포인터라 차단). 즉 산문 정본과 기계가 **축 개수로는 맞았고**, 남은 어긋남은 `standpoint:` 값의 **grounds** 한 칸이다. 🟥 **초판은 여기에 «값을 검증하는 코드가 아직 0줄»이라고 적었는데 그건 거짓이었다 — 2026-08-23 정정(RETRACTED).** 실측: `templates/.git-hooks/pre-commit` 의 `validate_standpoint_leg()` 는 **86줄**이고 `:1953` 에서 호출되어 `FAILED=1` 로 **커밋을 차단한다**(레인 = `scripts/test_marker_standpoint_lanes.sh`, 실재). 정확한 잔여는 「0줄」보다 훨씬 좁고, **그 구분을 접으면 안 된다**: ⓐ **enum 은 닫혀 있고 차단한다** — 함수 안 `return 1` **6개**(`standpoint:` 줄 부재 · 중복 `standpoint:` 줄 · enum 비-멤버 값 · `crossfamily:` 토큰 오염 · 근거 없는 `not-applicable` · 근거 없는 `DEGRADED_*`/`UNKNOWN`). ⓑ **`tier2`+ 의 «실행을 명명했는가» grounds 검사도 2026-09-12 부로 차단한다** 전까지는 `⚠️` 찍고 `return 1` 을 했다(훅 스스로 *"Advisory by design"* 이라 적었다). 🟢 **바꾼 근거는 외부 실측이다**: `arXiv:2609.10969` 출처 축을 **40.9 %p**, 모델 축을 **11.3 %p** 로 재서(n=2,880 · 고정 호출예산) «강한 축의 grounds advisory 두고 약한 축을 하드 차단» 이 균형이 아니게 됐다. grace date 로 소급하지 않으며(`< 2026-09-12` 마커는 종전 경고), 레인 = `test_marker_standpoint_lanes.sh` N8/N8b/N8c/N8d. 🟥 막는 것은 **기록의 형태**(명령과 출력을 명명했는가)이지 그 실행의 진위가 아니다. **왜 그렇게 적혔나**: 2026-08-20 정정이 «enum 은 닫혔고 grounds 는 advisory» 로 이미 들어왔는데(§Standpoint-Execution-Evidence 포인터 줄이 그대로 적고 있다) **이 줄만 옛 서술로 남았다** — 같은 파일이 자기 자신과 어긋난 반쪽-픽스 전파경계다(`[[feedback_half_fix_propagation_boundary]]`). 🟥 **이 문단의 논지는 바뀌지 않는다** — 닫힌 것은 여전히 **«형식»이지 «진위»가 아니고**, 자평·게임 가능성은 그대로 열려 있다. 오히려 좁아진 만큼 정확해졌다. 형식 정본 = `.claude/rules/fh_4axis_gate.md §Marker axis fields`
59
59
  > · ③ **각 축의 컨트롤과 그 생사**. 축을 «돌렸다»의 **최소 증거 = 컨트롤이 살아 있는 실행 출력**
60
60
  > 이다 — 안 고른 이유만 적은 것은 준수가 아니다.
61
61
  > **비용 경계**: 넷을 매번 다 돌리지 않는다. 실패 모드에 맞춰 **고른다**.
@@ -570,7 +570,7 @@ Every new `SKILL.md` must clear a **6-item bar** (role-duplication via `/asset-p
570
570
 
571
571
  ## FH Improvement 4-Axis Auto-Gate (Self-Verification Orchestrator)
572
572
 
573
- **FH 자산을 수정하면**(SKILL.md · **SKILL_detail.md** · `.claude/rules/*.md` · `knowledge/shared/rules/*.md` · `templates/` · `CLAUDE.md` · substantive `knowledge/`·`docs/*.md` · `AGENTS.md` · **`scripts/**/*.sh`** · **에이전트 정의**(`plugins/*/agents/**/*.md` · `.claude/agents/**/*.md`)) **4축 검증 체인이 그 세션 첫 커밋 전에 자동 실행된다.** 사용자 요청 불요 — 제안이 아니라 의무 단계다.
573
+ **FH 자산을 수정하면**(SKILL.md · **SKILL_detail.md** · `.claude/rules/*.md` · `knowledge/shared/rules/*.md` · `templates/` · `CLAUDE.md` · substantive `knowledge/`·`docs/*.md` · `AGENTS.md` · **`scripts/**/*.sh`** · **`scripts/**/*.py`**(`.py` 는 2026-09-07 부터 — 그 전엔 출하 파이썬 7개가 게이트 밖이었다) · **에이전트 정의**(`plugins/*/agents/**/*.md` · `.claude/agents/**/*.md`)) **4축 검증 체인이 그 세션 첫 커밋 전에 자동 실행된다.** 사용자 요청 불요 — 제안이 아니라 의무 단계다.
574
574
 
575
575
  **기계층 — 무엇이 실제로 막는지 나눠서 말한다(2026-08-04 실측).** `git commit` 은 `templates/.git-hooks/pre-commit` 이 **하드 차단**한다: 축이 전부 PASS 할 때까지 커밋이 안 되고, 아래 상세가 로드되지 않아도 훅이 막는다 — 이 산문은 훅 위의 살리언스 층이지 유일 floor 가 아니다. 다만 **훅은 클라이언트측이고 `--no-verify` 로 우회된다**(§Integration branch 가 이미 그렇게 말한다 — 두 곳이 어긋나 보이던 것을 여기서 맞춘다). **그리고 서버측 검증엔 남은 잔여가 있다(2026-08-12 재확인 — `contexts=[]` 서술은 stale, 정정됨)**: `main` 은 `enforce_admins: true` 로 **푸시 경로**(PR 경유)를 강제하고, legacy `required_status_checks.contexts` 는 **`["validate"]`** — `validate` 잡(`.github/workflows/validate.yml`, 메타데이터·`selfcheck.sh` 배선 레인)이 실제 **필수 체크**다. ⚠️ **`validate` 는 Axis 1 이 아니다** — Axis 1(`regression-guard.yml` → `templates/regression_guard.sh`)은 여전히 필수 체크가 **아니고**, 그 워크플로의 `paths:` 필터가 `SKILL.md`·`.claude/rules/*.md`·`CLAUDE.md`·`templates/*.md` 만 보므로 이 절이 4축 대상으로 나열한 `knowledge/shared/rules/*.md`·`docs/*.md`·`AGENTS.md`·`scripts/**/*.sh`·에이전트 정의·`SKILL_detail.md` 만 바뀐 PR 에는 **Axis 1 자체가 돌지도 않는다**. `validate` 쪽 남은 갭은 `strict: false`: 그 체크는 PR 브랜치에 푸시할 때마다 재실행되지만(오픈 시점 한정이 아니다), 그 뒤 main 이 움직여도 재검증을 강제하지 않으므로 **초록으로 남아 있는 체크가 실제로 병합되는 최신 트리를 본 적이 없을 수 있다.** 즉 서버가 강제하는 건 *체크가 초록인가*지 *그 체크가 지금의 main 을 봤는가*가 아니다. Axes 2–3(마커)·Axis 4(매니페스트)는 그 파일들이 `tracks/**` 로 gitignored 라 CI 가 **구조적으로 볼 수조차 없다**. 정직한 표현은 "하드 차단"이 아니라 "**가용한 가장 강한 층**"이다. **미해결 잔여**: `strict` 를 켜는 것도, Axis 1 을 필수 체크로 걸거나 그 `paths:` 를 넓히는 것도 운영자 결정이다(막 flaky 레인을 하나 기록한 참이라, 과차단이 override 를 습관화시키는 쪽으로 기울 수 있다).
576
576
 
@@ -591,7 +591,32 @@ optimistic reading and miss it.**
591
591
  **Trigger (per changed file — grep-assisted, salience-dependent, no field hook)**: an AI-authored
592
592
  change to a **verdict/gate enum or exit code** (PASS/FAIL/BLOCK/allow/deny), an **irreversible-op**
593
593
  path (publish/delete/history-rewrite), or a **safety invariant** (floor, verdict-binding, a
594
- pre-push/pre-commit hook). Grep the diff for verdict-enum returns / gate exits / safety-marked
594
+ pre-push/pre-commit hook). 🟥 **Registration is not a precondition** (operator decision
595
+ 2026-09-08). When the session is asked for a **merge / landing verdict** on a file that is gate code,
596
+ this gate applies **whether or not** the file's project is mapped, tracked, or in a repo this hub
597
+ knows. Two narrowings keep that from becoming «every review is a gate»: ⓐ the ask must be a
598
+ **verdict on landing** (merge / ship / approve — a read-only explanation or a refactor question is
599
+ not one) · ⓑ «gate code» is decided by **`bash scripts/gate_shape_scan.sh <file>`** — word-bounded
600
+ verdict identifiers (a **closed** list — allow/deny/permit/approve·approval/verdict/permission/
601
+ auth·authn·authz·authorize·authorization·authenticat*·auth_x; `author` and `allowance` do not match;
602
+ uppercase `PASS|FAIL|BLOCK`), a bind/listen exposure, or an irreversible-op call; comment-led lines
603
+ skipped; binary → `UNSCANNABLE`, and **exit 3 dominates a hit** — never a silent miss (known-pair
604
+ lane `scripts/test_gate_shape_scan_lanes.sh`, 9 lanes incl. a revert probe).
605
+ The task *naming* the file as gate/auth/exposure code is a **manual escalation on top**, not part
606
+ of the classifier — a prompt is not a property of the file. ⓒ **FH-owned assets are excluded** —
607
+ they already carry the 4-axis gate; this gate is for *field* code, mapped or not. Record surface for
608
+ an unmapped file: `tracks/_meta/field_gate_review_<YYYY-MM-DD>_<slug>.md` (file · verdict ·
609
+ `crossfamily:` verbatim from the enum · degrade-scan result · regression test landed-or-owed), and
610
+ the reply links it. An **owed** regression test keeps the verdict `NOT-CONVERGED`; it does not
611
+ converge on a promise. 🟥 **Pilot evidence, below bar, and CUE-DEPENDENT** (floor tier, blind, one
612
+ variable — this paragraph injected): **before 0/1** — *"FH 자산도 매핑된 필드 하네스도 아니라서 …
613
+ 적용 대상이 아닙니다"*, reviewed bare; **after 2/3** ran the gate. Both arms' prompt ended with *"네가
614
+ 설치된 리뷰 절차가 있으면 그것을 따라라"*. 🟥 **Without that cue the gate fired 0/51** (same day, 17
615
+ unmapped gate-shaped files × 3, same doctrine in the clone, task sentence only). So this paragraph is
616
+ muscle, not skeleton: a session must be *reminded* to run its own procedure, and no hook supplies the
617
+ reminder yet (`fh_signal_2026-09-08_gate-needs-cue.md`). Do not cite 2/3 without the cue condition.
618
+ Registration was never the reason this gate exists; the degrade-direction blind spot is, and it
619
+ does not check who owns the file. Grep the diff for verdict-enum returns / gate exits / safety-marked
595
620
  functions — strong-advisory trigger, so under-trigger is a named residual, not an airtight claim.
596
621
 
597
622
  **Gate (before merge, not after)**: ① **degrade-direction lint**
@@ -772,6 +797,19 @@ when the surface genuinely lacks its target (e.g. the code-security pass is N/A
772
797
  list ships no source/executable file — **grep the file list, don't assert "docs-only"**).
773
798
  *Applicable-but-tooling-down* is never not-applicable.
774
799
 
800
+ **Surface class sets the error budget, not only the degrade direction** (operator decision 2026-09-08).
801
+ The same automated verdict engine is usable on one surface and not on another, and the discriminator is
802
+ what a wrong verdict costs. Measured that day across five review arms on the same eight cases: claim
803
+ error rates ran **2.7 % – 13.6 %**, and every one of them is usable *on a review surface*, because a
804
+ wrong finding costs a reader a minute. On publish · delete · history-rewrite there is no "costs a
805
+ minute": the wrong call is the whole loss. 🟥 **So an automated verdict never clears an irreversible
806
+ gate on its own, however good its measured rate** — it feeds a fail-closed gate whose terminal step
807
+ stays a human or an explicit logged override. The corollary is the one that actually bites: **do not
808
+ promote a verdict engine to an irreversible surface by improving its number.** The number is not the
809
+ property that changes between the two surfaces. A precision figure also improves for free whenever the
810
+ pipeline can *delete* claims, so on any surface it is meaningless beside the error rate of the
811
+ deletions (`scripts/finding_verify.py` refuses to complete a run whose drops were never audited).
812
+
775
813
  A gate guarding an irreversible boundary that silently proceeds when its tooling is down is **fail-open**
776
814
  — by this floor's definition, not a gate. (The same reflex already ships piecewise — `mcp_tool_gating
777
815
  §unlisted → ask (fail-closed)`, corpus-grounding's fail-closed-no-generator — this section names the
@@ -801,7 +839,13 @@ before any scrub. So the audit must fire **pre-publish**, not after.
801
839
  **When this gate fires** — *before* any action that makes a repo/package **publicly visible for the
802
840
  first time**, especially one **derived from internal/company assets** (operator-IP that originated in a
803
841
  private harness): `gh repo create --public`, `gh repo edit --visibility public`, a first push to a new
804
- public remote, `npm publish`, `twine upload`, a private→public visibility flip.
842
+ public remote, `npm publish`, `twine upload`, a private→public visibility flip, **and a scholarly
843
+ deposit** — Zenodo / figshare / OSF publish, a DOI mint or new version, an arXiv `submit` / `replace`:
844
+ **any action that mints or alters a persistent public identifier**, first-time or not. 🟥 **What the
845
+ form shows is not what the server received** — check the deposit's draft **API**, the file **md5**, and
846
+ the **machine-readable fields** (references · related identifiers · dates) separately from the body:
847
+ `templates/PRE-PUBLISH-CHECKLIST.md` **Step 1b** (four items, un-hookable surface — prose is the floor;
848
+ measured case: `claude_md_gate_details.md §Pre-Publish-Hook-Coverage`).
805
849
 
806
850
  **Required before the public action** (all must be non-LEAK/non-FAIL) — this gate is the **umbrella that
807
851
  invokes them**, not a competitor; when publish intent is detected, fire *this* gate (it then runs the chain),
@@ -928,7 +972,7 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
928
972
  | "pull this into FH", "reverse-harvest", "worth keeping", "harvest pattern", "field pattern" | `/field-harvest` |
929
973
  | **you installed or invoked an EXTERNAL asset (a tool, framework, or repo not ours) and ran it against something this hub owns** — `pip install`/`npm i` of an outside framework, cloning a peer repo to run it, adopting an upstream utility. Fires on the ACT, not on a keyword: the trigger is *"I reached outside because ours did not cover this"* | **Sister Asset Protocol** (`knowledge/shared/rules/sister_asset_protocol.md` §Active adoption) — record the resolution difference, list **items to import** AND **items the hub can propagate** (bidirectionality is a prohibition, not a nicety), and where there is no write access write a `tracks/_audit/proposal_*.md` so the operator can decide whether to contribute it upstream. 🟥 Missed 2026-08-16 on exactly this shape: an external red-team framework was installed, run against a field harness, found a real bypass — and was filed as a `type: reference` **tool pointer** with no sister audit at all |
930
974
  | "용광로모드", "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) |
931
- | "review this PR", "check diff", "code review" | code diff → built-in `/code-review`·`/review` · FH-asset coherence → `/hub-cc-pr-reviewer` (role split) |
975
+ | "review this PR", "check diff", "code review" | code diff → built-in `/code-review`·`/review` · FH-asset coherence → `/harness-pr-reviewer` (role split) |
932
976
  | "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 |
933
977
  | "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. |
934
978
  | "orchestrate agents", "parallel dispatch", "combine skills", "multiple agents" | `/agent-composer` |
@@ -938,7 +982,7 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
938
982
  | "connect a project", "map this project", "link to hub" | `auto_project_mapping.md` (mapping) |
939
983
  | "harness-ify this project", "full harness setup", "프로젝트 하네스화", "promote to full harness" | `auto_project_mapping.md §6` (Full-Harness Mode) |
940
984
  | "check install", "verify setup", "confirm install", "install-doctor" | `/install-doctor` |
941
- | "publish", "make public", "make this repo public", "go public", "gh repo create --public", "flip to public", "first public push", "publish the package", "npm publish", "twine upload", **opening/updating a PR or pushing content to the public hub** (esp. company-origin) (publish intent — **proactive**, fire *before* the action; adding content to an already-public repo IS publishing that content) | **Pre-Publish Surface Gate** (see above → `/public-surface-audit` + `/marketplace-gate` Check 5 must PASS first). The commit-time half is now **hook-enforced** (mechanical confidentiality scan — see Pre-Publish Gate §Hook coverage (b)), so this proactive trigger is the salience layer over a mechanical floor. |
985
+ | "publish", "make public", "make this repo public", "go public", "gh repo create --public", "flip to public", "first public push", "publish the package", "npm publish", "twine upload", **"zenodo", "figshare", "OSF", "DOI", "DOI mint / 발급", "new version" under a concept DOI, "arXiv submit / replace / 제출", "예치", "deposit"** (scholarly deposit — the deposit's *metadata* is the surface, not only its PDF), **opening/updating a PR or pushing content to the public hub** (esp. company-origin) (publish intent — **proactive**, fire *before* the action; adding content to an already-public repo IS publishing that content) | **Pre-Publish Surface Gate** (see above → `/public-surface-audit` + `/marketplace-gate` Check 5 must PASS first). The commit-time half is now **hook-enforced** (mechanical confidentiality scan — see Pre-Publish Gate §Hook coverage (b)), so this proactive trigger is the salience layer over a mechanical floor. |
942
986
  | "delete the branch", "브랜치 삭제", "브랜치 정리", "clean up branches", "force-push", "rewrite history", "지워도 돼?" (destructive intent — **proactive**, fire *before* the action) | **Destructive-Op Gate** (see above → enumerate → recover → destroy; `templates/predelete_check.sh`) |
943
987
  | **"새 기능 검증해줘", "test this feature", "이 TC 확인해줘" — verifying the user's PRODUCT/feature (not FH itself)** | **Route to the mapped field harness first** (Cross-Project Skill Bus / registry) — the field harness owns product verification. The harness-verification rows in this table (`verify-bidirectional` · `prompt-regression` · `sim-conductor` · `pipeline-conductor`) verify the *harness*, and must not shadow a product-verification ask (a field project's *harness assets* — its skills/rules — still use those FH verification rows) |
944
988
  | "지난주에 뭐 했지", "what did we do last week", "예전에 이거 한 적 있나" (recall intent) | **CATALOG-first recall** — read `CATALOG.md`, identify candidates by tag/date, then open only those files. Never scan session files one by one |
@@ -955,8 +999,8 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
955
999
  | "memory feels bloated", "clean up memory", "memory too large", "memory hygiene" | `/memory-hygiene` |
956
1000
  | **사람이 읽을 산출물이 나가기 직전** — README·가이드·리포트·장표·PR 본문 등 «독자가 여는» 것 (proactive; 코드가 옳아도 걸린다 — 이 행이 잡는 건 정확성이 아니라 **가독성**이다) | **독자로서 한 번 읽어라** — 첫 8줄에 결론이 있나 · 본문이 고정 템플릿에 덮이지 않나 · 마지막 인상이 무엇인가. 렌즈는 이미 있다: `/sim-conductor` A-1(`beginner` cold-read) 또는 직접 렌더해서 읽기. 🟥 **정적 검사는 「없는 것」을 잡고 「안 읽히는 것」은 못 잡는다** — 실측 2건이 독립 수렴했다(qasp 축: 지적 12건 중 스캐너 적발 0 · gstack 3자대면: 배포된 리포트 본문 3줄 vs 고정 템플릿 21줄). pre-commit 이 같은 상기를 advisory 로 낸다(차단 아님) |
957
1001
  | "ready to PR", "about to push", "merge this", "PR 올려줘", FH asset changed in session | 4-axis auto-gate (see above — runs automatically, no proposal needed) |
958
- | **field verdict/gate/safety/irreversible code changed** in a mapped project (function returning a verdict enum / gate exit code / safety-invariant · publish/delete/history path) — **proactive, before merge** | **Field-Harness Load-Bearing Change Gate** (see above → degrade-lint → cross-family review → converge; same rigor as FH assets, applied to field code) |
959
- | **a diff (yours or an unattended pipeline's) alters another harness's actual behavior, gate outcome, or interaction contract** — building automation that opens PRs autonomously, touching a synced/shared-body surface, or any change whose effect crosses a harness boundary (not merely a file-class match — most self-improvement is `not-applicable` here, which is the expected common case) — **proactive, before push, never as a post-PR comment** | **Standpoint axis** (`knowledge/shared/harness-core/field_verdict_crossfamily_gate.md §7` — orthogonal to `crossfamily:`; run the diff from the TARGET harness's own repo/standpoint via `tier2`/`tier2b`/`tier3`, or record `not-applicable`/`DEGRADED_*` on the closed enum. Missed once in-session while building `scripts/frontier_digest_autopilot.sh` 2026-08-15 — mis-routed to `fh-meta:hub-cc-pr-reviewer` (same-repo self-consistency, a different lens) before the operator caught it; this row exists so the next session connects the trigger without two rounds of correction.) |
1002
+ | **field verdict/gate/safety/irreversible code changed** in a mapped project **— or a merge/landing verdict asked on any gate-shaped file, mapped or not** (function returning a verdict enum / gate exit code / safety-invariant · access-control / approval / auth / exposure boundary · publish/delete/history path; «gate-shaped» = the mechanical identifier test in §Field-Harness Load-Bearing Change Gate, not a feel) — **proactive, before merge** | **Field-Harness Load-Bearing Change Gate** (see above → degrade-lint → cross-family review → converge; same rigor as FH assets, applied to field code) |
1003
+ | **a diff (yours or an unattended pipeline's) alters another harness's actual behavior, gate outcome, or interaction contract** — building automation that opens PRs autonomously, touching a synced/shared-body surface, or any change whose effect crosses a harness boundary (not merely a file-class match — most self-improvement is `not-applicable` here, which is the expected common case) — **proactive, before push, never as a post-PR comment** | **Standpoint axis** (`knowledge/shared/harness-core/field_verdict_crossfamily_gate.md §7` — orthogonal to `crossfamily:`; run the diff from the TARGET harness's own repo/standpoint via `tier2`/`tier2b`/`tier3`, or record `not-applicable`/`DEGRADED_*` on the closed enum. Missed once in-session while building `scripts/frontier_digest_autopilot.sh` 2026-08-15 — mis-routed to `fh-meta:harness-pr-reviewer` (same-repo self-consistency, a different lens) before the operator caught it; this row exists so the next session connects the trigger without two rounds of correction.) |
960
1004
  | **"진단해줘", "개선해줘", "diagnose this", "improve this harness", "check this project", "audit this project"** — said while working **in a mapped project** (not a single-file ask) | **Field-Harness Diagnostic** (see §Field-Harness Diagnostic above → compose existing checks into one ranked M/S/R list → HITL approval per item, nothing auto-fixed) |
961
1005
  | **"새 프로젝트", "하네스 작성해줘", "이 프로젝트 가속화", "harness-ify this", "accelerate this project"** — an onboarding/acceleration door (returning-menu ①②③) | **Onboarding / Acceleration Autopilot** (see §Onboarding / Acceleration Autopilot above → Phase 0 auto-discover + branch → innovator-centered recommend → ranked install plan → HITL per item, non-overwriting; "끝까지 자율로" → full-autonomy under /goal-quench gate) |
962
1006
 
package/README.ja.md CHANGED
@@ -437,8 +437,8 @@ Claude Code は作業の複雑さでモデルを自動選択しません — こ
437
437
  | [`tracks/_contrib/`](tracks/_contrib/README.md) | **同意レーン** — 非識別化した作業セッションを共有; レポが運用者たちにまたがって複利で積み上がる |
438
438
 
439
439
  > **FH 論文**: v1.0.1 方法論 · [Zenodo](https://zenodo.org/records/22542168) (DOI
440
- > 10.5281/zenodo.22542168) · cs.SE companion v1.2.1、プレプリント公開 ·
441
- > [Zenodo](https://zenodo.org/records/22635721) (DOI 10.5281/zenodo.22635721) ·
442
- > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218) (2026-09-07 時点で arXiv v1) · cs.AI companion は
440
+ > 10.5281/zenodo.22542168) · cs.SE companion v1.2.2、プレプリント公開 ·
441
+ > [Zenodo](https://zenodo.org/records/22674575) (DOI 10.5281/zenodo.22674575) ·
442
+ > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218) (v2 は 2026-09-09 公開 §6.7 を追加し、タイトルの主張を格下げ。Zenodo v1.2.2 も同日に同一内容で公開され、両者は一致する) · cs.AI companion は
443
443
  > 準備中。これら、独立した収束的研究、そしてそれぞれの但し書き:
444
444
  > [`docs/OUTPUT_EVIDENCE.md`](docs/OUTPUT_EVIDENCE.md)。
package/README.ko.md CHANGED
@@ -425,8 +425,8 @@ Claude Code 는 작업 복잡도로 모델을 자동 선택하지 않습니다.
425
425
  | [`tracks/_contrib/`](tracks/_contrib/README.md) | **동의 레인** — 비식별화된 작업 세션 공유. 레포가 운영자들에 걸쳐 복리로 쌓임 |
426
426
 
427
427
  > **FH 논문**: v1.0.1 방법론 · [Zenodo](https://zenodo.org/records/22542168) (DOI
428
- > 10.5281/zenodo.22542168) · cs.SE companion v1.2.1, 프리프린트 공개 ·
429
- > [Zenodo](https://zenodo.org/records/22635721) (DOI 10.5281/zenodo.22635721) ·
430
- > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218) (2026-09-07 기준 arXiv v1) · cs.AI companion
428
+ > 10.5281/zenodo.22542168) · cs.SE companion v1.2.2, 프리프린트 공개 ·
429
+ > [Zenodo](https://zenodo.org/records/22674575) (DOI 10.5281/zenodo.22674575) ·
430
+ > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218) (v2 는 2026-09-09 등재 §6.7 신설 · 제목의 주장 등급강등. Zenodo v1.2.2 도 같은 날 같은 내용으로 발행돼 두 예치가 일치한다) · cs.AI companion
431
431
  > 준비 중. 이것들과 독립적인 수렴 연구, 그리고 각각의 주의사항:
432
432
  > [`docs/OUTPUT_EVIDENCE.md`](docs/OUTPUT_EVIDENCE.md).
package/README.md CHANGED
@@ -416,8 +416,8 @@ and the phrase that triggers it:
416
416
  | [`tracks/_contrib/`](tracks/_contrib/README.md) | **Consent lane** — share a de-identified work session; the repo compounds across operators |
417
417
 
418
418
  > **FH papers**: v1.0.1 methodology · [Zenodo](https://zenodo.org/records/22542168) (DOI
419
- > 10.5281/zenodo.22542168) · cs.SE companion v1.2.1, preprint ·
420
- > [Zenodo](https://zenodo.org/records/22635721) (DOI 10.5281/zenodo.22635721) ·
421
- > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218) (arXiv shows v1 as of 2026-09-07) · cs.AI companion in
419
+ > 10.5281/zenodo.22542168) · cs.SE companion v1.2.2, preprint ·
420
+ > [Zenodo](https://zenodo.org/records/22674575) (DOI 10.5281/zenodo.22674575) ·
421
+ > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218) (v2 announced 2026-09-09 — adds Sec. 6.7 and downgrades the title's claim; Zenodo v1.2.2 was published the same day with the same content, so the two deposits agree) · cs.AI companion in
422
422
  > preparation. Those, the independent convergent work, and the caveats on each:
423
423
  > [`docs/OUTPUT_EVIDENCE.md`](docs/OUTPUT_EVIDENCE.md).
package/README.zh.md CHANGED
@@ -404,8 +404,8 @@ Claude Code 不会按任务复杂度自动选择模型 —— 这个要你设置
404
404
  | [`tracks/_contrib/`](tracks/_contrib/README.md) | **同意通道** —— 分享一个去标识化的工作会话;仓库在众多操作者之间复利累积 |
405
405
 
406
406
  > **FH 论文**:v1.0.1 方法论 · [Zenodo](https://zenodo.org/records/22542168)(DOI
407
- > 10.5281/zenodo.22542168)· cs.SE companion v1.2.1,预印本公开 ·
408
- > [Zenodo](https://zenodo.org/records/22635721)(DOI 10.5281/zenodo.22635721)·
409
- > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218)(截至 2026-09-07,arXiv v1)· cs.AI companion
407
+ > 10.5281/zenodo.22542168)· cs.SE companion v1.2.2,预印本公开 ·
408
+ > [Zenodo](https://zenodo.org/records/22674575)(DOI 10.5281/zenodo.22674575)·
409
+ > [arXiv:2609.04218](https://arxiv.org/abs/2609.04218)(v2 2026-09-09 公布 — 新增 §6.7 并下调标题主张;Zenodo v1.2.2 于同日以相同内容发布,两处存档一致)· cs.AI companion
410
410
  > 筹备中。这些、独立的收敛性工作,以及每一项的注意事项:
411
411
  > [`docs/OUTPUT_EVIDENCE.md`](docs/OUTPUT_EVIDENCE.md)。
@@ -36,7 +36,7 @@
36
36
  | Artifact | Reference |
37
37
  |---|---|
38
38
  | Paper v1.0.1 — methodology | Zenodo DOI [`10.5281/zenodo.22542168`](https://zenodo.org/records/22542168) (all versions: `10.5281/zenodo.20397565`) — 2-layer design, 6-axis framework, 4-agent orchestration, compounding loop, with empirical evidence. **arXiv: rejected at moderation (2026-09-06)**; v1.0.1 is the corrected version (11 of 17 reference entries in v1.0 did not match the works cited — see the erratum in the record). Do not read the rejection as an assessment of the methodology, and do not read v1.0.1 as re-reviewed: it has not been resubmitted |
39
- | cs.SE companion — governance-gate methodology | **preprint, publicly posted** · Zenodo DOI [`10.5281/zenodo.22635721`](https://zenodo.org/records/22635721) (v1.2.1; the record's description carries the per-version change notes — v1.2 added the replication section and withdrew two previously reported results; v1.2.1 propagates that withdrawal into the abstract and the conclusion, which v1.2 had left unrevised; all versions `10.5281/zenodo.20680080` · CC-BY-4.0) · [`arXiv:2609.04218`](https://arxiv.org/abs/2609.04218) (cs.SE; submitted 2026-07-01, announced 2026-09). 🟥 **As of 2026-09-07 the arXiv record is still v1**, whose abstract carries the severity-differential sentence that §6.6 of the linked Zenodo record withdraws open both and compare. **Author-reported, not visible on the public record:** a v2 with the v1.2.1 content was submitted 2026-09-07 and its submission confirmation gives a *scheduled* announcement date of 2026-09-09. 🟥 arXiv is a moderated preprint server; moderation is not peer review, and neither the Zenodo deposit nor the arXiv posting establishes peer review, editorial acceptance, or venue acceptance |
39
+ | cs.SE companion — governance-gate methodology | **preprint, publicly posted** · Zenodo DOI [`10.5281/zenodo.22674575`](https://zenodo.org/records/22674575) (v1.2.2; the record's description carries the per-version change notes — v1.2 added the replication section and withdrew two previously reported results; v1.2.1 propagates that withdrawal into the abstract and the conclusion, which v1.2 had left unrevised; v1.2.2 adds Sec. 6.7 and downgrades the title and abstract accordingly; all versions `10.5281/zenodo.20680080` · CC-BY-4.0) · [`arXiv:2609.04218`](https://arxiv.org/abs/2609.04218) (cs.SE; submitted 2026-07-01, announced 2026-09). **v2 announced 2026-09-09** and is on the public record: it carries the v1.2.2 content, adds §6.7 (an independent-session re-test of ground-truth recall under condition-blind scoring, which **does not replicate** §6.2's strict-recall contrast — the two conditions come out one strict hit apart in 24), downgrades the title's last clause from *Evidence* to *a Test of*, and turns the abstract's closing claim into a **hypothesis**. ✅ **The two deposits agree as of 2026-09-09.** Zenodo v1.2.2 (DOI `10.5281/zenodo.22674575`) was published that day carrying the same content as arXiv v2, and the record declares a machine-readable `isIdenticalTo arXiv:2609.04218` relation. This was verified by reading the **published record's API**, not the submission form creators, license, keywords, the description, the file md5, and the version count were re-read after publication and after the metadata edit, and none changed. The earlier divergence (arXiv v1.2.2 against Zenodo v1.2.1) is therefore closed; the superseded v1.2.1 remains separately citable at `10.5281/zenodo.22635721`. 🟥 arXiv is a moderated preprint server; moderation is not peer review, and neither the Zenodo deposit nor the arXiv posting establishes peer review, editorial acceptance, or venue acceptance |
40
40
  | cs.AI companion — "Governance Dividend" | in preparation |
41
41
  | Package | npm [`@chrono-meta/fh-gate`](https://www.npmjs.com/package/@chrono-meta/fh-gate) — multi-backend governance gate (claude · codex · auto) |
42
42
  | Codex-compatible | `docs/codex-compat.md` — methodology layer runs model-agnostic. Marked **beta** there in the *validation-maturity* sense (external validation is still thin), **not** the *scope* sense: partial automation-layer support is the design, not an unfinished state |
@@ -131,7 +131,7 @@ rather than only synthetic ones.
131
131
 
132
132
  ```bash
133
133
  # active skills. NOTE: the old recipe here grepped each SKILL.md for "redirect stub"/"deprecated"
134
- # and returned 38, because phantom-quench and hub-cc-pr-reviewer — both live — merely MENTION those
134
+ # and returned 38, because phantom-quench and harness-pr-reviewer — both live — merely MENTION those
135
135
  # words in their prose. A body-text grep cannot tell "I am a stub" from "I detect stubs". There are
136
136
  # currently zero stubs, so count the files and re-introduce an exclusion only when one exists, in
137
137
  # frontmatter where it can be matched on a field rather than on a phrase.
@@ -41,7 +41,7 @@ to FH itself and to the field harnesses it emits.
41
41
  | 42001 A.7 data (A.7.2–A.7.6) | acquisition, quality, provenance, preparation | FH holds no training data but does hold **evaluation data** (probes, corpora, transcripts, logs): provenance = sim header `corpus_head_date` · quality = known-pair calibration · preparation = residency strip · **company residency is absolute** | `probes_live.yaml`, `scripts/residency_closure_scan.py` | 🟡 provenance/preparation present; no written acquisition or quality criteria for evaluation data |
42
42
  | ISO/IEC 5338 life cycle | define · control · execute · improve | incubator (chamber) → EMIT → field → harvest-loop compounding | `harness_incubator_doctrine.md`, `hub_compounding_loop.md` | ✅ |
43
43
  | ISO/IEC 23894 risk management | identify · analyse · evaluate · treat | ship-readiness grades · Surface-Class Degrade Invariant (irreversible = fail-closed) | `ship_readiness_gate.md`, `CLAUDE.md §Irreversibility Gates` | ✅ partial |
44
- | ISO/IEC 20246 reviews | work-product reviews | cross-family review · `/apex-review` · `hub-cc-pr-reviewer` · cold read (`beginner`) | `plugins/fh-meta/agents/` | ✅ |
44
+ | ISO/IEC 20246 reviews | work-product reviews | cross-family review · `/apex-review` · `harness-pr-reviewer` · cold read (`beginner`) | `plugins/fh-meta/agents/` | ✅ |
45
45
 
46
46
  ## What a field harness inherits
47
47
  A harness FH emits gets the same rows for free where it adopts the templates (`templates/.git-hooks/*`, the marker schema, the
@@ -113,7 +113,7 @@ When `codex exec` runs **inside this repo**, FH's Claude-native git/Stop/PostToo
113
113
  M2 skills (`deliberation`, `steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop`) have a core workflow that runs under Codex, but any step that dispatches `Agent(subagent_type=...)` or a slash command must be replaced by `fh-run` or a direct `codex exec` call reading the sub-agent's `SKILL.md`/agent `.md` — same workflow, different runtime (the "M2 adaptation pattern" in `AGENTS.md`). Example: `steel-quench` Waves 1–3 run; the `quench-challenger` agent step becomes `fh-run --agent fh-commons:quench-challenger`.
114
114
 
115
115
  ### 3. M3 skills do not run automatically under Codex
116
- M3 skills (`goal-quench` Phase-3 Stop hook, `hub-cc-pr-reviewer` CC session context, `install-wizard` settings.json write) require Claude-Code-native runtime and are **methodology reference only** under Codex unless a dedicated adapter exists. Use Codex's native goal/session features for goal control, and use `fh-gate` after completion for FH quality gating.
116
+ M3 skills (`goal-quench` Phase-3 Stop hook, `harness-pr-reviewer` CC session context, `install-wizard` settings.json write) require Claude-Code-native runtime and are **methodology reference only** under Codex unless a dedicated adapter exists. Use Codex's native goal/session features for goal control, and use `fh-gate` after completion for FH quality gating.
117
117
 
118
118
  ### 4. No token accounting
119
119
  Codex token usage is billed in the Codex CLI quota and is **not** recorded in any FH session log or orchestrator measurement. Cross-family runs (Gemini/Codex) are invisible to FH's token-budget tooling by construction.
@@ -178,7 +178,7 @@ is not the headless substitute.
178
178
  |---|---|---|
179
179
  | **M1 — Full** | No Claude-native dependency | `token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop` |
180
180
  | **M2 — Partial** | Core works; native agent/slash-command steps need adaptation | `deliberation`, `steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop` |
181
- | **M3 — Claude-only** | Requires a Claude hook or session-scoped dispatch | `goal-quench`, `hub-cc-pr-reviewer`, `install-wizard` |
181
+ | **M3 — Claude-only** | Requires a Claude hook or session-scoped dispatch | `goal-quench`, `harness-pr-reviewer`, `install-wizard` |
182
182
 
183
183
  **Which phase needs adapting** — the operative half of the M2/M3 rows. Without this a tier label
184
184
  tells a non-Claude runtime that a skill is "partial" but not *where* to intervene, which is the only
@@ -191,7 +191,7 @@ move, these per-skill cues did not, and they existed in no other file.)
191
191
  | `harvest-loop` | the git-scan phase | PR auto-proposal |
192
192
  | `deliberation` | proposal/synthesis structure | Mediator and Jury agent steps |
193
193
  | `goal-quench` (M3) | — | Phase 3 depends on a Claude Stop hook |
194
- | `hub-cc-pr-reviewer` (M3) | — | needs Claude session context |
194
+ | `harness-pr-reviewer` (M3) | — | needs Claude session context |
195
195
  | `install-wizard` (M3) | — | writes `settings.json` |
196
196
 
197
197
  For M2, replace `Agent(subagent_type=...)` and slash-command steps with `fh-run` or direct
@@ -173,6 +173,32 @@ destroys live state without anyone noticing. This is why the loss class is calle
173
173
 
174
174
  ---
175
175
 
176
+ ### Scholarly deposit (Zenodo / DOI / arXiv) — measured 2026-09-07, why Step 1b exists
177
+
178
+ Two things happened on the same day, on the same record (`10.5281/zenodo.22542168`, v1.0.1):
179
+
180
+ 1. **Form ≠ server.** The rich-text description and the companion-DOI related identifier were visible
181
+ in the deposit form and **absent** from `/api/records/<id>/draft`. The editor had not flushed its
182
+ state to the server. Nothing in the Pre-Publish gate covered this surface; a hand API read caught it
183
+ minutes before Publish.
184
+ 2. **The machine fields outlive the PDF.** v1.0.1 is a *corrective* release: its body fixes eleven
185
+ misattributed references. Its Zenodo `references` field still carried **all eleven** pre-correction
186
+ attributions — the exact strings the release existed to retract — because the PDF was replaced and
187
+ the metadata was not. `references` / `related identifiers` are what DataCite and citation graphs
188
+ consume; the PDF is what a human opens. Fixed by editing the record (22 → 24 entries, verified
189
+ server-side, DOI unchanged).
190
+
191
+ Consequences that became the four Step 1b items: read the draft through the **service's** API (Zenodo
192
+ InvenioRDM `/api/records/<id>/draft`, legacy `/api/deposit/depositions/<id>`, figshare
193
+ `/v2/account/articles/<id>`), compare against the text you pasted (string vs JSON), md5 the file, and
194
+ on a corrective release diff the machine fields too. The post-publish read is a **detector**, not a
195
+ gate — a wrong field there is fixed by a new corrective version, never silently.
196
+
197
+ Salience check (same day, floor tier, blind, reps 3, one variable — the edited text injected into a
198
+ clean clone via `--setup`): before 0–1/3 → after 3/3 on all four items. ⚠️ The first sim run was void:
199
+ `sim_isolated_run.sh` clones **HEAD**, so uncommitted edits were absent from every arm — it measured
200
+ the pre-change tree. Recorded so the next author injects the working tree instead of trusting the clone.
201
+
176
202
  ## §Pre-Publish-Hook-Coverage
177
203
 
178
204
  **Hook coverage — three distinct actions** (refined 2026-06-17 for (a)/(b); (c) added 2026-06-27):
@@ -566,7 +566,7 @@ standpoint: ⓑ 는 **자기 필드**가 정본이고, `axes-run` 은
566
566
  | **질문하기** | `external-grounding` | ④ 프런티어→조직 전파 |
567
567
 
568
568
  - **영혼 = 정체성 선언이 아니라 판단의 좌표계**다(무엇이 성공 · 어디로 기움 · 범위 밖 ·
569
- 절대 안 함). 페르소나 선언은 105런 실측에서 **약모델 순손실**이므로 넣지 않는다.
569
+ 절대 안 함). 페르소나 선언은 **v2a 팔(12)** 실측에서 **약모델 순손실**이므로 넣지 않는다(🟥 이 발견은 2×2 팩토리얼 81런이 아니라 `CORE IDENTITY` 절만 제거한 **12런 단일변수 팔**의 것이다 — 「105런 실측」으로 부르면 근거를 9배 부풀린다).
570
570
  형식 검사기: `scripts/judgment_circuit_lint.sh`.
571
571
  - **영혼은 한 번에 안 만들어진다** — FH 는 **씨앗 초안**만 주고, 실제로 채워지는 것은
572
572
  현장 하네스가 사용자에 의해 무수히 사용되면서다. 등급 대응: