@chrono-meta/fh-gate 1.4.66 → 1.4.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +7 -0
- package/CATALOG.md +6 -0
- package/knowledge/shared/harness-core/self_evolution_routine.md +10 -0
- package/package.json +1 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/skills/harness-doctor/SKILL.md +10 -47
- package/plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL.md +5 -0
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "1.4.
|
|
14
|
+
"version": "1.4.68",
|
|
15
15
|
"description": "Hub meta-operations toolkit — 34 skills + 7 agents. New in 1.4.53: `fh-codex-doctor` (npm bin) — Codex adapter drift scanner; reads the documented M1/M2/M3 skill tier map + skill/agent source and reports codex-native/adapter-required/claude-native/unclassified per unit, wired into `npm test`/`prepublishOnly` (fail-closed on unclassified Claude-native primitives). New in 1.4.49: steel-quench gains Step 0.6 Verdict-Invariance Probe (groundedness axis — a load-bearing judged gate's verdict must track behavior, not rubric phrasing; measured flip-count over cross-family paraphrases; arXiv:2605.06161 Policy Invariance anchor); multi_model_sidecar_strategy §Vendor-native harness (a model is strongest in its own vendor CLI — Claude/CC, GPT/codex, Gemini/Antigravity; a universal router degrades all of them, so it stays an autocomplete/QA sidecar, never orchestration); predelete_check.sh fail-closed rewrite; memory-hygiene A-TMA anchor. New in 1.4.48: phantom-quench + steel-quench gain external frontier anchors (arXiv:2607.02052 package-hallucination; arXiv:2607.02057 prompt-coverage-adequacy); README model-flat claim reframed from a per-release point-curve to structural invariants (operation flattens across tiers; depth tier-order fixed within a generation). New in 1.4.47: onboarding step ① surfaces the Mode D companion-store session-start load in the auto-read salience anchor (previously only in the local binding + rules, so a greeting could skip the load). New in 1.4.46: context-doctor command-output axis (route to rtk/proxy for verbose CLI stdout, complementing .claudeignore; risk-gated to token-scarce envs). New in 1.4.41: context-doctor 2026 trigger vocab (context engineering/rot/collapse) + phantom-citation hardening; hub measurement-integrity-checklist (cross-model measurement pre-flight: display-name pin/reps≥3/discriminating probe). New in 1.4.40: install-wizard queryable-wiki scaffold (INDEX + session-start read + R/W/C ingest). New in 1.4.39: auto-decorrelation (cross-family verifier sidecar recruitment) + video-ingest (capability-routed video ingestion). New in 1.4.x: verify-axis check-class taxonomy (mandatory-pass/measured/judged), no-reinvention Tier-0 inventory, 7-class failure taxonomy, Destructive-Op Gate, Wave-T (Temper), tier-floor governance, Mode D Model Notice, FC consent lane, default-Sonnet guidance. New in 1.3.0: public-surface-audit, field-harvest Mode B auto-trigger, 4-axis gate scope ext. Validated cross-CLI: Claude Code, Codex, Gemini.",
|
|
16
16
|
"source": "./plugins/fh-meta"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"name": "fh-commons",
|
|
20
|
-
"version": "1.4.
|
|
20
|
+
"version": "1.4.68",
|
|
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
|
@@ -115,6 +115,13 @@ So four things that govern behavior are not going to reach you on their own. Rea
|
|
|
115
115
|
`.claude/rules/fh_4axis_gate.md` — **open it directly**; nothing will load it for you. The commit is
|
|
116
116
|
hard-blocked by `templates/.git-hooks/pre-commit` regardless of runtime, so skipping the read does not
|
|
117
117
|
skip the gate — it just means you meet the block without knowing what it wants.
|
|
118
|
+
⚠️ If you run `templates/regression_guard.sh` (Axis 1) yourself, **`exit 0` means PASS *or* SKIP** —
|
|
119
|
+
SKIP being "no staged file matched the gate's pathspec", which is *not checked*, not *checked and
|
|
120
|
+
clean*. Prefer the typed file channel — set `REGRESSION_GUARD_RESULT_FILE=<path>` and read
|
|
121
|
+
`result=pass|review|block|skip|error` from that file (stdout's `REGRESSION_GUARD_RESULT=` line is
|
|
122
|
+
the no-env fallback). Judging by exit code
|
|
123
|
+
alone lets an unexamined change report as a pass (measured 2026-07-22: that is exactly what the
|
|
124
|
+
commit hook did until it was fixed).
|
|
118
125
|
2. **Company residency is absolute** (CLAUDE.md §Field-Harness Diagnostic): raw company source, secrets,
|
|
119
126
|
hostnames, internal repo/asset names, stack traces, and unredacted findings **never leave the local
|
|
120
127
|
machine** — not to an external *or same-family* cloud model, not through a browser/API tool, not into a
|
package/CATALOG.md
CHANGED
|
@@ -8,6 +8,12 @@ AI reads this file first when searching past work. Open individual files for det
|
|
|
8
8
|
|
|
9
9
|
<!-- Add entries in reverse date order (newest at top) -->
|
|
10
10
|
|
|
11
|
+
### 2026-07-22 (2) | forge-harness · qasp · pmh | #weekly-audit, #entrypoint-drift, #gate-fail-open, #union-silent-drop, #instrument-attribution, #npm-release
|
|
12
|
+
**File:** tracks/_audit/weekly_audit_2026-07-22.md · AGENTS.md §Non-Claude runtimes item 4 · templates/regression_guard.sh · (qasp) src/api/ensemble.py · (pmh) AGENTS.md §Orchestration Gates
|
|
13
|
+
Weekly audit (07-15~07-22) plus the three cross-repo fixes it surfaced. **Audit's largest finding was a card claim that was false**: the session card's red-flag "frontier-digest job not running — zero logs, zero output" did not survive a hand check (14/14 launchd fires, 12/14 outputs, that day's digest present at 09:03). The real defect is a 14.3% output-miss whose two instances both die on `Connection closed mid-response`, and whose 07-18 retry+watchdog fix engaged **neither mechanism** on its first failure day — recorded as unfixed, root cause not isolated. Card-vs-reality drift reached the N=3 recurrence threshold, so the prescription is a mechanical probe rather than another habit rule. **Entry-point drift** closed in both harnesses (FH PR #163, field meta-harness PR #25): a runtime-default governor rule had landed only in the Claude-native entry point, invisible to every other runtime. The target-tier blind sim rejected the first port — the *wording*, carried over verbatim, read as coercive to a cold third-party reader and was reproduced 3/3, once escalating to "I would flag this to the repo owner". Rewritten as a scope statement; converged 2/2. **Gate fail-open** (PR #165): Axis 1's pathspec omitted three asset classes the canonical rule declares covered, and the resulting not-checked state rendered as a green PASS; adversarial review then caught the fix's own over-blocking (a one-word prose edit produced a hard block) before it could train `--no-verify`. **Field harness UNION** shipped a silent-drop path: two divergent fence-unwrap implementations meant a response accepted by the single backend was discarded whole by the ensemble — in a component whose entire justification is not discarding findings. Published `@chrono-meta/fh-gate@1.4.66`.
|
|
14
|
+
- Decision: port constraints across entry points, never wording — the audience's trust relationship changes with the location. Reversible surfaces report SKIP distinctly from PASS rather than switching to a blocking exit code. Company-derived doc conflicts resolve toward the operator-approved integration branch, never toward a feature branch's older state.
|
|
15
|
+
- Open: the failed single-vs-UNION detection ratio stays UNCALIBRATED — a demonstrated drop path and the "anchor absorbs the gain" hypothesis produce the same number, and no counter existed to separate them; re-measure with the new instrumentation. Skip-vs-pass distinction is wired into the commit hook only; three prose-level consumers still judge by exit code. Card-drift probe and the retry/watchdog reproduction harness remain unbuilt.
|
|
16
|
+
|
|
11
17
|
### 2026-07-22 | forge-harness | #intent-marshaling, #doctrine, #purpose-organization, #leader-briefing, #conference, #pre-registration
|
|
12
18
|
**File:** knowledge/shared/harness-core/intent_marshaling_general_work.md · CLAUDE.md §Intent Marshaling · (companion store) leader/TF briefing pair · handoff §5-§7
|
|
13
19
|
Two operator insights forged into doctrine. **Intent Marshaling** (PR #161, mirrored to the field meta-harness as its PR #23): the runtime twin of intent-machinization — a work-shaped request in plain language triggers a mechanical capability scan (trust tiers carried in scan output), a one-line compose proposal, then run-first execution; gap declarable only by citing the scan; no new gates (install/persist/outward actions route to existing ones). Verified by Sonnet known-pair sim (2/2 separated) + codex cross-family R1 4/4-confirmed findings (2 HIGH: non-FH ask-tier auto-run hole, per-action reversibility fail-open) fixed to R2 CONVERGED. **Leader-judgment briefing pair** (companion store, operator-approved): QA-team edition (4 judgment axes, measured/pending boundary, act-by-act glossary from operator definitions) + org-TF edition (domain-agnostic layers as protagonist, field harness as the n=1 evidence case, method-stack 8/8 as the domain-agnostic quantitative anchor) — both persona-audited (SHIP_AFTER_M, all findings applied; the audits caught the docs' own optimism twice, which became a self-evidencing section). Conference talk submitted (title A) with **metric pre-registration** pinned in the handoff (calibration / field / org metric sets + before-baseline warning + freeze-timeline insurance).
|
|
@@ -106,6 +106,16 @@ If `steel-quench`/`phantom-quench` are unavailable in the routine session, note
|
|
|
106
106
|
`Axis N: skipped (skill unavailable)` — Axis 1 PASS alone unblocks a *draft* PR (Axes 2–3 are the
|
|
107
107
|
operator's residual at merge review).
|
|
108
108
|
|
|
109
|
+
> ⚠️ **"Axis 1 PASS" 는 종료코드로 판정하지 마라.** `regression_guard.sh` 의 `exit 0` 은
|
|
110
|
+
> **PASS 와 SKIP 을 둘 다** 뜻한다 — SKIP 은 "게이트 pathspec 에 걸린 파일이 없었다"이지
|
|
111
|
+
> "검사했고 괜찮다"가 아니다. 무인 루틴이 종료코드만 보면 **미검사가 draft PR 을 unblock 한다.**
|
|
112
|
+
> 구분: `REGRESSION_GUARD_RESULT_FILE=<path>` 를 설정하고 그 파일의 `result=` 를 읽어라 —
|
|
113
|
+
> typed 채널이 정본이고 stdout `REGRESSION_GUARD_RESULT=` 줄은 env 를 못 쓸 때 폴백이다.
|
|
114
|
+
> `result=skip` 이면 SKIP — 그 경우 Axis 1 은
|
|
115
|
+
> *통과가 아니라 미실행*이므로 Axes 2–3 과 같은 운영자 잔여로 올려라.
|
|
116
|
+
> (2026-07-22 실측: `pre-commit` 이 정확히 이 혼동을 일으켜 AGENTS.md 변경이 `✅ PASS` 를
|
|
117
|
+
> 받고 지나갔다. `pre-commit` 은 배선 완료 · 이 루틴을 포함한 나머지 소비자는 **미배선 잔여**.)
|
|
118
|
+
|
|
109
119
|
**Skip-visibility at the handoff (load-bearing for honest HITL escalation).** When Axis 2
|
|
110
120
|
(challenger / steel-quench) is skipped, the adversarial check did not run autonomously — it becomes
|
|
111
121
|
the *merger's* responsibility. An intelligent hand-off must make that visible at the hand-off point,
|
package/package.json
CHANGED
|
@@ -115,7 +115,6 @@ size instrument* is read. The footprint rows below apply to **both** scopes and
|
|
|
115
115
|
| **Pointer-illusion**: a CLAUDE.md "detail/detailed procedure" pointer whose target is itself an always-loaded `.claude/rules/*.md` | S-tier — the split saves zero context (rules/ auto-loads regardless); move the target out of auto-load, keep the pointer |
|
|
116
116
|
| weekly_audit 14~30 days elapsed | S-tier |
|
|
117
117
|
| weekly_audit 30+ days elapsed | M-tier |
|
|
118
|
-
| `tracks/_meta/*.md` **reference assets** (excluding dated chronological records — `fh_completed_*` · `fh_signal_*` · `frontier_digest_*` · `session_*` · `weekly_audit_*` · `*_log_*`, whose date lives in the filename by design) missing **both** a role/type tag and a version/date stamp | R-tier — taxonomy gap, not urgent. ⚠️ **Measured FP rate before you act on this**: run against FH itself 2026-07-21 it flagged **99/161 (61%)** un-narrowed and **19/26 (73%)** after narrowing — a row that flags most of a directory is noise, not signal. ⚠️ **No consumer**: grep found **no skill that reads `role`/`type` from these files**. Until one exists this is taxonomy for taxonomy's sake — treat as an inventory observation, never escalate |
|
|
119
118
|
|
|
120
119
|
**Per-unit ≠ aggregate — do not slide between them.** "Every section earns its scope" (the per-unit
|
|
121
120
|
doctrine test) and "the always-loaded total is affordable" (the budget test) are **different questions, and
|
|
@@ -230,51 +229,11 @@ FAIL, the safe direction); and the scope test reads directory *existence*, so th
|
|
|
230
229
|
field→meta (acceptable: the operator names the target, and the footprint rows apply to **both** scopes
|
|
231
230
|
regardless — but it does skip the field-only line rows).
|
|
232
231
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
function as durable references (e.g. `reference_next_session_starter.md`); it is not a mandate that every file
|
|
239
|
-
in the directory carry a tag.
|
|
240
|
-
|
|
241
|
-
Scan for two markers per file — a role/type tag (`role:` or `type:` in frontmatter, or a leading `# Role:`
|
|
242
|
-
line) and a version/date stamp (a `YYYY-MM-DD` date or a `version:` frontmatter key, either in the first 10
|
|
243
|
-
lines). A file missing either marker is untagged — report the file list and count; do not escalate past R
|
|
244
|
-
without a human judging whether the specific file's staleness is actually a problem.
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
# find | while, not a glob — same reason as the always-loaded footprint scan above: an unmatched
|
|
248
|
-
# glob aborts under zsh, and a silent zero-match run must still report, not disappear.
|
|
249
|
-
TARGET="${1:?pass the target root explicitly — cwd is not the target}"
|
|
250
|
-
total=0; untagged=0
|
|
251
|
-
while IFS= read -r f; do
|
|
252
|
-
[ -n "$f" ] || continue
|
|
253
|
-
total=$((total + 1))
|
|
254
|
-
# 연대기 기록물은 파일명에 날짜가 있는 것이 설계다 — taxonomy 대상이 아니다(FP 원인의 78/99)
|
|
255
|
-
case "$(basename "$f")" in fh_completed_*|fh_signal_*|frontier_digest_*|session_*|weekly_audit_*|*_log_*) continue ;; esac
|
|
256
|
-
grep -qE '^(role|type):|^# ?Role:' "$f" && tag=yes || tag=no
|
|
257
|
-
head -10 "$f" | grep -qE '[0-9]{4}-[0-9]{2}-[0-9]{2}|^version:' && stamp=yes || stamp=no
|
|
258
|
-
if [ "$tag" = no ] || [ "$stamp" = no ]; then
|
|
259
|
-
untagged=$((untagged + 1))
|
|
260
|
-
echo "UNTAGGED: $f (role-tag=$tag version-stamp=$stamp)"
|
|
261
|
-
fi
|
|
262
|
-
done < <(find "$TARGET/tracks/_meta" -maxdepth 1 -name '*.md' 2>/dev/null)
|
|
263
|
-
echo "context-file-taxonomy: $untagged untagged of $total files"
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
**Named residuals of this scan**: `head -10` can miss a stamp in unusually long frontmatter; `^type:` is not
|
|
267
|
-
fence-scoped, so a stray body line starting `type:` outside frontmatter false-positives `tag=yes` — both push
|
|
268
|
-
toward under-reporting, not over-reporting.
|
|
269
|
-
|
|
270
|
-
Origin (2026-07-20, frontier-auto): surfaced via [Frontier Digest 2026-07-14](https://github.com/chrono-meta/forge-harness/issues/102#issuecomment-4964058520),
|
|
271
|
-
which described a durable-context-file pattern (role-tagged, versioned files shared across 50+ specialized
|
|
272
|
-
agents) citing `aimultiple.com/llm-orchestration` as its source. A `/phantom-quench` pass on 2026-07-20 found
|
|
273
|
-
that page's retrievable content does not actually discuss this pattern — the digest's citation is mis-attributed
|
|
274
|
-
and no verified primary source has been located. The qualitative taxonomy idea (role/version tagging on context
|
|
275
|
-
files) is adopted here on the digest's description alone and is `SPECULATIVE` per H1/H1-b until a verified
|
|
276
|
-
primary source is found; the "40% fewer tool calls" figure the digest also reported is not cited anywhere in
|
|
277
|
-
this check for the same reason.
|
|
232
|
+
<!-- Context-File Taxonomy check removed 2026-07-22/23 (#153 → weekly-audit #6 decision): consumer
|
|
233
|
+
re-measure = 0 skills read role:/type: from these files; measured FP 99/161 (61%) un-narrowed,
|
|
234
|
+
19/26 (73%) after narrowing; origin citation was mis-attributed (SPECULATIVE, no primary source).
|
|
235
|
+
Decorative unit per doctrine — FP figures preserved in the removal commit message as the
|
|
236
|
+
regression anchor. Re-adding requires a named consumer first. -->
|
|
278
237
|
|
|
279
238
|
### Step 3-L. Language Lint (`--lint` mode only)
|
|
280
239
|
|
|
@@ -466,9 +425,13 @@ Verifies that prescription application didn't strip operational content. Run aft
|
|
|
466
425
|
| F6 Line reduction ≥30% | S |
|
|
467
426
|
| F7 Bash block syntax (bash -n parse) | M if net increase in bad blocks |
|
|
468
427
|
|
|
469
|
-
Verdict: ✅ PASS (0M 0S) · ⚠️ REVIEW (0M 1+S) · ❌ BLOCK (1+M).
|
|
428
|
+
Verdict: ✅ PASS (0M 0S) · ⚠️ REVIEW (0M 1+S) · ❌ BLOCK (1+M) · ⏭️ SKIP (검사 대상 0 — **PASS 가 아니다**).
|
|
470
429
|
|
|
471
430
|
Implementation: `bash templates/regression_guard.sh` (compare vs main) or `bash templates/regression_guard.sh BASE HEAD`.
|
|
431
|
+
**Verdict 는 종료코드가 아니라 typed 채널로 읽어라** — `exit 0` 은 pass 와 skip 둘 다다(2026-07-23):
|
|
432
|
+
`REGRESSION_GUARD_RESULT_FILE=/tmp/rg.$$ bash templates/regression_guard.sh …` 후 파일의
|
|
433
|
+
`result=pass|review|block|skip` 를 판정에 쓴다. `skip` = 미검사 — PASS 로 보고하지 말고 "Axis 1
|
|
434
|
+
해당 없음(대상 파일 0)" 으로 보고한다.
|
|
472
435
|
|
|
473
436
|
> **Detail**: See `SKILL_detail.md §Step-1-3` — bash scripts for Steps 1~6 (L1~L4 diagnostics) — read when running the diagnostic commands.
|
|
474
437
|
|
|
@@ -120,6 +120,11 @@ All 5 Steps completed
|
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
**→ Mandatory when PR contains SKILL.md / rules / templates changes: `bash templates/regression_guard.sh`** — run Axis 1 (backward check) before merge recommendation is issued. If regression_guard exits with M-tier block, merge recommendation must change to ❌ regardless of other checks.
|
|
123
|
+
**Read the verdict from the typed channel, not the exit code** — `exit 0` means pass **or** skip
|
|
124
|
+
(not-checked). Run with `REGRESSION_GUARD_RESULT_FILE=/tmp/rg.$$` and read `result=` from that file:
|
|
125
|
+
`skip` means Axis 1 **did not examine** this PR (no matching file) — record it as "Axis 1 N/A", never
|
|
126
|
+
as a green check. A merge recommendation that cites an unexamined Axis 1 as PASS is the 2026-07-22
|
|
127
|
+
fail-open class.
|
|
123
128
|
|
|
124
129
|
## References
|
|
125
130
|
|