@chrono-meta/fh-gate 1.4.73 → 1.4.74
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/docs/ETHOS.md +106 -0
- package/docs/OUTPUT_EVIDENCE.md +118 -0
- package/docs/WHY.md +42 -0
- package/knowledge/patterns/ensemble_union_detection_task_pattern.md +125 -0
- package/knowledge/shared/GLOSSARY.md +77 -0
- package/knowledge/shared/patterns/multi-persona-review.md +88 -0
- package/knowledge/shared/plugin-catalog/recommended_plugins.md +117 -0
- package/package.json +22 -1
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +2 -2
- package/plugins/fh-meta/CHANGELOG.md +617 -0
- package/scripts/below_floor_scan.sh +91 -0
- package/scripts/chamber_run.sh +184 -0
- package/scripts/fh_env_delta_scan.sh +108 -0
- package/scripts/package_coverage_check.sh +119 -0
- package/scripts/selfcheck.sh +12 -0
- package/scripts/substrate_jump_detector.sh +60 -0
- package/scripts/test_marker_floor_lanes.sh +45 -0
- package/scripts/tier_census_grep.sh +54 -0
- package/templates/.claude/rules/session.md +153 -0
- package/templates/contrib_session.md +34 -0
- package/templates/goal-quench-hook-setup.md +152 -0
- package/templates/starter_profile.md +83 -0
- package/templates/temper_check.sh +46 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# tier_census_grep.sh — word-boundary tier-reference census helper (Sonnet-Floor Doctrine).
|
|
3
|
+
#
|
|
4
|
+
# WHY (origin: fh_signal_2026-07-10_session — Sonnet full-loop probe): the naive census pattern
|
|
5
|
+
# `opus|sonnet|haiku|floor|tier|model:` false-positives heavily ("frontier" matches `tier`,
|
|
6
|
+
# "floors" prose, method-sense "model"). The probe self-corrected, but per the doctrine's own
|
|
7
|
+
# prescription ladder (step 1: mechanize) the discipline belongs in a script, not re-derived
|
|
8
|
+
# per session. Built 2026-07-10 on operator instruction (evidence-threshold overridden by
|
|
9
|
+
# explicit "complete it" — recorded, not silent).
|
|
10
|
+
#
|
|
11
|
+
# WHAT: emits candidate tier-reference hits with word-boundary patterns, one line per hit
|
|
12
|
+
# (file:line:text), for the auditor to CLASSIFY per sonnet_floor_doctrine.md's table
|
|
13
|
+
# (trust-floor / availability-gate / advisory / N-A). The script finds candidates; the
|
|
14
|
+
# classification stays a judged step with the doctrine table as its anchor.
|
|
15
|
+
#
|
|
16
|
+
# Sense-filter hints (printed, not auto-applied — de-noising must never hide a real gate):
|
|
17
|
+
# - "frontier|multi-tier|C-tier|A/B-tier" → usually N/A (different axis: content/data tiers)
|
|
18
|
+
# - "hub model|mental model|data model" → usually N/A (methodology sense of "model")
|
|
19
|
+
# - execution tier S/M/L/XL → N/A (token budget, not model tier — fh_detail_protocols)
|
|
20
|
+
#
|
|
21
|
+
# Usage: bash scripts/tier_census_grep.sh <file> [file...] Exit: 0 always (census, not gate)
|
|
22
|
+
|
|
23
|
+
set -uo pipefail
|
|
24
|
+
|
|
25
|
+
if [ $# -eq 0 ]; then
|
|
26
|
+
echo "usage: bash scripts/tier_census_grep.sh <file> [file...]" >&2
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
PATTERN='\b(opus|sonnet|haiku|fable)\b|\bfloor(-status|-tier|s)?\b|\btiers?\b|(^|[^a-zA-Z])model:'
|
|
31
|
+
|
|
32
|
+
for f in "$@"; do
|
|
33
|
+
if [ ! -f "$f" ]; then
|
|
34
|
+
echo "── $f: NOT FOUND (phantom input — check the path) ──"
|
|
35
|
+
continue
|
|
36
|
+
fi
|
|
37
|
+
echo "── census candidates: $f ──"
|
|
38
|
+
# -P where available (GNU/pcre); BSD grep on macOS supports -E word boundaries via [[:<:]] —
|
|
39
|
+
# portable route: grep -nEi with \b works on GNU; on BSD use perl fallback.
|
|
40
|
+
if echo x | grep -P 'x' >/dev/null 2>&1; then
|
|
41
|
+
grep -nPi "$PATTERN" "$f" || echo " (0 candidates)"
|
|
42
|
+
else
|
|
43
|
+
# 0-hit에도 "(0 candidates)"를 찍는다 — GNU 분기와 출력 대칭 (pmh-parity 포트가 잡은 갭, 역이식 2026-07-10)
|
|
44
|
+
hits=$(perl -ne 'print "$.:$_" if /\b(opus|sonnet|haiku|fable)\b|\bfloor(-status|-tier|s)?\b|\btiers?\b|(^|[^a-zA-Z])model:/i' "$f")
|
|
45
|
+
if [ -n "$hits" ]; then printf '%s\n' "$hits"; else echo " (0 candidates)"; fi
|
|
46
|
+
fi
|
|
47
|
+
done
|
|
48
|
+
|
|
49
|
+
cat <<'HINTS'
|
|
50
|
+
── classify each hit per sonnet_floor_doctrine.md (trust-floor / availability-gate / advisory / N-A) ──
|
|
51
|
+
N/A sense hints (verify, don't auto-drop): frontier·C-tier·A/B-tier (content-tier axis) ·
|
|
52
|
+
"hub/mental/data model" (methodology sense) · S/M/L/XL execution tier (token budget, not model).
|
|
53
|
+
HINTS
|
|
54
|
+
exit 0
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
session.md — Claude Code Session Rules Template
|
|
3
|
+
|
|
4
|
+
Purpose of this file:
|
|
5
|
+
- Define Claude's session operating rules (how to behave)
|
|
6
|
+
- Behavioral guidelines applied across the entire project
|
|
7
|
+
- Commit to Git and share with the team
|
|
8
|
+
- Edited and managed directly by the user
|
|
9
|
+
|
|
10
|
+
Difference from MEMORY.md:
|
|
11
|
+
- MEMORY.md: Stores data/experience learned during conversation (auto-managed by Claude)
|
|
12
|
+
- session.md: Defines procedures/rules for Claude to follow (edited directly by the user)
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
- Copy this file to your project's .claude/rules/session.md
|
|
16
|
+
- Add, remove, or modify sections to fit your project
|
|
17
|
+
- Change sections marked with [CUSTOMIZE] comments to match your project
|
|
18
|
+
-->
|
|
19
|
+
|
|
20
|
+
### Automatic Actions at Session Start
|
|
21
|
+
|
|
22
|
+
#### Root Memory (Knowledge Hub) Connection
|
|
23
|
+
|
|
24
|
+
At the start of a conversation ("hello", "let's start", "load root memory"), perform the following:
|
|
25
|
+
|
|
26
|
+
1. Read `{FH_ROOT}/CATALOG.md`
|
|
27
|
+
- Understand recent work context
|
|
28
|
+
- Check today's tasks (todo/plan)
|
|
29
|
+
|
|
30
|
+
2. Load project memory index
|
|
31
|
+
- Check `.claude/projects/.../memory/MEMORY.md`
|
|
32
|
+
- Prioritize loading memory most relevant to current work
|
|
33
|
+
- Proceed naturally without notifying the user that memory was loaded
|
|
34
|
+
|
|
35
|
+
#### Exceptions
|
|
36
|
+
- If the user explicitly requests not to use memory
|
|
37
|
+
- For simple one-off questions, load is optional
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### Session Backup Before Tests
|
|
42
|
+
|
|
43
|
+
<!-- [CUSTOMIZE] Adjust trigger conditions to match your test framework -->
|
|
44
|
+
|
|
45
|
+
#### Automatic Backup Trigger
|
|
46
|
+
|
|
47
|
+
At any point when tests could be run, **automatically** perform a session backup:
|
|
48
|
+
|
|
49
|
+
1. **When I recommend running tests** — **immediately before** the recommendation message
|
|
50
|
+
2. **When the user signals intent to start tests** — **before** running the test command
|
|
51
|
+
|
|
52
|
+
#### Why Backup
|
|
53
|
+
- Sessions can be forcibly terminated when tests start
|
|
54
|
+
- Prevents loss of conversation context, analysis results, and change history
|
|
55
|
+
|
|
56
|
+
#### How to Backup
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
cat > .claude/session_backup_$(date +%Y%m%d_%H%M%S).md << 'EOF'
|
|
60
|
+
# Session Backup - [Task Title]
|
|
61
|
+
|
|
62
|
+
## Problem
|
|
63
|
+
- [Issue currently being resolved]
|
|
64
|
+
|
|
65
|
+
## Changes Made
|
|
66
|
+
- [filename:line]
|
|
67
|
+
- [before/after]
|
|
68
|
+
|
|
69
|
+
## Next Steps
|
|
70
|
+
- [Things to verify after tests]
|
|
71
|
+
EOF
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### Important
|
|
75
|
+
- Perform **automatically** even without an explicit user request
|
|
76
|
+
- Never recommend tests without first creating a backup
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### Automatic Response to Issues
|
|
81
|
+
|
|
82
|
+
<!-- [CUSTOMIZE] Adjust report tool/path to match your project -->
|
|
83
|
+
|
|
84
|
+
#### Automatic Check Trigger
|
|
85
|
+
|
|
86
|
+
When the user mentions a problem, **automatically** locate and analyze the latest test report:
|
|
87
|
+
|
|
88
|
+
1. **Trigger keywords**
|
|
89
|
+
- "something broke", "got an error", "it failed", "not working"
|
|
90
|
+
- "issue occurred", "test failed", "broken", "failed"
|
|
91
|
+
|
|
92
|
+
2. **Analyze and report**
|
|
93
|
+
- Names of failing test cases
|
|
94
|
+
- Error messages and stack traces
|
|
95
|
+
- Summarize in a concise format
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### Code Writing Principles
|
|
100
|
+
|
|
101
|
+
<!-- [CUSTOMIZE] Adjust to match your project's coding conventions. The 5 principles below are universal and valid for any project. -->
|
|
102
|
+
|
|
103
|
+
Be conscious of all 5 principles **before** writing code — directly reduces back-and-forth where Claude rushes to create something and the user has to correct it.
|
|
104
|
+
|
|
105
|
+
#### 1. Reference Existing Code (Consistency First)
|
|
106
|
+
|
|
107
|
+
- **Reference targets**: Code with similar functionality or in the same layer within the project
|
|
108
|
+
- **No introducing new patterns** — follow existing patterns first; only abstract when the same pattern repeats 3+ times and needs consolidation
|
|
109
|
+
- **Follow framework Core/Base class patterns** — if the project has `.claude/rules/`, that hierarchy takes precedence
|
|
110
|
+
|
|
111
|
+
#### 2. Independence and Regression Prevention
|
|
112
|
+
|
|
113
|
+
- Verify that new code **does not break existing tests or functionality**
|
|
114
|
+
- Manage side effects (shared state, global variables, file locks)
|
|
115
|
+
- Use `git grep` before changes to understand the impact surface — check for unexpected callers
|
|
116
|
+
|
|
117
|
+
#### 3. Locator and Identifier Stability (UI code only)
|
|
118
|
+
|
|
119
|
+
<!-- [CUSTOMIZE] Can be removed for non-mobile QA / non-web QA projects -->
|
|
120
|
+
|
|
121
|
+
- Do not depend on dynamically generated attributes (auto-generated id, timestamps in content-desc)
|
|
122
|
+
- Avoid absolute XPath — fragile to structural changes
|
|
123
|
+
- Consider i18n for text-based identifiers (multilingual projects)
|
|
124
|
+
- If the project has `.claude/rules/LOCATOR_*` guides, those take precedence
|
|
125
|
+
|
|
126
|
+
#### 4. Flakiness Risk Management
|
|
127
|
+
|
|
128
|
+
- **No `time.sleep`** — use explicit waits (implicit/explicit wait) + condition-based polling
|
|
129
|
+
- No unbounded waits without a timeout
|
|
130
|
+
- Allow tolerance in screenshot-based assertions
|
|
131
|
+
- Minimize assumptions about device/environment state (keyboard visibility, previous screen state, etc.)
|
|
132
|
+
|
|
133
|
+
#### 5. Mandatory grep Before Design (Prevent Missing Own Assets)
|
|
134
|
+
|
|
135
|
+
**Before** designing a new feature or pattern:
|
|
136
|
+
|
|
137
|
+
1. grep for similar implementations in the project — reuse if already present
|
|
138
|
+
2. grep learnings from sibling projects in the hub (e.g., `{FH_ROOT}/`) — prevent reinventing solutions already solved elsewhere
|
|
139
|
+
3. Re-read the project's CLAUDE.md and rules/*.md — check for overlooked constraints
|
|
140
|
+
|
|
141
|
+
Starting design with zero cited references is a warning signal for **missing own assets**. Always present at least 1 grep result before beginning design.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### Rule Hierarchy and Priority
|
|
146
|
+
|
|
147
|
+
<!-- [CUSTOMIZE] Define rule sources and priority for your project -->
|
|
148
|
+
|
|
149
|
+
**Priority when conflicts arise:**
|
|
150
|
+
1. **Framework rules** — code patterns (non-negotiable)
|
|
151
|
+
2. **Test design philosophy** — "what to test" (QA Identity, etc.)
|
|
152
|
+
3. **Learned feedback** — rules based on user experience
|
|
153
|
+
4. **Operational rules** — session backup, report analysis, and other work processes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {session title — include the date}
|
|
3
|
+
description: {one-line main achievement or pattern}
|
|
4
|
+
type: contrib-session
|
|
5
|
+
date: YYYY-MM-DD
|
|
6
|
+
tags: [{related}, {tags}]
|
|
7
|
+
contributor: {your-handle}
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# {Session title}
|
|
11
|
+
|
|
12
|
+
<!--
|
|
13
|
+
Consent note: placing this file under tracks/_contrib/ is your consent to publish it.
|
|
14
|
+
De-identify before opening the PR: no employer/internal-project/colleague names, no home paths,
|
|
15
|
+
no internal domains, no credentials. The PR gate re-checks, but you scrub first.
|
|
16
|
+
-->
|
|
17
|
+
|
|
18
|
+
## Context
|
|
19
|
+
|
|
20
|
+
{What project/situation this came from — de-identified. What problem you were working on.}
|
|
21
|
+
|
|
22
|
+
## What happened / what was found
|
|
23
|
+
|
|
24
|
+
{The work, the pattern, the failure, the fix. Concrete enough to be reusable — file/command level
|
|
25
|
+
where possible, minus anything private.}
|
|
26
|
+
|
|
27
|
+
## Why it matters beyond my project
|
|
28
|
+
|
|
29
|
+
{The reusable claim: when would another operator hit this? What does this generalize to?}
|
|
30
|
+
|
|
31
|
+
## Decisions / open questions
|
|
32
|
+
|
|
33
|
+
- Decision: {key call made and why}
|
|
34
|
+
- Open: {what remains unresolved — only if applicable}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# goal-quench Stop Hook Setup
|
|
2
|
+
|
|
3
|
+
Add the following to your project's `.claude/settings.json` to enable the goal-quench Stop hook:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"hooks": {
|
|
8
|
+
"Stop": [
|
|
9
|
+
{
|
|
10
|
+
"matcher": "",
|
|
11
|
+
"hooks": [
|
|
12
|
+
{
|
|
13
|
+
"type": "command",
|
|
14
|
+
"command": "bash -c 'f=\".claude/goal-quench.active\"; [ -f \"$f\" ] && echo \"\\n[goal-quench] /goal finished. Running quality verification...\" && cp \"$f\" \".claude/goal-quench.pending\" && rm -f \"$f\" || true'"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Add to your project's `.gitignore`:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
.claude/goal-quench.active
|
|
27
|
+
.claude/goal-quench.pending
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## How it works
|
|
31
|
+
|
|
32
|
+
1. `/goal-quench` (Phase 1) writes `.claude/goal-quench.active` with scope + budget info
|
|
33
|
+
2. User runs `/goal [condition]`
|
|
34
|
+
3. When `/goal` finishes → Stop hook fires → detects `.active` → copies to `.pending` → removes `.active`
|
|
35
|
+
4. Next Claude response: detects `.pending` → auto-runs `pipeline-conductor --quick` → cleans up
|
|
36
|
+
|
|
37
|
+
## Merge with existing settings.json
|
|
38
|
+
|
|
39
|
+
If you already have a `settings.json`, merge the `hooks.Stop` array:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"permissions": { ... your existing permissions ... },
|
|
44
|
+
"hooks": {
|
|
45
|
+
"Stop": [
|
|
46
|
+
{
|
|
47
|
+
"matcher": "",
|
|
48
|
+
"hooks": [
|
|
49
|
+
{ "type": "command", "command": "... your existing stop hook command if any ..." }
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"matcher": "",
|
|
54
|
+
"hooks": [
|
|
55
|
+
{
|
|
56
|
+
"type": "command",
|
|
57
|
+
"command": "bash -c 'f=\".claude/goal-quench.active\"; [ -f \"$f\" ] && echo \"\\n[goal-quench] /goal finished. Running quality verification...\" && cp \"$f\" \".claude/goal-quench.pending\" && rm -f \"$f\" || true'"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Manual Apply (forge-harness)
|
|
67
|
+
|
|
68
|
+
A pre-merged `settings.json` for the forge-harness repo is available at:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
templates/goal-quench-settings-merged.json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
To apply it manually (one command, run from the forge-harness repo root):
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
cp templates/goal-quench-settings-merged.json .claude/settings.json
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
This file preserves all existing `permissions` and `enabledPlugins` from the current `.claude/settings.json` and adds the `hooks.Stop` section.
|
|
81
|
+
|
|
82
|
+
Note: `.claude/settings.json` is gitignored (local-only file), so this copy must be done manually on each machine.
|
|
83
|
+
|
|
84
|
+
## Verification Steps
|
|
85
|
+
|
|
86
|
+
After applying the hook, verify the full pipeline with these steps:
|
|
87
|
+
|
|
88
|
+
### Step 1 — Start a goal-quench session
|
|
89
|
+
|
|
90
|
+
Run the goal-quench skill to write the `.active` file:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
/goal-quench
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
This should create `.claude/goal-quench.active` with scope + budget metadata.
|
|
97
|
+
|
|
98
|
+
Confirm:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
ls -la .claude/goal-quench.active
|
|
102
|
+
cat .claude/goal-quench.active
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Step 2 — Run a goal
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
/goal <your completion condition here>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Example: `/goal all acceptance tests pass`
|
|
112
|
+
|
|
113
|
+
### Step 3 — Verify Stop hook fired
|
|
114
|
+
|
|
115
|
+
When the `/goal` task finishes (Claude stops responding), check that:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# .active should be gone
|
|
119
|
+
ls .claude/goal-quench.active 2>/dev/null && echo "ERROR: .active still exists" || echo "OK: .active removed"
|
|
120
|
+
|
|
121
|
+
# .pending should exist
|
|
122
|
+
ls .claude/goal-quench.pending && echo "OK: .pending created" || echo "ERROR: .pending missing"
|
|
123
|
+
|
|
124
|
+
# .pending content
|
|
125
|
+
cat .claude/goal-quench.pending
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Step 4 — Verify auto-trigger in next response
|
|
129
|
+
|
|
130
|
+
Send any message to Claude in the same session. The next response should:
|
|
131
|
+
1. Detect `.claude/goal-quench.pending`
|
|
132
|
+
2. Auto-run `pipeline-conductor --quick` (or equivalent quality verification)
|
|
133
|
+
3. Remove `.pending` after completion
|
|
134
|
+
|
|
135
|
+
If the skill is not installed, Claude will report the pending file and ask how to proceed.
|
|
136
|
+
|
|
137
|
+
### Step 5 — Cleanup check
|
|
138
|
+
|
|
139
|
+
After the verification round completes:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
ls .claude/goal-quench.* 2>/dev/null || echo "OK: all state files cleaned up"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Troubleshooting
|
|
146
|
+
|
|
147
|
+
| Symptom | Likely cause | Fix |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `.active` not created after `/goal-quench` | Skill not writing the file | Check SKILL.md `goal-quench` for file write step |
|
|
150
|
+
| `.active` still present after session stop | Hook not installed / not firing | Re-run `cp templates/goal-quench-settings-merged.json .claude/settings.json`, restart Claude Code |
|
|
151
|
+
| `.pending` created but no auto-trigger | pipeline-conductor not installed | Install or implement the skill; Claude will report the pending state |
|
|
152
|
+
| Hook fires on every stop (not just goal-quench) | Expected — `[ -f "$f" ]` guard prevents false triggers when `.active` absent |
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# FH Starter Profile — Mode C (plugin only, no clone)
|
|
2
|
+
|
|
3
|
+
> **The one opinionated front door.** FH has 33 skills and a full hub you can clone — but you
|
|
4
|
+
> don't need any of that to get value today. This profile is the *single strong default*: one
|
|
5
|
+
> install command, a curated first-five skills, and a zero-install governance gate. Pick up the
|
|
6
|
+
> rest later if you want it.
|
|
7
|
+
>
|
|
8
|
+
> This is **Mode C** (see `knowledge/shared/rules/modes_and_value.md`): you install the plugin/skills only,
|
|
9
|
+
> you do **not** clone the hub. That trade-off is spelled out under *What Mode C does not include*.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Install — one command
|
|
14
|
+
|
|
15
|
+
**Prerequisite**: Claude Code CLI (`claude --version`).
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
claude plugin marketplace add https://github.com/chrono-meta/forge-harness.git
|
|
19
|
+
claude plugin install -s user fh-meta@forge-harness
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
That's it — no clone, no shell hooks, no machine setup. Open Claude Code in *your own* project and
|
|
23
|
+
the skills are available as slash commands.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cd ~/your-project && claude
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 2. Governance gate — zero install (no plugin needed either)
|
|
30
|
+
|
|
31
|
+
The core FH value — **"pass → accelerate"**: code that clears the gate ships faster. You can run it
|
|
32
|
+
on any file with nothing installed but `npx`:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx --package @chrono-meta/fh-gate fh-gate # default: Claude backend
|
|
36
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate # Codex backend
|
|
37
|
+
# → FH_GATE_VERDICT: PASS | PENDING | BLOCKED | ESCALATE
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This wraps any coding agent (Claude, Codex) as a post-generation governance gate. It is the single
|
|
41
|
+
highest-leverage thing to try first if you only do one thing.
|
|
42
|
+
|
|
43
|
+
## 3. The opinionated first five (start here, ignore the other 28)
|
|
44
|
+
|
|
45
|
+
A new user dropped into 33 skills stalls. These five cover the common path; reach for the rest only
|
|
46
|
+
when a real need shows up.
|
|
47
|
+
|
|
48
|
+
| Skill | Run it when | One line |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `/plugin-recommender` | "what tools should I even use?" | Discovery — classifies tools, checks token cost |
|
|
51
|
+
| `/context-doctor` | session feels slow / token-heavy | Generates `.claudeignore`, flags large files, `/clear` timing |
|
|
52
|
+
| `/harness-doctor` | "is my setup sane?" | L1–L4 structure diagnosis + prescription |
|
|
53
|
+
| `/goal-quench` | before executing a risky/long task | Gated execution — the acceleration gate in skill form |
|
|
54
|
+
| `/frontier-digest` | "what's new out there?" | External/frontier trend cross-reference |
|
|
55
|
+
|
|
56
|
+
Natural language works too — you don't need to memorize slash commands. "manage my context",
|
|
57
|
+
"recommend a plugin", "check my harness structure" route to the same skills.
|
|
58
|
+
|
|
59
|
+
## 4. What Mode C does *not* include (honest boundary)
|
|
60
|
+
|
|
61
|
+
Plugin-only install gives you **Layer 2 (the skills)**. It does **not** give you **Layer 1**, which
|
|
62
|
+
only activates when you clone the hub (Mode A/B):
|
|
63
|
+
|
|
64
|
+
- **No active onboarding cascade** — no greeting-triggered 5-skill auto-run. You invoke skills yourself.
|
|
65
|
+
- **No acceleration baseline** — no zshrc notification hook, no sentinels, no weekly-audit schedule,
|
|
66
|
+
no 4-axis pre-commit gate. Those are hub-internal infra and are deliberately not shipped to Mode C.
|
|
67
|
+
- **No automatic harness signals** — history accumulation happens on *your* project side; FH won't
|
|
68
|
+
prompt you. (FH absorbs Mode-C contributions through issue monitoring + PR cadence, not a daemon.)
|
|
69
|
+
|
|
70
|
+
If you later want Layer 1, clone the hub and run `/install-wizard` — the full path. The README's
|
|
71
|
+
"Get started in 2 minutes" covers it.
|
|
72
|
+
|
|
73
|
+
## 5. Want to go further?
|
|
74
|
+
|
|
75
|
+
- **Clone the hub** (Mode A/B) → persistent cross-project knowledge, `tracks/`, the compounding loop.
|
|
76
|
+
- **Contribute back** → a Mode-C PR is exactly the external validation FH is looking for. Open an
|
|
77
|
+
issue or PR on `chrono-meta/forge-harness`.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
*Design note: this profile follows the frictionless-distribution + opinionated-front-door pattern
|
|
82
|
+
seen in field harnesses like [gstack](https://github.com/garrytan/gstack) — a single strong default
|
|
83
|
+
as the public entry point, full meta-flexibility kept behind it.*
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# temper_check.sh — Wave-T (Temper) step T-1: complexity delta of a quench.
|
|
3
|
+
# Measures how much complexity a steel-quench ADDED to a markdown asset
|
|
4
|
+
# (pre-quench baseline → post-convergence). It is a MEASUREMENT, not a detector
|
|
5
|
+
# (don't-overbuild guard: no judgment engine here — T-3 verdict is human/LLM).
|
|
6
|
+
#
|
|
7
|
+
# Usage: temper_check.sh <repo> <file-rel-path> <pre-quench-ref> [<post-ref>]
|
|
8
|
+
# <post-ref> default = working tree.
|
|
9
|
+
# See plugins/fh-meta/skills/steel-quench/SKILL.md §Wave-T.
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
repo="${1:?repo path}"; file="${2:?file rel path}"; pre="${3:?pre-quench ref}"; post="${4:-}"
|
|
13
|
+
|
|
14
|
+
metrics() { # reads text on stdin → "lines sections steps tables fences crossrefs"
|
|
15
|
+
local t prose; t="$(cat)"
|
|
16
|
+
# sections/steps/tables count PROSE only — lines inside ``` fences are code
|
|
17
|
+
# (bash comments `# ...` would otherwise inflate Δsections; found run #4, install-wizard)
|
|
18
|
+
prose="$(printf '%s\n' "$t" | awk '/^[[:space:]]*```/{f=!f;next} !f')"
|
|
19
|
+
local lines sections steps tables fences crossrefs
|
|
20
|
+
lines=$(printf '%s\n' "$t" | wc -l | tr -d ' ')
|
|
21
|
+
sections=$(printf '%s\n' "$prose" | grep -cE '^#{1,6} ' || true)
|
|
22
|
+
steps=$(printf '%s\n' "$prose" | grep -cE '^[[:space:]]*([0-9]+\.|[-*] )' || true)
|
|
23
|
+
tables=$(printf '%s\n' "$prose" | grep -cE '^\|' || true)
|
|
24
|
+
fences=$(( $(printf '%s\n' "$t" | grep -c '```' || true) / 2 ))
|
|
25
|
+
crossrefs=$(printf '%s\n' "$t" | grep -oE '\]\(|\[\[' | wc -l | tr -d ' ')
|
|
26
|
+
echo "$lines $sections $steps $tables $fences $crossrefs"
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
pre_txt=$(git -C "$repo" show "$pre:$file")
|
|
30
|
+
if [ -n "$post" ]; then post_txt=$(git -C "$repo" show "$post:$file"); else post_txt=$(cat "$repo/$file"); fi
|
|
31
|
+
|
|
32
|
+
read -r l0 s0 p0 t0 f0 x0 <<<"$(printf '%s' "$pre_txt" | metrics)"
|
|
33
|
+
read -r l1 s1 p1 t1 f1 x1 <<<"$(printf '%s' "$post_txt" | metrics)"
|
|
34
|
+
|
|
35
|
+
printf '\n=== Wave-T complexity delta — %s ===\n' "$file"
|
|
36
|
+
printf 'baseline: %s post: %s\n\n' "$pre" "${post:-<working>}"
|
|
37
|
+
printf '%-12s %6s %6s %8s\n' metric pre post Δ
|
|
38
|
+
for row in "lines $l0 $l1" "sections $s0 $s1" "steps $p0 $p1" "tables $t0 $t1" "fences $f0 $f1" "cross-refs $x0 $x1"; do
|
|
39
|
+
set -- $row; printf '%-12s %6s %6s %+8d\n' "$1" "$2" "$3" "$(( $3 - $2 ))"
|
|
40
|
+
done
|
|
41
|
+
|
|
42
|
+
dx=$(( x1 - x0 )); dp=$(( p1 - p0 ))
|
|
43
|
+
printf '\n-- T-3 heuristic flags (review, not auto-reject) --\n'
|
|
44
|
+
[ "$dx" -gt "$dp" ] && printf ' ⚠ Δcross-refs(%+d) > Δsteps(%+d): quench added wiring, not function?\n' "$dx" "$dp" || true
|
|
45
|
+
[ "$(( s1 - s0 ))" -gt 0 ] && printf ' ⚠ %+d new section(s): confirm each fixes a flaw, not just defends a Wave finding\n' "$(( s1 - s0 ))" || true
|
|
46
|
+
printf '\nNext: run harness-doctor on post asset for absolute tier (T-2), then record τ verdict (PASS / FAIL + named construct)\n'
|