@chrono-meta/fh-gate 1.4.8 → 1.4.10

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/CHEATSHEET.md CHANGED
@@ -98,12 +98,19 @@ git config core.hooksPath templates/.git-hooks
98
98
  chmod +x templates/.git-hooks/pre-commit
99
99
  ```
100
100
 
101
- After running `/steel-quench` and `/phantom-quench` in your session, Claude creates the Axes 2+3 pass marker automatically. If it doesn't (e.g., session interrupted), create it manually:
101
+ After running `/steel-quench` and `/phantom-quench` in your session, Claude creates the Axes 2+3 pass marker automatically. The marker must carry machine-readable floor fields — the hook validates them (a bare `touch` marker no longer passes; below-floor passes block unless an explicit `below-floor-ack:` line records operator acceptance). If Claude doesn't create it (e.g., session interrupted), create it manually:
102
102
 
103
103
  ```bash
104
- touch "tracks/_meta/.axes_23_passed_$(git rev-parse --abbrev-ref HEAD | tr '/' '_')_$(date +%Y-%m-%d).marker"
104
+ cat > "tracks/_meta/.axes_23_passed_$(git rev-parse --abbrev-ref HEAD | tr '/' '_')_$(date +%Y-%m-%d).marker" <<'EOF'
105
+ axis2-engine: quench-challenger
106
+ axis2-model: opus
107
+ floor-status: at-floor
108
+ <scope / findings prose>
109
+ EOF
105
110
  ```
106
111
 
112
+ > **Migration note**: markers created before the floor-field upgrade are 0-byte legacy files — past-date ones are inert (the hook only reads today's marker), but a legacy marker for *today* must be regenerated in the structured format above before the first post-upgrade commit.
113
+
107
114
  ---
108
115
 
109
116
  ## 7. Weekly improvement cycle
package/CLAUDE.md CHANGED
@@ -139,6 +139,8 @@ No user request is needed — this is a mandatory autonomous step, not a proposa
139
139
  FH asset modified → Axis 1 (regression_guard.sh --pr {BRANCH})
140
140
  → Axis 2 (/steel-quench) → Axis 3 (/phantom-quench)
141
141
  → marker: tracks/_meta/.axes_23_passed_{branch}_{date}.marker
142
+ (structured — required fields: axis2-engine / axis2-model / floor-status;
143
+ hook validates mechanically: below-floor blocks without below-floor-ack)
142
144
  → Axis 4 (/edit-manifest RECORD, today's entry in edit_manifest.yaml)
143
145
  → All 4 PASS → git commit allowed | Any FAIL → fix inline, re-run
144
146
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chrono-meta/fh-gate",
3
- "version": "1.4.8",
3
+ "version": "1.4.10",
4
4
  "description": "FH runtime adapters — run FH governance, skills, and agents via Claude or Codex with machine-parseable gates.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -56,20 +56,21 @@ On **cadence-triggered** runs (7d), ask the operator one line before collecting:
56
56
  *video-harvest* capability via the Sidecar Engine Resolution Protocol
57
57
  (`multi_model_sidecar_strategy.md`) — probe by **capability, not engine name**. A CLI that is a
58
58
  valid sidecar for other tasks is not automatically a video-harvest engine.
59
- **Tier 1 — a natively multimodal CLI that ingests the URL directly** (verified 2026-06-10,
60
- laptop, video `oZUeRib1Xec`): the current verified invocation is `gemini --skip-trust -p "{URL}"`
61
- → grounded timestamped summary ✅. ⚠️ **the direct `gemini` CLI is being sunset (vendor EOL
62
- 2026-06-18)** — after that date probe `agy` (the Antigravity router-shell successor, same class)
63
- or the Gemini API; see `multi_model_sidecar_strategy.md §Binary names churn`. A coding-agent CLI
64
- with no native video/transcript access (`codex`) **cannot** — it spent ~67K tokens, recovered
65
- only the title, then asked for a pasted transcript ❌; do not route video to it. Agentic
59
+ **Tier 1 — a natively multimodal CLI that ingests the URL directly**: probe for one, then route
60
+ to it (pre-EOL example invocation: `gemini --skip-trust -p "{URL}"` → timestamped summary). ⚠️
61
+ **the direct `gemini` CLI is being sunset (vendor EOL 2026-06-18)** — after that probe `agy` (the
62
+ Antigravity router-shell successor, same class) or the Gemini API; see
63
+ `multi_model_sidecar_strategy.md §Binary names churn`. A coding-agent CLI with **no native
64
+ video/transcript access** (e.g. `codex`) cannot do this — it burns tokens, recovers only
65
+ metadata (title), then asks for a pasted transcript; do not route video to it. Agentic
66
66
  router-shells (`agy`) get approval-mode first.
67
- **Tier 3 conditional fallback (not guaranteed)**: Claude harvests the transcript via
68
- `yt-dlp --write-auto-subs --skip-download` and summarizes — fine for talk-style content, but
69
- needs `ffmpeg` + a `curl_cffi` impersonation target; the timedtext endpoint may return HTTP 429,
70
- and that dep has no wheel on brew's Python 3.14 (blocked on this machine 2026-06-10).
71
- Unresolvable (cloud, no sidecar; or all tiers blocked) operator summary remains the path, as
72
- today.
67
+ **Tier 3** (Tier 2 = router-shell / Gemini API, see the protocol) **— conditional fallback (not
68
+ guaranteed)**: `yt-dlp --write-auto-subs --skip-download` then summarize the transcript — fine
69
+ for talk-style content. **Probe the environment first**:
70
+ `yt-dlp --version && python3 -c "import curl_cffi" && command -v ffmpeg` Tier 3 needs all three
71
+ (`yt-dlp`, `curl_cffi` impersonation target, `ffmpeg`), and the timedtext endpoint may return
72
+ HTTP 429; if the probe fails, fall through rather than assuming it works. Unresolvable (cloud, no sidecar; or all tiers blocked) →
73
+ operator summary remains the path, as today.
73
74
 
74
75
  ---
75
76
 
@@ -292,6 +293,7 @@ Present Step 4 menu options [1]–[5]. Do not skip to [5] silently — surface t
292
293
 
293
294
  ## Simplification Guards
294
295
 
296
+ - Video Tier-3 probe fails (any of `yt-dlp` / `curl_cffi` / `ffmpeg` missing, or timedtext returns 429) → fall through to operator summary; never assume `yt-dlp` works
295
297
  - If 3+ arxiv queries fail, proceed with HN only (do not abort)
296
298
  - On curl timeout, skip that item and continue with the rest
297
299
  - If synthesis result exceeds 400 characters, retain top 3 items and truncate the rest