@chrono-meta/fh-gate 1.4.53 → 1.4.55

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 (32) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CATALOG.md +4 -4
  3. package/CLAUDE.md +47 -11
  4. package/README.ja.md +443 -0
  5. package/README.ko.md +442 -0
  6. package/README.md +58 -4
  7. package/README.zh.md +425 -0
  8. package/knowledge/shared/dialogue/ai_dialogue_playbook.md +1 -1
  9. package/knowledge/shared/dialogue/claude_code_runtime_flow.md +1 -1
  10. package/knowledge/shared/dialogue/memory_intent_recall.md +1 -1
  11. package/knowledge/shared/harness-core/crucible_mode.md +1 -1
  12. package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +1 -1
  13. package/knowledge/shared/harness-core/harness_6axis_framework.md +1 -1
  14. package/knowledge/shared/harness-core/harness_design_decision_lens.md +1 -1
  15. package/knowledge/shared/harness-core/harness_incubator_doctrine.md +139 -0
  16. package/knowledge/shared/harness-core/hub_compounding_loop.md +2 -2
  17. package/knowledge/shared/harness-core/hybrid_orchestration_architecture_roadmap.md +3 -3
  18. package/knowledge/shared/rules/auto_project_mapping.md +134 -0
  19. package/knowledge/shared/rules/modes_and_value.md +162 -0
  20. package/knowledge/shared/rules/operational_adaptation.md +73 -0
  21. package/knowledge/shared/rules/operations.md +48 -0
  22. package/knowledge/shared/rules/sister_asset_protocol.md +54 -0
  23. package/knowledge/shared/rules/sync_push_protocols.md +139 -0
  24. package/package.json +6 -2
  25. package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
  26. package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
  27. package/plugins/fh-meta/skills/contention-layer/SKILL.md +1 -1
  28. package/plugins/fh-meta/skills/field-harvest/SKILL.md +1 -1
  29. package/plugins/fh-meta/skills/field-harvest/SKILL_detail.md +1 -1
  30. package/plugins/fh-meta/skills/harness-doctor/SKILL.md +12 -0
  31. package/plugins/fh-meta/skills/harvest-loop/SKILL.md +2 -2
  32. package/plugins/fh-meta/skills/video-ingest/SKILL.md +1 -1
@@ -0,0 +1,139 @@
1
+ ---
2
+ description: Defines the Session Sync procedure for persisting session work to the hub, the Knowledge Push protocol for feeding new knowledge back, CATALOG.md format, track mapping table, and tag conventions.
3
+ ---
4
+
5
+ # Session Sync / Knowledge Push Protocols
6
+
7
+ ## Session Sync Protocol
8
+
9
+ Procedure for persistently storing sessions worked on in other projects into the hub.
10
+ Follow this protocol when the user requests "sync", "save session", or similar.
11
+
12
+ ### Sync target judgment
13
+
14
+ | Sync YES | Sync NO |
15
+ |---|---|
16
+ | New pattern/rule discovered | Simple code change (1-line bug fix) |
17
+ | Architecture decision | Routine test execution |
18
+ | Lessons/feedback (learned from failures) | Repeating already-recorded content |
19
+ | Roadmap/strategy change | Sessions with only exploration and no conclusion |
20
+
21
+ **What-kind axis (Raw / Wiki / Conversation)** — orthogonal to the YES/NO above and to the
22
+ location split (knowledge/ · tracks/ · memory/), this classifies the *processing stage*, which
23
+ routes the destination: **Raw** = unprocessed capture (a pasted log, a fetched source) → stays in
24
+ tracks/ or a companion store, not yet distilled · **Wiki** = distilled + `[[linked]]` knowledge →
25
+ knowledge/ or memory/ (the compounding layer) · **Conversation** = dialogue/decision logs → tracks/
26
+ session files. A Raw item is not yet a Wiki item; the distill step (Raw → Wiki) is where linking +
27
+ the contradiction scan below earn their keep. (Imported from the 김효율 AX-Obsidian cross-audit,
28
+ `tracks/_audit/session_2026_06_21_kim-hyoyul-ax-obsidian-wiki-harness.md` §4 — a crisper ingest
29
+ schema than the location split alone.)
30
+
31
+ ### Sync procedure
32
+
33
+ ```
34
+ 1. Create/move session file
35
+ → tracks/{project}/session_YYYY_MM_DD_{slug}.md
36
+ → YAML frontmatter required: name, description, type, date, tags
37
+
38
+ 2. If learnings/feedback exist, create separate file
39
+ → tracks/{project}/learnings/feedback_{slug}.md
40
+
41
+ 3. Contradiction scan — ingest gate (class: judged, pair: verify-bidirectional)
42
+ → Before indexing, grep CATALOG.md + knowledge/ for claims the new content contradicts
43
+ (same topic with opposite conclusion · superseded version/number · changed definition)
44
+ → Contradiction found: flag it in BOTH the new file and its CATALOG entry
45
+ ("conflicts with / supersedes: {file}") — contradictions never coexist silently
46
+ → Removing or rewriting the OLD claim requires operator approval (HITL)
47
+ → Clean scan: proceed without notes
48
+
49
+ 4. Add entry to CATALOG.md
50
+ → Maintain reverse date order (newest at top)
51
+ → Include tags, 3-line summary, key decisions
52
+
53
+ 5. git commit
54
+ → "sync: {project} {date} session — {one-line summary}"
55
+ ```
56
+
57
+ ### Track mapping
58
+
59
+ Update the track mapping table in CLAUDE.md each time a project is added.
60
+
61
+ | Project | Track directory |
62
+ |---|---|
63
+ | (example) project-a | tracks/project_a/ |
64
+ | Patterns common to 2+ projects | knowledge/shared/ |
65
+ | Hub meta work (weekly_audit, etc.) | tracks/_{topic}/ — underscore prefix |
66
+
67
+ **Underscore prefix convention**: `tracks/_audit/` · `tracks/_mcp/` etc. are for hub operations/meta work only. Consider promoting to parent directory when meta tracks accumulate to 3+.
68
+
69
+ **Two-layer storage principle**: `tracks/` = detailed work history (local, machine-dependent). For critical cross-session state — pending codes, DOIs, active action items — also write to `~/.claude/projects/.../memory/` (durable, survives re-clone or machine change).
70
+
71
+ ---
72
+
73
+ ## Knowledge Push Protocol
74
+
75
+ Protocol for feeding new knowledge discovered in projects back to the hub.
76
+
77
+ ### Learnings/feedback (short patterns)
78
+
79
+ ```yaml
80
+ ---
81
+ name: {identifiable name}
82
+ description: {one-line summary}
83
+ type: feedback
84
+ date: YYYY-MM-DD
85
+ tags: [{related}, {tag}]
86
+ originProject: {project name}
87
+ ---
88
+
89
+ {content — Why/How to apply structure recommended}
90
+ ```
91
+
92
+ Storage path: `tracks/{project}/learnings/feedback_{slug}.md`
93
+
94
+ ### Session records (work history)
95
+
96
+ ```yaml
97
+ ---
98
+ name: {session title (include date)}
99
+ description: {one-line main achievement}
100
+ type: project
101
+ date: YYYY-MM-DD
102
+ tags: [{related}, {tag}]
103
+ ---
104
+ ```
105
+
106
+ Storage path: `tracks/{project}/session_YYYY_MM_DD_{slug}.md`
107
+
108
+ ### Cross-project patterns
109
+
110
+ Patterns applicable to 2+ projects are written in `knowledge/shared/`.
111
+
112
+ **Ingest gate applies here too**: before adding a `knowledge/shared/` doc, run the
113
+ contradiction scan (Sync procedure step 3) against existing knowledge/ claims.
114
+
115
+ ---
116
+
117
+ ## CATALOG.md Format
118
+
119
+ Follow the format below when adding entries:
120
+
121
+ ```markdown
122
+ ### YYYY-MM-DD | {project} | {tag1}, {tag2}, {tag3}
123
+ **File:** tracks/{project}/filename.md
124
+ {Summary within 3 lines. What was done and why it matters.}
125
+ - Decision: {key decision — architecture choice, direction confirmed, etc.}
126
+ - Open: {unresolved issues — only if applicable}
127
+ ```
128
+
129
+ ---
130
+
131
+ ## Tag Conventions
132
+
133
+ Add freely, but prefer reusing existing tags.
134
+
135
+ **Operations trigger tags** (aggregated by weekly audit scanner):
136
+ - `#gap-trigger:axis-N` — per-axis asset gap (auto-assigned when 0 entries continue 2+ months)
137
+ - `#skill-candidate:XXX` — Skill promotion candidate for patterns repeated 3+ times
138
+ - `#rule-candidate:XXX` — Rule promotion candidate for mistakes repeated 3+ times
139
+ - `#archive-candidate` — Self-reported deprecation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chrono-meta/fh-gate",
3
- "version": "1.4.53",
3
+ "version": "1.4.55",
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": [
@@ -72,6 +72,10 @@
72
72
  "plugins/fh-commons/agents",
73
73
  "knowledge/shared/harness-core",
74
74
  "knowledge/shared/dialogue",
75
- "README.md"
75
+ "knowledge/shared/rules",
76
+ "README.md",
77
+ "README.ko.md",
78
+ "README.zh.md",
79
+ "README.ja.md"
76
80
  ]
77
81
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fh-commons",
3
- "version": "1.4.53",
3
+ "version": "1.4.55",
4
4
  "engines": {
5
5
  "claudeCode": ">=1.0.0"
6
6
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fh-meta",
3
- "version": "1.4.53",
3
+ "version": "1.4.55",
4
4
  "engines": {
5
5
  "claudeCode": ">=1.0.0"
6
6
  },
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: contention-layer
3
- description: When two skills, agents, or independent research tracks produce conflicting verdicts on the same output, reads the conflict as a signal rather than an error and harvests new skill candidates or insight deltas. Also accepts a Dual-Track Grounding conflict — an open-frontier research track vs an internally-grounded recall track disagreeing — as a research-layer partial analogue of Non-Model Ground (the grounded track is a time-decorrelated anchor, not a non-model one). Routes skills born from contention to fh-meta if they are meta-layer, to commons plugin if project-agnostic, or to field harvest if domain-specific. Triggered by "two skills conflict", "they produce different conclusions", "contention-layer", "contention harvest", "open vs grounded contradiction", "research tracks disagree".
3
+ description: When two skills, agents, or independent research tracks produce conflicting verdicts on the same output, reads the conflict as a signal rather than an error and harvests new skill candidates or insight deltas including a Dual-Track Grounding conflict (open-frontier track vs internally-grounded recall track disagreeing). Routes skills born from contention to fh-meta (meta-layer), the commons plugin (project-agnostic), or field harvest (domain-specific). Triggered by "two skills conflict", "they produce different conclusions", "contention-layer", "contention harvest", "open vs grounded contradiction", "research tracks disagree".
4
4
  user-invocable: true
5
5
  allowed-tools: ["Read", "Bash", "Grep", "Write"]
6
6
  model: sonnet
@@ -200,7 +200,7 @@ Output the confirmation block (file path + commit hash + push offer — format i
200
200
 
201
201
  ## Step 5-B.1. UAP Update (Operational Adaptation Loop)
202
202
 
203
- > Rule: `.claude/rules/operational_adaptation.md`
203
+ > Rule: `knowledge/shared/rules/operational_adaptation.md`
204
204
 
205
205
  At field-session close, update the **User Adaptation Profile** (`tracks/_meta/user_adaptation_profile.md`, local/gitignored — skip silently if absent or in an ephemeral/cloud session):
206
206
 
@@ -16,7 +16,7 @@ load: on-demand
16
16
 
17
17
  ```bash
18
18
  # Priority 1: Read FH auto_project_mapping.md
19
- cat .claude/rules/auto_project_mapping.md 2>/dev/null | grep -E "path:|project:" | head -10
19
+ cat knowledge/shared/rules/auto_project_mapping.md 2>/dev/null | grep -E "path:|project:" | head -10
20
20
 
21
21
  # Priority 2: Auto-discover git repos in common development directories
22
22
  find "$HOME/projects" "$HOME/dev" "$HOME/workspace" "$HOME/PycharmProjects" \
@@ -78,9 +78,21 @@ confirms the gap*, never a verdict the report emits on its own; surface each gap
78
78
  | 15+ `##` sections in CLAUDE.md | S-tier warning |
79
79
  | SKILL.md > 300 lines AND no `SKILL_detail.md` | S-tier — propose `/salience-splitter` (governance-semantic split, not compression) |
80
80
  | Rules files unreferenced in CLAUDE.md | R-tier |
81
+ | Always-loaded footprint (CLAUDE.md + every `.claude/rules/*.md` lacking `paths:` frontmatter) > 40k chars | S-tier — relocate detail rules to a non-loaded dir (e.g. `knowledge/shared/rules/`), pointers stay in CLAUDE.md |
82
+ | Always-loaded footprint > 80k chars | M-tier — same prescription, mandatory |
83
+ | **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 |
81
84
  | weekly_audit 14~30 days elapsed | S-tier |
82
85
  | weekly_audit 30+ days elapsed | M-tier |
83
86
 
87
+ Always-loaded + pointer-illusion checks are mechanical (found 2026-07-12 — FH itself shipped ~50k chars of rules/ behind "detail pointers" that saved nothing; the meta-harness blind spot this row closes):
88
+
89
+ ```bash
90
+ # always-loaded footprint (chars): CLAUDE.md + rules files with no paths: frontmatter
91
+ T=$(wc -c < CLAUDE.md 2>/dev/null); for f in .claude/rules/*.md; do [ -f "$f" ] || continue; head -5 "$f" | grep -q '^paths:' || T=$((T + $(wc -c < "$f"))); done; echo "always-loaded: $T chars"
92
+ # pointer-illusion: CLAUDE.md pointers targeting still-auto-loaded rules files
93
+ grep -oE '\.claude/rules/[a-z_]+\.md' CLAUDE.md | sort -u | while read p; do [ -f "$p" ] && echo "ILLUSION: $p (pointed-to AND always-loaded)"; done
94
+ ```
95
+
84
96
  ### Step 3-L. Language Lint (`--lint` mode only)
85
97
 
86
98
  > Activate with `/harness-doctor --lint` or when harvest-loop surfaces a P10-series signal. Skipped in standard runs.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: harvest-loop
3
- description: A self-evolution pipeline that runs automatically after field sessions end. field-harvest (pattern extraction) → contention-layer (collision signals) [Agent(subagent_type="challenger") + persona-innovator parallel] → synthesizer (challenger/innovator collision harvest) → Critic isolated Agent (SAGE automated critique) → harness-doctor (health check) → verify-bidirectional (consistency validation) → curator (skill lifecycle management) 8 steps. Session learnings are automatically absorbed back into the FH ecosystem so the harness evolves on its own. In the main development environment, runs automatically at session end. For external FH users, proposes execution first. Triggered by "session harvest", "learning absorption", "fh evolution", or "harvest-loop". (The phrase "run the pipeline" is ceded to pipeline-conductor to avoid a trigger collision — for end-to-end verification sweeps use pipeline-conductor.)
3
+ description: An 8-step self-evolution pipeline that runs after field sessions end (field-harvest → contention-layer → challenger + persona-innovator → synthesizer → Critic agent → harness-doctor → verify-bidirectional → curator), absorbing session learnings back into the FH ecosystem. Runs automatically at session end in the main dev environment; proposes execution first for external users. Triggered by "session harvest", "learning absorption", "fh evolution", or "harvest-loop". (The phrase "run the pipeline" is ceded to pipeline-conductor use that for end-to-end verification sweeps.)
4
4
  user-invocable: true
5
5
  allowed-tools: ["Read", "Write", "Bash", "Grep", "Glob", "Agent"]
6
6
  model-note: session-inherit — Sonnet base is first-class (sonnet_floor_doctrine.md); depth-critical judged steps route to dispatch (opus agent / cross-family sidecar, consent-gated), never a substrate requirement
@@ -40,7 +40,7 @@ Step 0 (Regression Guard) + Step 1 (field-harvest) + Step 2 (contention-layer) +
40
40
  Session end
41
41
 
42
42
  [Step 0-a] FH asset change detection → auto-quench
43
- │ git diff --name-only HEAD | grep -E "SKILL\.md|\.claude/rules/|templates/|CLAUDE\.md"
43
+ │ git diff --name-only HEAD | grep -E "SKILL\.md|\.claude/rules/|knowledge/shared/rules/|templates/|CLAUDE\.md"
44
44
  │ → 1+ FH assets changed: run full 3-axis gate
45
45
  │ → No changes: proceed to Step 0-b immediately
46
46
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: video-ingest
3
- description: Ingests a video's content (YouTube and similar) for agent context, routing by capability, by what the task needs, and by video length. When the task needs video understanding it prefers a natively multimodal engine that ingests the URL directly (Gemini via agy or the Gemini API, best for long video); when no such engine is present it uses Claude's own vision over ffmpeg-extracted frames (the claude-video pattern, best for short/medium, no external-runtime dependency); when the transcript alone suffices it uses yt-dlp's caption-track path; auth-gated videos fall back to the logged-in claude-in-chrome session. The governor cross-checks any multimodal comprehensive-read rather than trusting it. Reuses frontier-digest's Sidecar Engine Resolution Protocol for the capability probe. Triggered by "ingest this video", "what does this video show", "get the transcript from this YouTube video", "video-ingest".
3
+ description: Ingests a video's content (YouTube and similar) for agent context, routing by capability, task need, and video length a natively multimodal engine (Gemini via agy or the Gemini API) for direct-URL and long video, Claude vision over ffmpeg-extracted frames when no such engine is present, yt-dlp captions when the transcript alone suffices, and the logged-in claude-in-chrome session for auth-gated videos. The governor cross-checks any multimodal comprehensive-read. Triggered by "ingest this video", "what does this video show", "get the transcript from this YouTube video", "video-ingest".
4
4
  user-invocable: true
5
5
  allowed-tools: ["Read", "Bash"]
6
6
  model: sonnet