@chrono-meta/fh-gate 1.4.77 → 1.4.78

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.
@@ -114,6 +114,69 @@ no runnable path exists (run-first, ask-last — sonnet_floor_doctrine.md §Auto
114
114
 
115
115
  Record sim results in the Axes 2–3 marker + sub-agent invocation log.
116
116
 
117
+ ### Reviewer-visible evidence — the marker is not readable from the other side
118
+
119
+ **Rule**: a PR touching FH assets carries a **sanitized evidence capsule** in its body — what was
120
+ run, what it returned, what was found and closed — plus, for any verdict reported as a **grade, tier
121
+ or code**, both the **inline expansion** and the **canonical definition's location**
122
+ (`sim grade F = Functional/PASS — scale: sim-conductor SKILL.md §Area-D`). A bare letter is not a
123
+ verdict to anyone outside the author's vocabulary, and a decoded letter is still only *semantics* —
124
+ it says what the grade means, never that the run produced it. Keep those two separate.
125
+
126
+ **Never paste the raw marker.** Write the capsule; do not copy the file. The marker is a local
127
+ artifact that may quote paths, hostnames, internal asset names, or unredacted findings, and
128
+ **§Company residency forbids those reaching a log, comment, or paste** (`CLAUDE.md` — "not into a
129
+ log, comment, or paste"). A PR body is a paste on a public surface. This matters mechanically, not
130
+ just in principle: the pre-commit confidentiality guard scans **staged tracked content** and has no
131
+ view of PR-body text, so a body is *outside* the repo's mechanical privacy floor. Run the
132
+ public-surface scan over the capsule text before creating or editing the body. (Cross-family review
133
+ 2026-07-30 caught this: the first draft of this rule said "inline the evidence itself", which pointed
134
+ authors straight through that gap — the residency floor and the reviewer-visibility goal were pulling
135
+ in opposite directions and only one of them had a hook.)
136
+
137
+ **Why this is structural, not politeness**: the marker file itself is **gitignored by design**
138
+ (`.gitignore` `tracks/**` — verify per file with `git check-ignore -v <marker>`; a couple of
139
+ force-added files elsewhere under `tracks/_meta/` do not change it for markers). So the
140
+ machine-checkable evidence for a change exists only on the author's machine — a reviewer on another
141
+ session, another worktree, or another runtime **cannot reach it**.
142
+ The gate is satisfied and the reviewer still has nothing but prose. This is the same shape as the
143
+ gate-locality defect (a gate placed where the actor that needs it cannot read it), one layer over:
144
+ **evidence placed where the reviewer cannot read it**.
145
+
146
+ **Measured 2026-07-30 (PR #205, a Codex-authored change reviewed by Claude)**: the PR body reported
147
+ `salience cold-start simulation: grade F`. The reviewer could not resolve it — the marker was in a
148
+ gitignored path inside the author's worktree — and recorded it as UNVERIFIED. `F` in fact meant
149
+ **Functional**, the PASS grade of sim-conductor's Area-D consumer scale
150
+ (`plugins/fh-meta/skills/sim-conductor/SKILL.md` §Area-D — `F` functional / `P` partial / `B` broken),
151
+ i.e. the sim had *passed*. Two failures, one on each side, and the rule addresses both: the author
152
+ reported a coded verdict without its scale, and the reviewer's own grep surfaced the defining file
153
+ and the reviewer did not open it. **A pointer your instrument hands you is not optional reading.**
154
+
155
+ **Degrade direction — and it does NOT satisfy the rule.** Evidence that cannot be sanitized into a
156
+ capsule is declared, never dropped, and never silently counted as met:
157
+
158
+ ```
159
+ LOCAL-ONLY ATTESTATION — UNVERIFIED: <one-line result> (record: local marker <name>)
160
+ ```
161
+
162
+ That line is **an author's claim, not reviewer-visible evidence**. It leaves the requirement
163
+ *unmet*, and the PR proceeds only by one of: a sanitized reproducible capsule · an authorized
164
+ independent review on a machine that can read the record · explicit operator acceptance of the
165
+ unverified state. Silence reads as verified, which is why the label is mandatory — but the label is
166
+ an honest gap, not a way to close one. **Never restate a local-only result as though the reviewer
167
+ confirmed it**, and note that inlining a marker field proves nothing about provenance either: the
168
+ marker's own scope is form + non-vacuity + auditability, **not** that the run happened (see the
169
+ marker-scope note above).
170
+
171
+ **Enforcement boundary — say which half is mechanical.** An earlier draft of this rule claimed no
172
+ hook could enforce any of it. That was overbroad: **presence and syntax are mechanizable** — a
173
+ `pull_request` CI status can check that an applicable PR carries a capsule, that graded verdicts are
174
+ expanded, and that a local-only attestation is labelled; a local `gh pr create/edit` wrapper can run
175
+ the private-pattern scan that public CI cannot (public CI must never hold the private patterns).
176
+ What stays un-mechanizable is **truth and provenance** — whether the capsule describes a run that
177
+ actually happened. Neither anchor is built today; that is a named residual, and a rule that
178
+ over-claims its own floor is the defect this file exists to prevent.
179
+
117
180
  > **Detail**: See `knowledge/shared/harness-core/claude_md_gate_details.md §Sim-Dispatch-Fallback` — the
118
181
  > headless `claude -p --model` fallback when in-session model-pin is unavailable, the saturation-disguise
119
182
  > retry (compact-then-retry once), and the credit-pool caveat — read when a model-pinned dispatch fails.
@@ -11,13 +11,13 @@
11
11
  "plugins": [
12
12
  {
13
13
  "name": "fh-meta",
14
- "version": "1.4.77",
14
+ "version": "1.4.78",
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.77",
20
+ "version": "1.4.78",
21
21
  "description": "Project-agnostic utility skills — 4 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
22
22
  "source": "./plugins/fh-commons"
23
23
  }
package/AGENTS.md CHANGED
@@ -1,283 +1,119 @@
1
- # AGENTS.md — forge-harness Sub-Agent Specs
1
+ # AGENTS.md — forge-harness Runtime Entry Point
2
2
 
3
- > **This file is the runtime agent specification registry for forge-harness.**
4
- > For session rules and orchestration protocol, see `CLAUDE.md`.
5
- > For skill descriptions and natural language triggers, see `plugins/fh-meta/` and `plugins/fh-commons/`.
6
-
7
- ---
3
+ > **Always-loaded layer.** Keep agent selection and rules that must govern every runtime here.
4
+ > Load execution examples, compatibility history, and conditional procedures only through the
5
+ > imperative pointers below.
8
6
 
9
7
  ## Relationship to CLAUDE.md
10
8
 
11
9
  | File | Scope | Audience |
12
10
  |---|---|---|
13
- | `CLAUDE.md` | Session rules, protocols, orchestration flow | AI (Claude Code) — operational ruleset |
14
- | `AGENTS.md` | Runtime agent specs roles, tools, invocation | AI + humans — agent registry |
15
-
16
- CLAUDE.md governs *how* the session runs. AGENTS.md defines *what each agent does* when dispatched.
11
+ | `CLAUDE.md` | Session rules, protocols, orchestration flow | Claude Code |
12
+ | `AGENTS.md` | Portable runtime rules, agent roles, dispatch boundaries | AI runtimes + humans |
17
13
 
18
- ---
14
+ `CLAUDE.md` governs Claude-native automation. This file is the portable entry point for Codex and
15
+ other non-Claude runtimes, which do not auto-load `.claude/rules/*.md`.
19
16
 
20
17
  ## Agent Registry
21
18
 
22
- forge-harness ships 8 tracked agents across plugin `agents/` directories. The **user-mastery spectrum** (`beginner` · `main-player` · `expert`) plus `challenger` (adversarial axis) supply multi-persona review; `fact-checker`, `hub-persona-auditor`, and `persona-innovator` serve general harness operations; `quench-challenger` is steel-quench-dedicated.
19
+ forge-harness ships 8 tracked agents. The user-mastery spectrum (`beginner` · `main-player` ·
20
+ `expert`) plus `challenger` supplies multi-persona review; the remaining agents serve harness
21
+ operations or steel-quench.
23
22
 
24
23
  | Agent | File | Role | Invoked by |
25
24
  |---|---|---|---|
26
- | `beginner` | `plugins/fh-meta/agents/beginner.md` | First-contact cold-read standpoint (spectrum entry tier) — onboarding friction a fluent author cannot feel; constructive, not adversarial | `sim-conductor` Area A, `marketplace-gate`, `install-wizard`, or direct dispatch |
27
- | `main-player` | `plugins/fh-meta/agents/main-player.md` | Engaged-user standpoint (spectrum core tier) — intelligently scopes Light/Midcore/Heavy; Heavy = classic power-user edge/limit lens | `sim-conductor` Area A/D-code, or direct dispatch |
28
- | `expert` | `plugins/fh-meta/agents/expert.md` | Domain-authority standpoint (spectrum frontier tier) — web-grounded accuracy + SOTA currency, citation-enforced | `sim-conductor` Area E/D, paper review, or direct dispatch |
29
- | `challenger` | `plugins/fh-meta/agents/challenger.md` | Frontier-grade adversarial evaluator — adapts attack vectors to artifact type, enforces evidence citation, models its own information asymmetry; U1 absorbs the skeptic "why not just X?" lens | `steel-quench`, `harvest-loop`, `sim-conductor`, or direct dispatch |
30
- | `fact-checker` | `plugins/fh-meta/agents/fact-checker.md` | Pre-recommendation deduplication greps hub assets for existing skills/agents/patterns before main agent commits to a new recommendation; catches stale facts and duplicate work | Main agent before any new asset creation or recommendation |
31
- | `hub-persona-auditor` | `plugins/fh-meta/agents/hub-persona-auditor.md` | Pre-publication audit of external-facing assets — 3+ persona simulation, 4-axis review (resonance/confusion/resistance/supplement), 3-tier revision proposals | `hub-cc-pr-reviewer`, `sim-conductor`, or direct dispatch |
32
- | `quench-challenger` | `plugins/fh-commons/agents/quench-challenger.md` | Steel-quench dedicated adversary — 3-DNA synthesis of Devil + Innovator + Prescriber; every attack paired with a concrete fix direction | `steel-quench` Wave 1 (primary), `install-doctor`, `marketplace-gate` |
33
- | `persona-innovator` | `plugins/fh-meta/agents/persona-innovator.md` | Naming gap detection + frame proposals + external frontier absorption signals | `sim-conductor` Area A, `harvest-loop`, or direct dispatch |
34
-
35
- > Machine-readable mirror: `.claude/registry/agent_cards.json` (canonical capability cards, count-synced to tracked agent files — A2A Agent Card pattern).
36
-
37
- ### Tool restrictions per agent
38
-
39
- | Agent | Allowed tools | Rationale |
40
- |---|---|---|
41
- | `challenger` | Read, Grep, Glob, WebSearch, WebFetch | Needs external evidence; no writes |
42
- | `fact-checker` | Read, Grep, Glob | Deduplication grep only — no modification |
43
- | `hub-persona-auditor` | Read, Grep, Glob | Audit only — no modification |
44
- | `quench-challenger` | Read, Grep, Glob | Attack+prescription only — no modification |
45
- | `persona-innovator` | Read, Grep, Glob, WebSearch, WebFetch | Frontier scanning requires web access |
46
-
47
- ---
48
-
49
- ## 2-Layer Architecture Context
50
-
51
- forge-harness is structured as two distinct layers:
52
-
53
- | Layer | Contents | AI compatibility |
54
- |---|---|---|
55
- | **Methodology layer** (model-agnostic) | `tracks/`, `knowledge/`, `SKILL.md` documents, session protocols | Any AI model |
56
- | **Automation layer** (Claude-native) | `plugins/*/agents/` (plugin channel — FH's own agents, auto-loaded when the plugin is enabled), hooks, slash commands, `CLAUDE.md` rules; `.claude/agents/` is the field-project local/override slot, unused by FH itself | Claude Code only |
57
-
58
- Agents in this registry belong to the **Automation layer**. Skills (in `plugins/`) straddle both layers — their methodology is model-agnostic, but their invocation mechanism is Claude Code-native.
59
-
60
- > **Codex-compatible beta**: The Methodology layer (`tracks/`, `knowledge/`, skill documentation) is designated Codex-compatible beta. Gemini, Codex, and other AI users can apply FH methodology without the Automation layer — manual invocation replaces hook/agent dispatch.
61
-
62
- > **Directory → destination routing (where your outputs belong)**: not everything in the methodology layer is public-shareable. `knowledge/` and `SKILL.md` docs are the **public, reusable** methodology. `tracks/` is **local / private by convention** — work history, session records, `fh_signal_*`, audit logs — and is gitignored on the public mirror. An AI working in a local workspace that pairs the public mirror with a private companion store (the `*-be` pattern) must **not** infer "same folder ⇒ same repository"; route by content type:
63
- >
64
- > | Content | Default destination |
65
- > |---|---|
66
- > | reusable methodology · docs · skills · public guidance · polished external-facing conclusions | public mirror (`knowledge/`, `plugins/`, `docs/`) |
67
- > | raw signal · operator observation · private validation · handoff · paper draft · PR-background reasoning log | private companion store (`*-be` pattern) — or keep local; do **not** commit to the public mirror |
68
- >
69
- > When unsure, treat raw / observational / operator-specific material as **private-first** and promote only the polished result to public. (Concrete per-operator bindings — exact companion-store path, sync mechanism — live in the operator's local config, not here.)
70
-
71
- > **Multi-model sidecar (validated)**: Any FH user can delegate to other models via sidecar — Gemini CLI, OpenAI/Codex CLI, or Copilot CLI's model catalog — invoked with `Bash` from within the Claude Code session. FH is the orchestrating harness; the sidecar is a routing/access layer (not a second harness — different layer entirely). Validated empirically: `echo "prompt" | gemini` works inside a CC session and produces usable output. Sidecar calls are Bash invocations, not agent dispatches — they bypass this registry and are coordinated inline by the skill. Capability routing matters too: Gemini/Antigravity is the natural breadth/multimodal sidecar, while Codex's primary cast is the **repo-grounded audit** sidecar (file reads · grep/source-close · diff & patch · gate execution · phantom/backtrace) — **not** discovery/design-depth; a Codex session with Browser/Chrome connectors mounted can additionally take live web-flow automation as a capability-routed handoff. In a local FH workspace that pairs the public methodology mirror with a private companion store (the `*-be` pattern), route by workspace capability while preserving each repository's ownership boundary. See `knowledge/shared/harness-core/multi_model_sidecar_strategy.md §Runtime Authority` for the authority model and the full pattern.
72
-
73
- > **Waiting on a sidecar — mechanical, not by eye (2026-07-29).** A sidecar you dispatched is judged
74
- > ONLY by the typed verdict line from `scripts/sidecar_wait.sh`:
75
- >
76
- > ```bash
77
- > printf '%s' "$prompt" | bash scripts/sidecar_wait.sh out.txt 900 -- codex exec -m gpt-5.5 -
78
- > # SIDECAR_VERDICT=COMPLETE exit=0 bytes=48489 → read out.txt
79
- > # SIDECAR_VERDICT=TIMEOUT waited=900s bytes=0 → STILL ALIVE, not a result
80
- > # SIDECAR_VERDICT=EMPTY exit=0 → the only state meaning "it said nothing"
81
- > ```
82
- >
83
- > **Never judge a sidecar by looking at its output file.** A live process and a dead one produce the
84
- > same zero bytes, and only process state separates them. Measured here: a session backgrounded two
85
- > sidecars, read their files after 1 s and 30 s, recorded *"both returned 0-output"* into five
86
- > records — and both had answered, with four real findings, one of which showed the change under
87
- > review was over-applied. The mis-read nearly retired a working mechanism. This rule is repeated in
88
- > this file because line 71 tells you to invoke sidecars with `Bash`; a runtime reading only that
89
- > would dispatch with no waiting discipline at all. Canonical: `auto-decorrelation` SKILL.md §S-1b.
90
-
91
- > **Runtime authority — hard stop line (Codex / non-Claude runtimes):** your findings are **evidence candidates, not terminal verdicts**. They are not final until the governor source-closes them against a **mechanical anchor** (a local file hit · a literal source span · a passing check) — **never governor agreement alone**. You are a capability-routed **sidecar**, not a co-governor: there is one explicit governor per context. Full doctrine: `knowledge/shared/harness-core/multi_model_sidecar_strategy.md §Runtime Authority`.
92
-
93
- ---
94
-
95
- ## Invocation patterns
96
-
97
- ### Single agent dispatch
98
-
99
- ```
100
- Analyze this SKILL.md for structural flaws before I commit it.
101
- ```
102
-
103
- → Claude dispatches `quench-challenger` automatically (description-triggered).
104
-
105
- ### Parallel dispatch (2+ independent tasks)
106
-
107
- ```
108
- Run fact-checker and persona-innovator in parallel.
109
- First: check [asset path] for duplicates
110
- Second: scan for naming gaps in the current harness
111
- ```
112
-
113
- → Both agents run concurrently in Agent View; results are integrated by the orchestrator.
114
-
115
- ### Wave-based composition (via agent-composer)
116
-
117
- For complex multi-step tasks, run `/agent-composer` first to plan which agents to dispatch in which order (Wave 0 reconnaissance → Wave 1 execution → Wave 2 synthesis).
118
-
119
- ---
120
-
121
- ## Codex Compatibility (beta)
25
+ | `beginner` | `plugins/fh-meta/agents/beginner.md` | First-contact cold read; finds onboarding friction | `sim-conductor` Area A, `marketplace-gate`, `install-wizard`, direct |
26
+ | `main-player` | `plugins/fh-meta/agents/main-player.md` | Engaged-user view; scopes Light/Midcore/Heavy usage | `sim-conductor` Area A/D-code, direct |
27
+ | `expert` | `plugins/fh-meta/agents/expert.md` | Web-grounded domain accuracy and current practice | `sim-conductor` Area E/D, paper review, direct |
28
+ | `challenger` | `plugins/fh-meta/agents/challenger.md` | Evidence-cited adversarial evaluation | `steel-quench`, `harvest-loop`, `sim-conductor`, direct |
29
+ | `fact-checker` | `plugins/fh-meta/agents/fact-checker.md` | Pre-recommendation duplicate and stale-fact search | Before new asset creation or recommendation |
30
+ | `hub-persona-auditor` | `plugins/fh-meta/agents/hub-persona-auditor.md` | External-facing pre-publication persona audit | `hub-cc-pr-reviewer`, `sim-conductor`, direct |
31
+ | `quench-challenger` | `plugins/fh-commons/agents/quench-challenger.md` | Steel-quench attack plus concrete fix direction | `steel-quench` Wave 1, `install-doctor`, `marketplace-gate` |
32
+ | `persona-innovator` | `plugins/fh-meta/agents/persona-innovator.md` | Naming gaps, frame proposals, frontier signals | `sim-conductor` Area A, `harvest-loop`, direct |
122
33
 
123
- The methodology layer (`tracks/`, `knowledge/`, `SKILL.md` docs) is Codex-compatible beta. Any AI model can follow skill workflows by reading SKILL.md files directly; the automation layer (hooks, plugin-channel agents under `plugins/*/agents/`, `/model`) is Claude Code-native and requires manual adaptation. FH's own agents are auto-loaded via the plugin channel when the plugin is enabled — `.claude/agents/` is the field-project override slot, not where FH ships its agents. Non-Claude runtimes use this `AGENTS.md`, `plugins/*/agents/*.md`, and `scripts/fh-run.sh` to apply the same methodology via adapter.
34
+ Machine-readable mirror: `.claude/registry/agent_cards.json`.
124
35
 
125
- ### Non-Claude runtimes: five things CLAUDE.md holds that you will not auto-load
36
+ ### Tool restrictions
126
37
 
127
- `.claude/rules/*.md` with `paths:` frontmatter is a **Claude Code platform feature** — those files are
128
- auto-loaded into a Claude Code session when it reads a matching file, and **your runtime has no equivalent**.
129
- So five things that govern behavior are not going to reach you on their own. Read them explicitly:
130
-
131
- 1. **FH asset changes run a mandatory 4-axis verification chain before the session's first commit.**
132
- Detail (axis definitions · marker required fields · lightweight exception · substantive carve-out):
133
- `.claude/rules/fh_4axis_gate.md` — **open it directly**; nothing will load it for you. The commit is
134
- hard-blocked by `templates/.git-hooks/pre-commit` regardless of runtime, so skipping the read does not
135
- skip the gate — it just means you meet the block without knowing what it wants.
136
- ⚠️ If you run `templates/regression_guard.sh` (Axis 1) yourself, **`exit 0` means PASS *or* SKIP** —
137
- SKIP being "no staged file matched the gate's pathspec", which is *not checked*, not *checked and
138
- clean*. Prefer the typed file channel — set `REGRESSION_GUARD_RESULT_FILE=<path>` and read
139
- `result=pass|review|block|skip|error` from that file (stdout's `REGRESSION_GUARD_RESULT=` line is
140
- the no-env fallback). Judging by exit code
141
- alone lets an unexamined change report as a pass (measured 2026-07-22: that is exactly what the
142
- commit hook did until it was fixed).
143
- 2. **Company residency is absolute** (CLAUDE.md §Field-Harness Diagnostic): raw company source, secrets,
144
- hostnames, internal repo/asset names, stack traces, and unredacted findings **never leave the local
145
- machine** — not to an external *or same-family* cloud model, not through a browser/API tool, not into a
146
- log, comment, or paste. Outbound gets a **sanitized summary only**; exceptions need explicit operator
147
- approval plus a gitignored audit note. This binds every runtime, not just Claude Code — a leak does not
148
- un-happen, and the guard is worth nothing if it only lives where one runtime reads.
149
-
150
- 3. **Before calling a material work product done, name what you are blind to.** CLAUDE.md routes the
151
- everyday "commit and merge this" moment to `agent-composer` **§Author-Exposure Table** — a review
152
- pass keyed on *what the author cannot self-detect* (cold entry → `beginner` · everyday friction →
153
- `main-player` · outside currency → `expert` · optimistic self-verification → `challenger` +
154
- cross-family · rebuilding what exists → `fact-checker` · ungrounded numbers → `phantom-quench`),
155
- with a materiality gate and an `Exposure-unclear → challenger` default so "no row applies" is not
156
- an exit. **This row exists because the triggering utterance names no agent** — nothing will fire it
157
- for you. Your runtime *can* run these lenses: substitute `Agent(subagent_type=...)` per §M2 above
158
- (`fh-run`, or `codex exec` reading the agent spec). The lens returns evidence, never the verdict.
159
-
160
- 4. **General work is in scope here, and the mechanism for serving it is to marshal installed
161
- capability.** CLAUDE.md §Intent Marshaling makes this the runtime default. It settles a *category*
162
- question only — whether non-harness work belongs in this environment at all. Every ordinary check
163
- about a specific request (is it safe, sensible, well-formed, worth doing) is yours and is unaffected.
164
-
165
- The category answer is yes, for a concrete reason: the skill registry, the mapped field harnesses,
166
- and the memory store exist **only** in this environment. So when the operator states a work intent in
167
- plain language (write this doc, build this wiki page, organize this material — **any work-shaped ask,
168
- not only harness building**), the scan below is what tells you whether capability for it is actually
169
- present. An empty scan, reported with the scan cited, is a correct answer — see the third bullet.
170
-
171
- Three constraints carry over unchanged to your runtime:
172
- - **Enumerate rather than recall.** List the available skills, `LOCAL_SKILL_REGISTRY`, and the mapped
173
- project assets. Recall under-reports what is installed, which is why the scan is a listing step.
174
- - **Marshaling never upgrades a trust tier.** Run-first autonomy covers **FH-native capability whose
175
- steps are per-action reversible**. A non-FH sibling capability stays at its registry `ask-tier`
176
- (propose only), and an outward-mutating action (send · post · deploy · delete) keeps its own gate.
177
- - **A capability gap is declared by citing the scan result**, not as a bare "nothing fits" — then
178
- route at request scale (internal scan → external search → in-session synthesis). *Persist* routes
179
- to the New-Skill gate; *install* routes to plugin-recommender's HITL. No new gates.
180
-
181
- **This item exists because the triggering utterance is ordinary work language that names no skill and
182
- no agent** — like item 3, no automatic trigger covers it; read it explicitly.
183
-
184
- > **Detail**: See `knowledge/shared/harness-core/intent_marshaling_general_work.md` — the 5-step loop,
185
- > the gate-routing table, the Sonnet-floor boundaries, and the origin defect — **open it directly**
186
- > before applying the ladder or when a gap appears.
187
-
188
- 5. **A scan, checker, or metric in this repo is not evidence until it has been shown to work on the
189
- target you are pointing it at.** This one is easy to skip because the tooling looks finished, so it
190
- is worth two cheap steps before you rely on a number it produces:
191
-
192
- - **Run it against one case you already know the answer to, and one you know is clean.** A tool that
193
- cannot separate those two has not been shown to measure anything, so its output cannot ground a
194
- claim about the target — it may still be right, you just have no way to tell. This
195
- repo has produced that exact result more than once — an ASCII-token scanner run over a Korean
196
- corpus scored ~96% false positives, and a shell-shape scanner reported a fail-open script as
197
- "clean" because every one of its probes was written for Python syntax.
198
- - **Open one hit by hand before you state a count anywhere** — including in chat, not only in a file.
199
- An unverified figure is anchored the moment it is said, and then has to be corrected everywhere it
200
- travelled.
201
-
202
- Two conventions that follow from this, and that the rest of the repo assumes you are using:
203
- *an empty result is not a zero* — a scan that found no target files, or died mid-run, reports
204
- `UNMEASURED`, never `0` — and *an extreme result (everything passed, everything failed) is a reason
205
- to suspect the instrument before the target.*
206
-
207
- Nothing enforces this mechanically; the trigger is your own intent to trust an output, which no hook
208
- can see. Detail, including the known-pair procedure and the failure catalogue:
209
- `knowledge/shared/harness-core/measurement-integrity-checklist.md` — **open it directly** before
210
- running a scan whose count you will report.
211
-
212
- The irreversible-surface gates (Pre-Publish · Destructive-Op) likewise live in CLAUDE.md and fire on
213
- **intent**, not on a file — read them before any publish, delete, or history-rewrite. `pre-push` enforces
214
- the git-side destructive surface mechanically for every runtime.
215
-
216
- ### Entry point for Codex users
217
-
218
- AGENTS.md is your starting point. Navigate from here to skill workflows:
219
-
220
- ```bash
221
- # Read a skill's full workflow
222
- cat plugins/fh-meta/skills/steel-quench/SKILL.md
223
-
224
- # Apply via codex exec (validated pattern — codex-cli ≥ 0.135.0)
225
- cat plugins/fh-meta/skills/steel-quench/SKILL.md path/to/artifact.md \
226
- | codex exec -m gpt-5.5 -
227
-
228
- # Or use FH's runtime adapter (preferred for Codex-primary workflows)
229
- FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run \
230
- --skill steel-quench \
231
- --file path/to/artifact.md
232
-
233
- # Agent substitution for Claude Code Agent(...) calls
234
- FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run \
235
- --agent fh-commons:quench-challenger \
236
- --file path/to/artifact.md
237
-
238
- # Or pipe explicitly
239
- echo "Apply the following skill to the artifact below." | \
240
- cat - plugins/fh-meta/skills/{skill}/SKILL.md target.md \
241
- | codex exec -m gpt-5.5 -
242
- ```
243
-
244
- `codex exec -m gpt-5.5 -` reads from stdin in headless mode. `npx @openai/codex` (interactive) is not suitable — it requires TTY.
245
-
246
- ### Skill compatibility tiers
247
-
248
- | Tier | Definition | Examples |
249
- |---|---|---|
250
- | **M1 — Full** | All phases run without CC-native dependencies — no Stop hook, no `.claude/agents/` dispatch, no `/model` | `token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop` |
251
- | **M2 — Partial** | Core workflow runs; CC-native phases require manual adaptation or skip | `deliberation` (Mediator/Jury Agent steps = manual), `steel-quench` (Wave 1–3 ✅; quench-challenger agent = manual), `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop` (git scan phase ✅; PR auto-proposal = manual) |
252
- | **M3 — CC-only** | Requires CC Stop hook or session-scoped agent dispatch; methodology reference only | `goal-quench` (Phase 3 Stop hook), `hub-cc-pr-reviewer` (CC session context), `install-wizard` (settings.json write) |
253
-
254
- **M2 adaptation pattern**: when a step references `Agent(subagent_type=...)` or a slash command, substitute with `fh-run` (preferred) or a direct `codex exec` call reading the sub-agent's SKILL.md — same workflow, different runtime.
255
-
256
- **Goal handling under Codex**: use Codex's native goal/session feature when available. FH's portable role is the quality gate after the goal completes: `FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate ...`. `fh-goal` exists only for non-interactive one-shot runs that should be followed automatically by `fh-gate`; it is not a replacement for Codex-native goal control.
257
-
258
- ### Beta removal conditions
259
-
260
- | Condition | Status |
38
+ | Agent | Allowed tools |
261
39
  |---|---|
262
- | Known limitation list published (`docs/codex-compat.md`) | done (2026-06-04) |
263
- | 5+ externally validated M1 skill runs (not FH author) | pending needs external users |
264
- | At least 1 external Codex user confirms methodology reproduces | pending needs external users |
265
- | README badge updated (`Codex-compatible` without `beta`) | blocked on above |
266
-
267
- **Author M1 validation (2026-06-04, internal — does not satisfy the external conditions above):** `phantom-quench` (4/4 on a phantom-seeded fixture) and `asset-placement-gate` (correct Drop routing on a duplicate-skill proposal) ran end-to-end via `codex exec -m gpt-5.5 -` with no CC-native dependency, confirming the M1 tier assignments. Limitations observed (CC-native hook noise, no token accounting, etc.) are documented in `docs/codex-compat.md`.
40
+ | `challenger` | Read, Grep, Glob, WebSearch, WebFetch |
41
+ | `fact-checker` | Read, Grep, Glob |
42
+ | `hub-persona-auditor` | Read, Grep, Glob |
43
+ | `quench-challenger` | Read, Grep, Glob |
44
+ | `persona-innovator` | Read, Grep, Glob, WebSearch, WebFetch |
45
+
46
+ ## Runtime Boundaries
47
+
48
+ - **Two layers:** `tracks/`, `knowledge/`, and skill methodology are model-agnostic. Plugin agents,
49
+ hooks, slash commands, and `.claude/rules/` automation are Claude-native.
50
+ - **Output residency:** reusable methodology and polished public guidance belong in `knowledge/`,
51
+ `plugins/`, or `docs/`. Raw signals, operator observations, handoffs, audit logs, and private
52
+ reasoning are private-first; do not infer that colocated directories share a repository.
53
+ - **Runtime authority:** a non-Claude sidecar returns evidence candidates, never the terminal verdict.
54
+ The governor must source-close each finding against a local file hit, literal source span, or
55
+ passing check. Governor agreement alone is not an anchor.
56
+ - **Sidecar completion:** judge a sidecar only by the typed verdict from `scripts/sidecar_wait.sh`.
57
+ Never infer completion or emptiness by looking at its output file.
58
+
59
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Architecture-and-output-routing`
60
+ > — layer ownership and destination routing — read before routing work across a public/private workspace pair.
61
+
62
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Sidecar-routing-and-waiting`
63
+ > — capability routing, the required wait command, and typed verdict meanings — read before dispatching a sidecar.
64
+
65
+ ## Mandatory Non-Claude Checklist
66
+
67
+ Because non-Claude runtimes do not auto-load Claude path rules, apply these rules explicitly:
68
+
69
+ 1. **FH asset change:** before editing, read `.claude/rules/fh_4axis_gate.md`; before the first commit,
70
+ run its required axes. Treat `templates/regression_guard.sh` exit 0 as PASS or SKIP; use its typed
71
+ result channel and never report SKIP as checked.
72
+ 2. **Company residency:** raw company source, secrets, hostnames, internal names, stack traces, and
73
+ unredacted findings never leave the local machine, including to same-family cloud models. Only a
74
+ sanitized summary may leave; exceptions require explicit operator approval and a gitignored note.
75
+ 3. **Author exposure:** before calling a material work product done, identify the author's blind spot
76
+ and run the matching `agent-composer` Author-Exposure lens. The lens supplies evidence, not a verdict;
77
+ unclear exposure defaults to `challenger`.
78
+ 4. **Intent marshaling:** general work is in scope. Enumerate installed skills, `LOCAL_SKILL_REGISTRY`,
79
+ and mapped project assets before composing capability. Preserve each trust tier and each outward
80
+ action gate. Declare a gap only with the scan cited, then route through internal registry search,
81
+ external search, and in-session synthesis. Persist and install retain their existing gates.
82
+ 5. **Measurement integrity:** before trusting a scan or count, run a known-positive and known-clean
83
+ pair, then open one hit manually. An empty or failed scan is `UNMEASURED`, not zero; extreme results
84
+ require instrument suspicion.
85
+ 6. **Irreversible intent:** before publish, delete, or history rewrite, read and apply the
86
+ Pre-Publish or Destructive-Op gate in `CLAUDE.md`. `pre-push` is only the git-side backstop.
87
+
88
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Mandatory-checklist-procedures`
89
+ > — exact supporting procedures and canonical doctrine links — read when any checklist trigger fires.
90
+
91
+ ## Invocation
92
+
93
+ Non-Claude runtimes apply methodology manually. Prefer `FH_BACKEND=codex ... fh-run` for skills and
94
+ agents. When a workflow references `Agent(subagent_type=...)` or a slash command, replace that step
95
+ with `fh-run` or a direct `codex exec` call that reads the relevant spec. Use Codex native goal/session
96
+ control; FH supplies the quality gate after goal completion.
97
+
98
+ | Tier | Definition | Skills |
99
+ |---|---|---|
100
+ | **M1 — Full** | No Claude-native dependency | `token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop` |
101
+ | **M2 — Partial** | Core works; native agent or slash-command steps need adaptation | `deliberation`, `steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop` |
102
+ | **M3 — Claude-only** | Requires a Claude hook or session-scoped dispatch | `goal-quench`, `hub-cc-pr-reviewer`, `install-wizard` |
268
103
 
269
- Tracking: open an issue at `chrono-meta/forge-harness` with label `codex-validation` to report a validated run.
104
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Invocation-patterns`
105
+ > — single, parallel, and wave composition examples — read when choosing a dispatch shape.
270
106
 
271
- ---
107
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Codex-entry-points`
108
+ > — runnable `fh-run` and `codex exec` forms — read before invoking FH from Codex.
272
109
 
273
- ## Adding new agents
110
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Compatibility-tiers`
111
+ > — tier constraints and goal-handling limits — read before adapting an M2/M3 workflow.
274
112
 
275
- New agents must pass the **New Skill Creation Pre-Commit Gate** defined in `CLAUDE.md` before committing. Key requirements:
113
+ ## Conditional Procedures
276
114
 
277
- 1. Role duplication check via `/asset-placement-gate`
278
- 2. Plain descriptionno self-marketing language
279
- 3. At least 1 explicit `Done When` condition
280
- 4. At least 3 natural language trigger examples
281
- 5. Independently executable (or dependencies explicitly documented)
115
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Beta-removal`
116
+ > external-validation conditions and reporting route read when evaluating or changing beta status.
282
117
 
283
- After 2+ weeks of use: if `accepted ≥ 60%` of invocations → strengthen; if `rejected ≥ 40%` → redefine scope or deprecate. See `CLAUDE.md > Sub-agent Operations`.
118
+ > **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Adding-agents`
119
+ > — creation gate, registry synchronization, and post-use thresholds — read before adding an agent.
package/CLAUDE.md CHANGED
@@ -531,7 +531,7 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
531
531
  | **"진단해줘", "개선해줘", "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) |
532
532
  | **"새 프로젝트", "하네스 작성해줘", "이 프로젝트 가속화", "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) |
533
533
 
534
- **Guard**: Do not propose a skill that is already running. One signal = one-line proposal (no pressure). Before proposing, consult the UAP (§Operational Adaptation Loop): a skill the user has rejected 3+ times is **suppressed**, not re-proposed — and, symmetrically, a class **accepted 3× consecutively** earns a one-time "stop asking?" offer (§Consent promotion; never on irreversible surfaces).
534
+ **Guard**: Do not propose a skill that is already running. One signal = one-line proposal (no pressure). Before proposing, consult the UAP (§Operational Adaptation Loop): a skill the user has rejected 3+ times is **suppressed**, not re-proposed.
535
535
  For per-skill utterance patterns, see the relevant `SKILL.md §Trigger Phrases` section.
536
536
 
537
537
  ### Cadence Rules — Check at Session Start
@@ -564,8 +564,7 @@ Some proposals are not *time*-overdue — they fire **once when a specific work
564
564
  Self-healing is not only FH-self-dev (Mode D 4-axis) and reactive (`verify-bidirectional`). A **standing, per-user operational loop** tunes FH behavior to the individual during normal field use, and escalates **only generalizable** learnings to the `field-harvest` → FH-origin PR funnel — idiosyncratic taste stays local (drift guard).
565
565
 
566
566
  - **User Adaptation Profile (UAP)** — `tracks/_meta/user_adaptation_profile.md` (local/gitignored; **behavioral prefs only, never domain content**). Records skill-proposal outcomes (`accepted`/`rejected`/`sustained` — same vocabulary as `operations.md`), preferred tier/language/cadence, recurring friction, muted nags.
567
- - **Pass** — rides `field-harvest` Mode B at field-session close (no new trigger, one per session): READ to apply (suppress a 3×-rejected proposal, **offer standing consent on a 3×-accepted class**, default to preferred tier, mute declined cadence nags), WRITE to update outcomes.
568
- - **Consent promotion (accept-side)** — repeated approval must offer to stop asking, not bill the same prompt forever: 3 consecutive `accepted` on a **registered** class (`tracks/_meta/consent_classes.yaml` — classes are declared, never minted mid-run) → **offer once, quoting the three approvals and the exact scope** → granted = a **time-limited lease**, revocable, and every unprompted run announces itself. **Not symmetric with suppression**: a bad suppression costs a re-ask, a bad grant has side effects. **Floor, decided mechanically from the registry — never by the session's own judgment**: a class never promotes if its sinks are irreversible (publish · delete · history-rewrite), if it *feeds* such a sink (**taint propagates through reversible steps**), or if that is **unknown** — unknown is not reversible. No UAP / no registry entry / expired → keep asking (absent ≠ granted). **Named residual: the ledger is self-attested** — mitigated (append-only, quoted evidence), not closed.
567
+ - **Pass** — rides `field-harvest` Mode B at field-session close (no new trigger, one per session): READ to apply (suppress a 3×-rejected proposal, default to preferred tier, mute declined cadence nags), WRITE to update outcomes.
569
568
  - **Generalization gate** — idiosyncratic → UAP local; generalizable (any user benefits; `≥40%` reject = redefine candidate / `≥60%` accept = reinforce, per `operations.md` gate) → `field-harvest` Mode A → FH PR (HITL).
570
569
  - **Ephemeral guard** — UAP is gitignored, wiped on cloud reclaim; in ephemeral sessions operate from defaults, do not fabricate it.
571
570
 
@@ -700,10 +699,6 @@ Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
700
699
  outcomes. ⑤ is ATOMIC and owns BOTH writes: (a) append any close-time finding to
701
700
  `fh_completed_{date}.md` FIRST, (b) then write the card. Once ⑤ starts, `fh_completed`
702
701
  is CLOSED — a later append re-opens the violation ⑤ exists to prevent.
703
- **Late finding (named case)**: a finding that surfaces AFTER (b) — including while writing
704
- the final message to the operator — means ⑤ is **not done**. Re-run ⑤ **whole**: append,
705
- then **rewrite the card**. Appending alone is the violation; the card must never be older
706
- than `fh_completed`.
707
702
  → ⑥ Commit card + push
708
703
  ```
709
704
 
@@ -1,6 +1,9 @@
1
1
  # Codex Compatibility — Known Limitations & Validated Patterns
2
2
 
3
- > Status: **beta**. This document is beta-removal condition #2 (see `AGENTS.md` → Codex Compatibility → Beta removal conditions). It lists what works, what breaks, and what to expect when applying forge-harness (FH) methodology through OpenAI Codex (`codex exec`) instead of Claude Code.
3
+ > Status: **beta**. This document is a beta-removal condition (see
4
+ > `knowledge/shared/harness-core/agents_md_runtime_details.md §Beta-removal`). It lists what works,
5
+ > what breaks, and what to expect when applying forge-harness (FH) methodology through OpenAI Codex
6
+ > (`codex exec`) instead of Claude Code.
4
7
 
5
8
  FH is a 2-layer system: a **methodology layer** (`tracks/`, `knowledge/`, `SKILL.md` docs) that is model-agnostic, and an **automation layer** (Claude Code hooks, plugin-channel agents under `plugins/*/agents/`, field-project overrides under `.claude/agents/`, `/model`, settings.json) that is Claude-native. Codex users run the methodology layer by reading `SKILL.md` files directly; automation steps either run through runtime adapters (`fh-gate`, `fh-run`) or require manual substitution.
6
9