@chrono-meta/fh-gate 1.4.32 → 1.4.33
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.md
CHANGED
|
@@ -506,7 +506,13 @@ Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
|
|
|
506
506
|
→ ④ Memory hygiene — update stale entries + record new session findings
|
|
507
507
|
→ ④-b npm freshness — if any npm-shipped asset changed this session (the `package.json` `files[]`
|
|
508
508
|
surface: skills · agents · README · AGENTS.md · CLAUDE.md · CHEATSHEET), **propose an npm
|
|
509
|
-
republish**: version bump
|
|
509
|
+
republish**: version bump — and the **same bump MUST propagate in lockstep to every
|
|
510
|
+
`.claude-plugin/plugin.json` + `.claude-plugin/marketplace.json` version** (single-source =
|
|
511
|
+
`package.json`). The Codex plugin loader keys its cache path on the *plugin.json* version
|
|
512
|
+
(`~/.codex/plugins/cache/forge-harness/{plugin}/{version}/`), so a frozen plugin.json serves
|
|
513
|
+
**stale cached skills to Codex/AGENTS.md users** even after content ships (this exact 3-way
|
|
514
|
+
drift — fh-meta 1.4.1/1.4.11 vs npm 1.4.32 — was found + fixed 2026-06-17). Then Pre-Publish
|
|
515
|
+
Surface Gate (`/public-surface-audit` + `/marketplace-gate`
|
|
510
516
|
Check 5) + `npm publish` + **`git tag vX.Y.Z` on the bump commit + `git push origin vX.Y.Z`**
|
|
511
517
|
(tag at publish time, in lockstep with the version — keeps git tags aligned with npmjs.com so
|
|
512
518
|
Releases/Tags never drift). The npm-served README and shipped skills/agents freeze at publish
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contention-layer
|
|
3
|
-
description: When two skills or
|
|
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".
|
|
4
4
|
user-invocable: true
|
|
5
5
|
allowed-tools: ["Read", "Bash", "Grep", "Write"]
|
|
6
6
|
model: sonnet
|
|
@@ -20,16 +20,21 @@ When two skills conflict, **harvest the signal** instead of discarding one. Find
|
|
|
20
20
|
/contention-layer --skills A B # specify two skills for contention analysis
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
Phrase triggers: "two skills conflict" · "weird when used together" · "they produce different conclusions" · "contention harvest" · "contention"
|
|
23
|
+
Phrase triggers: "two skills conflict" · "weird when used together" · "they produce different conclusions" · "contention harvest" · "contention" · "open vs grounded contradiction" · "research tracks disagree" · "dual-track grounding **+ conflict/disagree/contradict**" (the phrase "dual-track grounding" alone collides with `phantom-quench` on the word "grounding" — measured Step-0.5 probe #3, 2026-06-17; it fires this skill only when a conflict word co-occurs)
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/contention-layer --tracks open=<deep-research result> grounded=<memory/CATALOG recall> # Dual-Track Grounding
|
|
27
|
+
```
|
|
24
28
|
|
|
25
29
|
## Step 1. Collect Conflict Points
|
|
26
30
|
|
|
27
|
-
Record clearly which
|
|
31
|
+
Record clearly which sources conflicted on which output, and in which direction. The conflicting
|
|
32
|
+
**sources** may be two skills/agents, or two independent **research tracks** (Dual-Track Grounding).
|
|
28
33
|
|
|
29
34
|
```
|
|
30
|
-
Conflicting
|
|
31
|
-
Conflicting
|
|
32
|
-
Conflicting output: {TC / diagnostic report / design document / ...}
|
|
35
|
+
Conflicting source A: {skill name / "open-frontier research"} — verdict: {conclusion}
|
|
36
|
+
Conflicting source B: {skill name / "internally-grounded recall"} — verdict: {conclusion}
|
|
37
|
+
Conflicting output: {TC / diagnostic report / design document / a factual claim / ...}
|
|
33
38
|
Conflict point: {which item, by which criteria difference}
|
|
34
39
|
```
|
|
35
40
|
|
|
@@ -38,6 +43,36 @@ Conflict point: {which item, by which criteria difference}
|
|
|
38
43
|
- `Scope conflict`: A includes, B excludes a certain domain
|
|
39
44
|
- `Order conflict`: Same goal approached with different preconditions
|
|
40
45
|
- `Philosophy conflict`: The measurement purpose itself differs (e.g., risk reduction vs coverage maximization)
|
|
46
|
+
- `Track conflict` (Dual-Track Grounding): The same claim is asserted by an **open-frontier** track
|
|
47
|
+
(deep-research / WebSearch over external sources) and contradicted — or unsupported — by an
|
|
48
|
+
**internally-grounded** track (memory / CATALOG / past-session recall). The disagreement is the signal.
|
|
49
|
+
|
|
50
|
+
### Step 1-b. Dual-Track Grounding — Non-Model Ground at the research layer
|
|
51
|
+
|
|
52
|
+
When the input is two research tracks rather than two skills, the contention IS the mechanism: two
|
|
53
|
+
**time-decorrelated** anchors disagreeing exposes the agreement-bias gap that judge-only synthesis
|
|
54
|
+
hides (a single track, however strong, can be confidently wrong with nothing to contradict it). This is
|
|
55
|
+
a research-layer **partial analogue of Non-Model Ground** (`[[fh_propagation_nonmodel_ground]]`) — the
|
|
56
|
+
grounded track is a **time-decorrelated, provenance-bearing** anchor (written in a prior session against
|
|
57
|
+
recorded sources, so the present session's agreement-bias cannot silently overwrite it). It is **not** a
|
|
58
|
+
true non-model anchor: memory/CATALOG are model-written, so the independence is temporal + provenance,
|
|
59
|
+
not lineage. The honest bias-reduction is that contradicting a provenance-bearing past claim **forces an
|
|
60
|
+
explicit source check** (the challenger-verify pairing below) rather than a silent overwrite.
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Open track (frontier): deep-research / WebSearch — what the external world currently asserts
|
|
64
|
+
Grounded track (internal): memory + CATALOG + past-session recall — what we already established
|
|
65
|
+
→ AGREE : low signal (corroboration) — log confidence, no harvest
|
|
66
|
+
→ DISAGREE : HIGH signal — the open track may be newer (our claim is stale → memory-hygiene),
|
|
67
|
+
OR our grounded claim is right and the frontier is noise (→ a publishable delta).
|
|
68
|
+
Direction is a judged call; pair it with challenger-verify-before-act (source-verify
|
|
69
|
+
BEFORE rewriting either side — never let recency alone win) and route to harvest.
|
|
70
|
+
→ UNSUPPORTED: the open track asserts what the grounded track has no record of, and back-trace
|
|
71
|
+
(phantom-quench) finds no source → treat as Phantom, not as a new fact.
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Dispatch shape: the two tracks run as independent calls (deep-research ∥ grounded recall — agent-composer
|
|
75
|
+
can parallelize), then their outputs enter Step 2 as source A / source B. The harvest gate below is unchanged.
|
|
41
76
|
|
|
42
77
|
## Step 2. Contention Essence — Harvest Gate
|
|
43
78
|
|
|
@@ -106,13 +141,14 @@ After generating skeleton: **"I will place this draft at {path}. Shall I proceed
|
|
|
106
141
|
|
|
107
142
|
```
|
|
108
143
|
[Contention Harvest Report]
|
|
109
|
-
Conflicting
|
|
110
|
-
Conflict type: {Criteria / Scope / Order / Philosophy}
|
|
144
|
+
Conflicting sources: {A} vs {B}
|
|
145
|
+
Conflict type: {Criteria / Scope / Order / Philosophy / Track}
|
|
111
146
|
Harvest Gate: Pass / Fail
|
|
112
147
|
└ Reason: {1 line}
|
|
113
148
|
New skill candidate: {name or none}
|
|
114
149
|
Routing path: {fh-meta / commons / field / n/a}
|
|
115
|
-
|
|
150
|
+
Track-conflict resolution: {memory-hygiene / publishable-delta / phantom / n/a} # only for Track conflicts (Step 1-b)
|
|
151
|
+
Next action: {generate draft / exclude / recommend improving existing skill / route track-conflict terminal}
|
|
116
152
|
```
|
|
117
153
|
|
|
118
154
|
## Done When
|
|
@@ -122,6 +158,9 @@ All steps 1–4 completed
|
|
|
122
158
|
+ [Contention Harvest Report] output (Harvest Gate Pass/Fail stated)
|
|
123
159
|
+ If new skill candidate exists: SKILL.md skeleton generated + user confirmation gate complete
|
|
124
160
|
+ If no new skill candidate: "Exclude / recommend improving existing skill" stated and exit
|
|
161
|
+
+ If Track conflict (Step 1-b): terminal stated — memory-hygiene (stale grounded claim) OR
|
|
162
|
+
publishable-delta (frontier was noise, our claim holds) OR phantom-quench (unsupported frontier
|
|
163
|
+
assertion). A track conflict resolving to a terminal is NOT an "exclude" — it is a routed outcome.
|
|
125
164
|
```
|
|
126
165
|
|
|
127
166
|
Verdict: PASS (Harvest Gate Pass — new skill skeleton generated or no candidates confirmed) | CONDITIONAL_PASS (candidates found, user confirmation pending) | FAIL (Harvest Gate Fail — collision unresolvable, no new skill justified) | ESCALATE (role boundary ambiguous, requires human judgment)
|