@chrono-meta/fh-gate 1.1.0 → 1.2.1
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/agents/challenger.md +169 -0
- package/AGENTS.md +160 -0
- package/CATALOG.md +256 -0
- package/CHEATSHEET.md +367 -0
- package/CLAUDE.md +331 -0
- package/CONTRIBUTING.md +198 -0
- package/LICENSE +21 -0
- package/README.md +61 -8
- package/bin/fh-goal.js +9 -0
- package/bin/fh-run.js +9 -0
- package/docs/codex-compat.md +123 -0
- package/docs/pillars.svg +70 -0
- package/knowledge/shared/harness-core/fh_integration_contract.md +45 -28
- package/package.json +30 -6
- package/plugins/fh-commons/README.md +37 -0
- package/plugins/fh-commons/agents/quench-challenger.md +373 -0
- package/plugins/fh-commons/skills/convergence-loop/SKILL.md +155 -0
- package/plugins/fh-commons/skills/deliberation/SKILL.md +288 -0
- package/plugins/fh-commons/skills/mcp-circuit-breaker/SKILL.md +196 -0
- package/plugins/fh-commons/skills/token-budget-gate/SKILL.md +175 -0
- package/plugins/fh-meta/agents/fact-checker.md +121 -0
- package/plugins/fh-meta/agents/hub-persona-auditor.md +109 -0
- package/plugins/fh-meta/agents/persona-innovator.md +195 -0
- package/plugins/fh-meta/skills/agent-composer/SKILL.md +461 -0
- package/plugins/fh-meta/skills/agent-composer/SKILL_detail.md +464 -0
- package/plugins/fh-meta/skills/apex-review/SKILL.md +185 -0
- package/plugins/fh-meta/skills/asset-placement-gate/SKILL.md +135 -0
- package/plugins/fh-meta/skills/contention-layer/SKILL.md +127 -0
- package/plugins/fh-meta/skills/context-bridge-dispatch/SKILL.md +30 -0
- package/plugins/fh-meta/skills/context-bridge-dispatch/SKILL_detail.md +144 -0
- package/plugins/fh-meta/skills/context-doctor/SKILL.md +341 -0
- package/plugins/fh-meta/skills/cross-ecosystem-synergy-detection/SKILL.md +202 -0
- package/plugins/fh-meta/skills/deep-clarify/SKILL.md +144 -0
- package/plugins/fh-meta/skills/edit-manifest/SKILL.md +210 -0
- package/plugins/fh-meta/skills/field-harvest/SKILL.md +384 -0
- package/plugins/fh-meta/skills/frontier-digest/SKILL.md +272 -0
- package/plugins/fh-meta/skills/goal-quench/SKILL.md +509 -0
- package/plugins/fh-meta/skills/harness-doctor/SKILL.md +277 -0
- package/plugins/fh-meta/skills/harness-doctor/SKILL_detail.md +484 -0
- package/plugins/fh-meta/skills/harvest-loop/SKILL.md +231 -0
- package/plugins/fh-meta/skills/harvest-loop/SKILL_detail.md +201 -0
- package/plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL.md +129 -0
- package/plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL_detail.md +158 -0
- package/plugins/fh-meta/skills/install-doctor/SKILL.md +207 -0
- package/plugins/fh-meta/skills/install-wizard/SKILL.md +613 -0
- package/plugins/fh-meta/skills/marketplace-gate/SKILL.md +193 -0
- package/plugins/fh-meta/skills/memory-hygiene/SKILL.md +143 -0
- package/plugins/fh-meta/skills/meta-prompt-builder/SKILL.md +167 -0
- package/plugins/fh-meta/skills/meta-prompt-builder/SKILL_detail.md +37 -0
- package/plugins/fh-meta/skills/pipeline-conductor/SKILL.md +430 -0
- package/plugins/fh-meta/skills/plugin-recommender/SKILL.md +221 -0
- package/plugins/fh-meta/skills/plugin-recommender/SKILL_detail.md +220 -0
- package/plugins/fh-meta/skills/prompt-regression/SKILL.md +178 -0
- package/plugins/fh-meta/skills/public-surface-audit/SKILL.md +224 -0
- package/plugins/fh-meta/skills/return-path-gate/SKILL.md +257 -0
- package/plugins/fh-meta/skills/self-marketing-lint/SKILL.md +129 -0
- package/plugins/fh-meta/skills/sim-conductor/SKILL.md +364 -0
- package/plugins/fh-meta/skills/sim-conductor/SKILL_detail.md +337 -0
- package/plugins/fh-meta/skills/skill-splitter/SKILL.md +126 -0
- package/plugins/fh-meta/skills/skill-splitter/SKILL_detail.md +185 -0
- package/plugins/fh-meta/skills/source-grounding-audit/SKILL.md +230 -0
- package/plugins/fh-meta/skills/source-grounding-audit/SKILL_detail.md +182 -0
- package/plugins/fh-meta/skills/steel-quench/SKILL.md +226 -0
- package/plugins/fh-meta/skills/steel-quench/SKILL_detail.md +453 -0
- package/plugins/fh-meta/skills/verify-bidirectional/SKILL.md +238 -0
- package/scripts/fh-gate.sh +175 -40
- package/scripts/fh-goal.sh +182 -0
- package/scripts/fh-run.sh +269 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# forge-harness — Persistent Knowledge Hub
|
|
2
|
+
|
|
3
|
+
> **This file is the operational ruleset for AI (Claude Code).** For human-facing guidance, see `README.md`. For command reference, see `CHEATSHEET.md`.
|
|
4
|
+
>
|
|
5
|
+
```
|
|
6
|
+
forge-harness/
|
|
7
|
+
├── knowledge/ # Pure knowledge — timeless, for reference
|
|
8
|
+
│ ├── domain/ # Domain-specific knowledge
|
|
9
|
+
│ └── shared/ # Cross-project patterns
|
|
10
|
+
├── tracks/ # Project work history — accumulated over time
|
|
11
|
+
│ └── {project}/ # Per-project directory
|
|
12
|
+
├── CATALOG.md # Global search index
|
|
13
|
+
└── CLAUDE.md # This file (Sync/Push protocol)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
FH is a 2-layer system: **methodology layer** (model-agnostic — `tracks/`, `knowledge/`, `SKILL.md` docs) + **automation layer** (Claude-native — agents, hooks, slash commands). The methodology layer is designated Codex-compatible beta.
|
|
17
|
+
|
|
18
|
+
Running Claude Code in this project activates **Control Tower** mode.
|
|
19
|
+
|
|
20
|
+
## Identity — 3-Layer Mission + Core Axis
|
|
21
|
+
|
|
22
|
+
The forge-harness hub is not just a repository — it is the **command center for all Claude Code-connected projects in your local environment**.
|
|
23
|
+
|
|
24
|
+
| Layer | Role | Representative Assets |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| **① Control Tower** | Coordinates all connected projects and **drives harness-ification across them** — decides *which* projects to harness and *when*, propagates harness assets to each, and feeds their synced learnings into the hub's compounding loop. The *how* (rules · gates · 6-axis) is executed via the Core Axis. Command HQ, not a passive registry. | `.claude/rules/auto_project_mapping.md` (mapping + **Full-Harness Mode**) · `harvest-loop` (compounding loop) · `templates/` (project-harness bundle) · `CATALOG.md` |
|
|
27
|
+
| **② Frontier → Org Propagation** | Proactively applies global AI/harness frontier thinking and **translates it for your organization**. | `knowledge/shared/harness-core/harness_frontier_diagnosis_*.md` · `knowledge/{your-org}/` |
|
|
28
|
+
| **③ AI Collaboration Guide** | Accumulates and distributes best practices for token efficiency and dialogue methodology — "how to ask, delegate, and record". | `CHEATSHEET.md` · `knowledge/shared/dialogue/ai_dialogue_playbook.md` · `MEMORY.md` keyword-triggered loading |
|
|
29
|
+
| **Core Axis** | **Harness Engineering (How)** — the methodology and practice axis that realizes the three layers above. The 6-axis framework is the operating unit. **A harness is a means, not an end** — Field harness: "simpler over time" (complexity = warning signal). Meta-harness: *optimize*, not necessarily simplify — complexity earns its scope; red flags are orphaned, redundant, and decorative units, not complexity itself. | `harness_6axis_framework.md` · `hub_compounding_loop.md` · `claude_code_runtime_flow.md` · `.claude/agents/` (sub-agents) |
|
|
30
|
+
|
|
31
|
+
## Core Reference Documents (Consult First)
|
|
32
|
+
|
|
33
|
+
Four foundational assets for hub operations. **Mandatory pre-reference** before new design, protocol proposals, or framework extensions.
|
|
34
|
+
|
|
35
|
+
| Document | Nature | Role |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `knowledge/shared/harness-core/harness_6axis_framework.md` | Top-level meta-framework | 6-axis (structure/context/plan/execute/verify/improve) decision tree |
|
|
38
|
+
| `knowledge/shared/harness-core/hub_compounding_loop.md` | Feedback automation | Weekly/monthly/quarterly cycles. Axis-6 Compounding automation |
|
|
39
|
+
| `knowledge/shared/dialogue/ai_dialogue_playbook.md` | Dialogue principles (should) | Session start, token efficiency, rule hierarchy, amplifier/coach dual mode |
|
|
40
|
+
| `knowledge/shared/dialogue/claude_code_runtime_flow.md` | Runtime behavior (does) | Chronological flow during a session · sub-agent delegation flowchart |
|
|
41
|
+
|
|
42
|
+
## New Project Onboarding
|
|
43
|
+
|
|
44
|
+
> Detailed procedure: `.claude/rules/auto_project_mapping.md` (5-step mapping + §6 Full-Harness Mode)
|
|
45
|
+
|
|
46
|
+
1. `mkdir tracks/{project_name}/` — track name = project root name
|
|
47
|
+
2. Hub common principles outrank project rules (scope hierarchy)
|
|
48
|
+
3. Reference `ai_dialogue_playbook.md` + `claude_code_runtime_flow.md` at top of project CLAUDE.md (Layer ③)
|
|
49
|
+
|
|
50
|
+
**Light vs full**: steps 1–3 register lightly. For project-local harness assets (session rules + context filter + env card), run **Full-Harness Mode** (`auto_project_mapping.md §6`) — approval-gated, never overwrites. FH self-gate is **not** installed into projects.
|
|
51
|
+
|
|
52
|
+
## Harness Drift Prevention Principles
|
|
53
|
+
|
|
54
|
+
The forge-harness hub has a dual identity: **(a) a seed for others** + **(b) your own active work harness**. This is why clearly separating "team assets" from "personal assets" is essential to prevent drift.
|
|
55
|
+
|
|
56
|
+
| Location | Nature | Update Responsibility |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| `forge-harness/templates/.claude/rules/*.md` · `forge-harness/knowledge/shared/*` | **Developer's own philosophy + front-end filters** — universal principles, personal assets | Owner (hub session sync) |
|
|
59
|
+
| `{project}/.claude/rules/*.md` (e.g., project-specific guides) | **Team shared rules** — team assets, domain-specific | Team (managed via PR) |
|
|
60
|
+
| `{project}/{domain}/.claude/rules/session.md` (e.g., domain session rules) | **Domain session rules** — team shared, per-domain | Team (managed via PR) |
|
|
61
|
+
|
|
62
|
+
### PR Direction (One-Way)
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
✓ Allowed: Improvement discovered while working in forge-harness → PR to {project} rules
|
|
66
|
+
(Personal improvement → officialized as team asset)
|
|
67
|
+
|
|
68
|
+
✗ Forbidden: Copying {project} rules into forge-harness
|
|
69
|
+
(Team asset drift · single source of truth collapse · double maintenance burden)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### AI Contribution Model (PR Proposal Principle)
|
|
73
|
+
|
|
74
|
+
**Principle (`feedback_no_personal_commit_to_shared_repo`): AI does not commit directly to shared repositories.**
|
|
75
|
+
|
|
76
|
+
- **Interpretation:** AI is not allowed to independently commit and push code. However, **AI may propose a Pull Request by preparing all change drafts and requesting final approval from the human (user)**.
|
|
77
|
+
- **Implementation:** Skills such as `harvest-loop` follow this principle — they generate skill drafts, prepare commits automatically, and propose PR creation. However, the final decision to submit a PR must always require the user's explicit approval (`y`). This ensures Human-in-the-loop while maximizing AI contribution.
|
|
78
|
+
|
|
79
|
+
**PR Creation Principle:**
|
|
80
|
+
- AI may commit and push automatically (when changes are approved)
|
|
81
|
+
- **PR creation requires explicit user request** ("create PR", "PR 올려줘", "pull request")
|
|
82
|
+
- **Reason:** Prevents PR fragmentation — logical units should be grouped into meaningful PRs, not atomized per commit
|
|
83
|
+
- Default workflow: commit → push → wait for explicit PR request
|
|
84
|
+
|
|
85
|
+
## Permission-Denial Guidance (When Auto-Mode Blocks an Action)
|
|
86
|
+
|
|
87
|
+
When blocked by auto-mode permission denial, **do not stop at the bare denial** — turn the block into a decision the user can act on in one step:
|
|
88
|
+
|
|
89
|
+
1. **State what was blocked** and why
|
|
90
|
+
2. **Option A — Approval mode**: show exact commands to run after switching; **Option B — Manual review**: list specific files/sections
|
|
91
|
+
3. **Ask which option** — one line, then wait
|
|
92
|
+
|
|
93
|
+
**Sub-agent variant**: report (what was blocked + ready-to-apply content + exact unblock step) back to orchestrator — never silently fail. Switching modes lifts permission block, not FH gates — the 4-axis gate still applies.
|
|
94
|
+
|
|
95
|
+
Simplification guard: trivial denials with one obvious fix → state block + single next step inline.
|
|
96
|
+
|
|
97
|
+
## Active Onboarding Protocol (User Greeting → AI Initiative)
|
|
98
|
+
|
|
99
|
+
> **Full 4-step detail**: `knowledge/shared/harness-core/fh_detail_protocols.md`
|
|
100
|
+
> **Read this file before Step 1 begins** — duplicate-install detection (Step 1-b) and registry scan (Step 1-c) are only defined there, not in this summary.
|
|
101
|
+
|
|
102
|
+
**Triggers**: greetings (`hi`/`hello`/`hey`) · start intent (`resume`, `continue`, `where were we`) · new task (`new project`, `new task`) · discovery (`what is this`, `what can you do`, `first time here`)
|
|
103
|
+
|
|
104
|
+
**4-step summary**: ① Auto-read CLAUDE.md + CATALOG + session card + registry scan → ② One-line proposal (new user / exploratory / returning branches) → ③ 5-skill cascade (plugin-recommender → synergy → .claudeignore → model → verify) → ④ Approval + setup
|
|
105
|
+
|
|
106
|
+
**Identity marker**: every greeting response (Step ②) opens with 🐿️ on its own line. FH's session-start signal — see `fh_detail_protocols.md` Step 2 for full greeting templates.
|
|
107
|
+
|
|
108
|
+
**Guards**: explicit task-entry utterance → skip onboarding · once per session · code/debug requests → start working directly · project routing is a suggestion, mention at most once
|
|
109
|
+
|
|
110
|
+
## New Skill Creation Pre-Commit Gate
|
|
111
|
+
|
|
112
|
+
All 5 items below must pass before committing a new SKILL.md. If any fails, fix and re-commit.
|
|
113
|
+
|
|
114
|
+
| Item | Criterion |
|
|
115
|
+
|---|---|
|
|
116
|
+
| **Role duplication check** | Pass `/asset-placement-gate` — no overlap with existing role clusters |
|
|
117
|
+
| **Description diet** | Plain text / 0 self-marketing expressions / 0 emphasis words (⭐, "critical", "groundbreaking") |
|
|
118
|
+
| **Done When defined** | At least 1 explicit completion condition |
|
|
119
|
+
| **Natural language triggers** | At least 3 examples that work without internal vocabulary |
|
|
120
|
+
| **Independently executable** | Confirmed to work without other FH skills (or dependencies are explicitly documented) |
|
|
121
|
+
|
|
122
|
+
Skills without a Done When definition automatically qualify as harness-doctor L2 M-tier.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## FH Improvement 4-Axis Auto-Gate (Self-Verification Orchestrator)
|
|
127
|
+
|
|
128
|
+
**Whenever the AI modifies FH assets** (SKILL.md · `.claude/rules/*.md` · `templates/` · `CLAUDE.md` · substantive `knowledge/` docs · substantive `docs/*.md` · `AGENTS.md` — see Substantive carve-out below),
|
|
129
|
+
the 4-axis verification chain runs **automatically before the first commit** of that session.
|
|
130
|
+
No user request is needed — this is a mandatory autonomous step, not a proposal.
|
|
131
|
+
|
|
132
|
+
**Commit gate**: `git commit` on FH asset changes is hard-blocked by `templates/.git-hooks/pre-commit` until all required axes PASS. Hook installation (one-time): `git config core.hooksPath templates/.git-hooks && chmod +x templates/.git-hooks/pre-commit`
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
FH asset modified → Axis 1 (regression_guard.sh --pr {BRANCH})
|
|
136
|
+
→ Axis 2 (/steel-quench) → Axis 3 (/source-grounding-audit)
|
|
137
|
+
→ marker: tracks/_meta/.axes_23_passed_{branch}_{date}.marker
|
|
138
|
+
→ Axis 4 (/edit-manifest RECORD, today's entry in edit_manifest.yaml)
|
|
139
|
+
→ All 4 PASS → git commit allowed | Any FAIL → fix inline, re-run
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Why automatic**: Each axis catches a different defect class; asking separately means slip-through. **Why hook**: CLAUDE.md rules are advisory — the hook physically blocks commit until marker + manifest exist. **Scope**: active from the moment any FH file is modified in the session.
|
|
143
|
+
|
|
144
|
+
**Lightweight exception** (Axis 1 + 4 only, skip Axes 2–3): Sessions where **zero SKILL.md / rules / templates files changed** (e.g., CATALOG.md entry, tracks/ update). The hook detects this automatically — no Axes 2+3 marker required for light-only commits. Judgment is file-based, not subjective.
|
|
145
|
+
|
|
146
|
+
**Substantive carve-out — `knowledge/` · `docs/*.md` · `AGENTS.md`** (Axes 2–3 DO run, despite these not being SKILL/rules/templates): a change to any of these is **not** light if its diff adds a fenced code block (```` ``` ````) or a citation/version claim (`arXiv:` / `DOI` / `http` / a versioned dependency like `x.y.z`). Executable patterns and factual claims need phantom-detection + adversarial review *wherever they live* — `knowledge/` Implementation-Patterns sections carry runnable commands, `docs/` holds published guides, and `AGENTS.md` is the Codex-user entry point, so a phantom skill name or wrong version there is an external-facing error the gate must catch. Prose-only edits (typos, rewording, link fixes) stay light. Detection is mechanical: `git diff` adds a ```` ``` ```` fence or a citation token → run Axes 2–3.
|
|
147
|
+
|
|
148
|
+
**Unavailable axis**: If steel-quench or source-grounding-audit are not installed, note `Axis N: skipped (skill unavailable)` and proceed. Axis 1 PASS alone is sufficient to unblock a PR when Axes 2–3 are unavailable. Axis 4 (edit-manifest): if the skill is not installed, substitute a manual one-line prediction appended to `tracks/_meta/edit_manifest.yaml` — the record is what matters, not the skill.
|
|
149
|
+
|
|
150
|
+
**Axis ownership** (each skill is already complete — orchestrator only coordinates):
|
|
151
|
+
|
|
152
|
+
| Axis | Skill | What it catches |
|
|
153
|
+
|---|---|---|
|
|
154
|
+
| Backward | `regression_guard.sh` | Critical section loss, broken refs, syntax errors, line reduction |
|
|
155
|
+
| Adversarial | `steel-quench` | Trigger phrase collisions, design attack surface, over-engineered steps |
|
|
156
|
+
| Forward | `source-grounding-audit` | Phantom references, paths that don't exist, stale external links |
|
|
157
|
+
| Record | `edit-manifest` RECORD | Logs predicted impact — closes the predict-verify loop for future harvest-loop |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Autonomous Initiative Layer — Context-Triggered Skill Proposals (Active Throughout Session)
|
|
162
|
+
|
|
163
|
+
At any point during a session, when the following signals are detected, propose the relevant skill in one line.
|
|
164
|
+
Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?"`
|
|
165
|
+
|
|
166
|
+
| Conversation Signal Keywords | Proposed Skill |
|
|
167
|
+
|---|---|
|
|
168
|
+
| "plugin", "what tool should I use", "install", "recommend" (tool exploration) | `/plugin-recommender` |
|
|
169
|
+
| "context is getting long", "token limit", "/clear", "slow", "context" (burden) | `/context-doctor` |
|
|
170
|
+
| "wrap up this week", "review", "audit", "weekly", "retrospective" | `/harvest-loop` |
|
|
171
|
+
| "pull this into FH", "reverse-harvest", "worth keeping", "harvest pattern", "field pattern" | `/field-harvest` |
|
|
172
|
+
| "harness is complex", "too many skills", "check structure", "harness" | `/harness-doctor` |
|
|
173
|
+
| "review this PR", "check diff", "code review" | `/hub-cc-pr-reviewer` |
|
|
174
|
+
| "are these in sync", "synergy", "can these integrate", "any overlap" | `/cross-ecosystem-synergy-detection` |
|
|
175
|
+
| "latest trends", "frontier", "external resources" | `/frontier-digest` |
|
|
176
|
+
| "orchestrate agents", "parallel dispatch", "combine skills", "multiple agents" | `/agent-composer` |
|
|
177
|
+
| "run a simulation", "external user perspective", "internal audit", "quality check" | `/sim-conductor` |
|
|
178
|
+
| "first install", "FH setup", "wizard", "install-wizard" | `/install-wizard` |
|
|
179
|
+
| "connect a project", "map this project", "link to hub" | `auto_project_mapping.md` (mapping) |
|
|
180
|
+
| "harness-ify this project", "full harness setup", "프로젝트 하네스화", "promote to full harness" | `auto_project_mapping.md §6` (Full-Harness Mode) |
|
|
181
|
+
| "check install", "verify setup", "confirm install", "install-doctor" | `/install-doctor` |
|
|
182
|
+
| "where does this go", "asset location", "hub vs project", "placement" | `/asset-placement-gate` |
|
|
183
|
+
| "add to marketplace", "OK to publish", "pre-publish check" | `/marketplace-gate` |
|
|
184
|
+
| "did I leak anything", "public surface audit", "private token scan", "is my split clean", "check tracked files for private tokens" | `/public-surface-audit` |
|
|
185
|
+
| "look at this again", "is this right", "counterargument", "re-validate" | `/verify-bidirectional` |
|
|
186
|
+
| "MCP failing", "tool keeps erroring", "circuit-breaker", "same error looping" | `/mcp-circuit-breaker` |
|
|
187
|
+
| "token budget", "how expensive", "estimate tokens", "will this cost a lot" | `/token-budget-gate` |
|
|
188
|
+
| "did my rule change break anything", "regression check", "test harness changes" | `/prompt-regression` |
|
|
189
|
+
| "SKILL.md too large", "split this skill", "skill is bloated", "skill file too long" | `/skill-splitter` |
|
|
190
|
+
| "review for the team", "CTO review", "decision-maker", "share with leadership", "approval deck" | `/apex-review` |
|
|
191
|
+
| "run full pipeline", "verify everything", "end-to-end sweep", "chain all verifications" | `/pipeline-conductor` |
|
|
192
|
+
| "help me write a prompt", "build a prompt", "improve this prompt", "prompt template" | `/meta-prompt-builder` |
|
|
193
|
+
| "memory feels bloated", "clean up memory", "memory too large", "memory hygiene" | `/memory-hygiene` |
|
|
194
|
+
| "ready to PR", "about to push", "merge this", "PR 올려줘", FH asset changed in session | 4-axis auto-gate (see above — runs automatically, no proposal needed) |
|
|
195
|
+
|
|
196
|
+
**Guard**: Do not propose a skill that is already running. One signal = one-line proposal (no pressure).
|
|
197
|
+
For per-skill utterance patterns, see the relevant `SKILL.md §Trigger Phrases` section.
|
|
198
|
+
|
|
199
|
+
### Cadence Rules — Check at Session Start
|
|
200
|
+
|
|
201
|
+
At session start, determine the last run time from history files and auto-propose if overdue:
|
|
202
|
+
|
|
203
|
+
| Skill | History File Pattern | Cadence |
|
|
204
|
+
|---|---|---|
|
|
205
|
+
| `/frontier-digest` | `tracks/_meta/frontier_digest_*.md` | Propose at session start if 7+ days since last run |
|
|
206
|
+
| `/harness-doctor` | `tracks/_meta/*harness_doctor*.md` | Propose at session start if 30+ days since last run |
|
|
207
|
+
|
|
208
|
+
## Agent Dispatch Operation (FH cwd-Based)
|
|
209
|
+
|
|
210
|
+
Default operation is a **standard interactive session**. Agent dispatch (single or parallel) is used when the task warrants it — not as a default mode. Three execution paths:
|
|
211
|
+
|
|
212
|
+
| Path | Situation | Method |
|
|
213
|
+
|---|---|---|
|
|
214
|
+
| **Direct edit** | Simple modification of mapped project files | Read/Edit with absolute path (no cwd switch needed) |
|
|
215
|
+
| **Agent dispatch** | Field project work · single independent task | Inject Context Card then dispatch Agent |
|
|
216
|
+
| **Parallel dispatch** | 2+ genuinely independent tasks, explicitly requested | Dispatch parallel Agents |
|
|
217
|
+
|
|
218
|
+
**Why not Agent View by default**: Agent View introduces worktree isolation (blocks settings.json writes, Stop hook timing differs), session context gaps (session card stale content bug), and path friction — with no benefit unless the user is actively managing multiple agent sessions. Parallel agents via `Agent` tool work identically in a standard session.
|
|
219
|
+
|
|
220
|
+
**Forbidden responses**: *"I can't do that — I'm not in that project's cwd"* — self-check Agent dispatch first.
|
|
221
|
+
|
|
222
|
+
Mapped paths: check `auto_project_mapping.md` or `find ~/projects -maxdepth 1 -type d` for actuals.
|
|
223
|
+
|
|
224
|
+
### Context Card — Required Format for Dispatch
|
|
225
|
+
```
|
|
226
|
+
[Session Context Card]
|
|
227
|
+
Purpose: {task/session purpose} | Completed: {what's already done}
|
|
228
|
+
This agent's task: {specific task + target files/paths} | Note: {constraints/history}
|
|
229
|
+
```
|
|
230
|
+
Simple file-lookup agents may omit. Agent dispatch works from any mapped project cwd — for FH skills, specify `~/projects/forge-harness/` explicitly.
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Cross-Project Skill Bus (Active Throughout Session)
|
|
235
|
+
|
|
236
|
+
Based on LOCAL_SKILL_REGISTRY (Step 1-c), **propose and connect skills from other projects directly**. Proposal: *"{Project} has `{skill-name}`. Want me to dispatch it via Agent?"*
|
|
237
|
+
|
|
238
|
+
- **Direct execution** (no project files needed): Read SKILL.md → execute steps directly
|
|
239
|
+
- **Agent dispatch** (project files needed): dispatch via Agent tool + Context Card, absolute path, no cwd switch; 2+ independent tasks → parallel dispatch
|
|
240
|
+
|
|
241
|
+
**Guard**: FH native skill takes priority over cross-project proposal for the same signal.
|
|
242
|
+
|
|
243
|
+
## FH Improvement Signal Recording Protocol
|
|
244
|
+
|
|
245
|
+
> **Full format + template**: `knowledge/shared/harness-core/fh_detail_protocols.md` — read when creating a signal file.
|
|
246
|
+
|
|
247
|
+
**Triggers**: user confusion/retries · user proposes improvement · AI self-detects skill/rule limitation · new FH-worthy pattern discovered
|
|
248
|
+
|
|
249
|
+
**Method**: create `tracks/_meta/fh_signal_{YYYY-MM-DD}_{source}.md` (1 file/session, append if same date+source). Structural candidates only — exclude typos and in-session-resolved issues.
|
|
250
|
+
|
|
251
|
+
## Execution Tier Settings
|
|
252
|
+
|
|
253
|
+
> **Full tier table + config**: `knowledge/shared/harness-core/fh_detail_protocols.md` — read when selecting a non-default tier.
|
|
254
|
+
|
|
255
|
+
**Default: standard (~15K tokens).** Temporary change: say "use light mode" or "switch to max" in session.
|
|
256
|
+
Tiers: S=light(~5K) · M=standard(~15K, FH default) · L=full(~30K) · XL=max(~60K+)
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Operational Status
|
|
261
|
+
|
|
262
|
+
**Current: Beta → External Validation Achieved** — v1.0 formal release conditions: additional external install evidence + at least 1 external PR.
|
|
263
|
+
|
|
264
|
+
> Usage modes (A/B/C) + differentiated value (Layer 1/2) details: `.claude/rules/modes_and_value.md`
|
|
265
|
+
|
|
266
|
+
## Auto Project Mapping Protocol
|
|
267
|
+
|
|
268
|
+
> Detailed procedure: `.claude/rules/auto_project_mapping.md` (5-step mapping + §6 Full-Harness Mode)
|
|
269
|
+
|
|
270
|
+
When the user requests **"connect a project"** · **"link to hub"** · **"map this project"** · **"scan parent directory and connect"**, follow the `auto_project_mapping.md` protocol. When they request **"harness-ify this project"** · **"full harness setup"** · **"프로젝트 하네스화"** (or accept the post-mapping promotion prompt), run **§6 Full-Harness Mode** — installs project-local harness assets (session rules · context filter · env card) from `templates/`, approval-gated and non-overwriting. (The FH self-gate is FH-internal and is not installed into projects.)
|
|
271
|
+
|
|
272
|
+
## Searching Past Work
|
|
273
|
+
|
|
274
|
+
When searching for past work, **read CATALOG.md first**. Use tags and summaries to identify candidate files, then open only those files for detail.
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
1. Read CATALOG.md → identify candidate files by tag/date
|
|
278
|
+
2. Open candidate files directly → review details
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Do not scan session files one by one sequentially.
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
## Session Wrap-up — Card Update Protocol
|
|
285
|
+
|
|
286
|
+
**Real-time completion tracking (card bug prevention)**: When any S-tier/A-tier/backlog item is completed during a session, **immediately** (before context compression) append to `tracks/_meta/fh_completed_{YYYY-MM-DD}.md`.
|
|
287
|
+
Format: `- ✅ {item title} — {one-line completion method}`
|
|
288
|
+
harvest-loop Step 0-b uses this file as its source — relying on LLM memory after compression causes omissions.
|
|
289
|
+
|
|
290
|
+
**Session close chaining (automatic sequence — not skippable)**:
|
|
291
|
+
```
|
|
292
|
+
Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
|
|
293
|
+
→ ① Check git diff + unpushed commits (status snapshot)
|
|
294
|
+
→ ② If FH assets changed: harvest-loop
|
|
295
|
+
→ ③ Sync local/gitignored session state to your durable companion store, if you keep one
|
|
296
|
+
→ ④ Memory hygiene — update stale entries + record new session findings
|
|
297
|
+
→ ⑤ Card update ← ABSOLUTE LAST: must capture ①–④ outcomes
|
|
298
|
+
→ ⑥ Commit card + push
|
|
299
|
+
```
|
|
300
|
+
**Card-last guard**: ①–④ must ALL complete before ⑤ runs. Any new information produced
|
|
301
|
+
during ①–④ (new commits, model changes, new findings) feeds INTO ⑤ — card is never
|
|
302
|
+
written mid-sequence and then left open for more work to accumulate after it.
|
|
303
|
+
|
|
304
|
+
**Mid-session card writes are drafts**: If a task (e.g., a calibration run) internally updates
|
|
305
|
+
the card, that is a draft. The close chain always re-runs ⑤ to capture post-draft activities.
|
|
306
|
+
Never skip ⑤ because "the card was just updated" — check for delta first.
|
|
307
|
+
|
|
308
|
+
Card update is NOT a sub-step of harvest-loop — even if harvest-loop is skipped, card update must run.
|
|
309
|
+
|
|
310
|
+
**Agent View pre-read (mandatory when session ran in Agent View / worktree / background job)**: Before writing the card, read your companion store's handoff files (if you keep one) to recover sub-agent completions that may not be in main session context. Skipping this step in Agent View is the root cause of "card created with stale content" bugs — the main context does not automatically see worktree-completed items.
|
|
311
|
+
|
|
312
|
+
**Card update obligation** (independent obligation — regardless of harvest-loop completion): Update `reference_next_session_starter.md`.
|
|
313
|
+
① **Agent View pre-read** (see above) → ② Step 0-b cross-check generates removal list → ③ Remove completed items → ④ Add new priorities → ⑤ Fix stale paths/versions → ⑥ Overwrite → ⑦ Output "BEFORE N items → AFTER M items" diff.
|
|
314
|
+
"Delta update" not "snapshot" — completed items remaining in next session card is a bug.
|
|
315
|
+
|
|
316
|
+
## Session Sync / Knowledge Push Protocol
|
|
317
|
+
|
|
318
|
+
> Detailed procedure: `.claude/rules/sync_push_protocols.md`
|
|
319
|
+
|
|
320
|
+
When the user requests "sync", "save session", etc., follow the `sync_push_protocols.md` protocol. CATALOG.md format, tag conventions, and track mapping are also referenced in that file.
|
|
321
|
+
|
|
322
|
+
## Sister Asset Protocol
|
|
323
|
+
|
|
324
|
+
> Detailed procedure (3 steps · restrictions · branch sync): `.claude/rules/sister_asset_protocol.md`
|
|
325
|
+
|
|
326
|
+
When a sibling asset on the same topic is discovered (internal team or external frontier), follow `sister_asset_protocol.md`. Keep the detection threshold low — the goal is to close awareness gaps.
|
|
327
|
+
|
|
328
|
+
## Operations Reference
|
|
329
|
+
|
|
330
|
+
> CATALOG.md format · tag conventions: `.claude/rules/sync_push_protocols.md`
|
|
331
|
+
> Sub-agent operations · weekly improvement cycle · maturity 3-phase roadmap: `.claude/rules/operations.md`
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# forge-harness Contribution Guide
|
|
2
|
+
|
|
3
|
+
If you'd like to make forge-harness better, pull requests are welcome.
|
|
4
|
+
|
|
5
|
+
## What You Can Contribute
|
|
6
|
+
|
|
7
|
+
| Type | Example |
|
|
8
|
+
|---|---|
|
|
9
|
+
| **New skill** | You've discovered a repeating pattern and want to turn it into a skill |
|
|
10
|
+
| **Improve existing skill** | Bug fix, external environment adaptation, adding triggers |
|
|
11
|
+
| **Add agent** | New persona (`.claude/agents/` or `plugins/.../agents/`) |
|
|
12
|
+
| **Templates** | Common files to add under `templates/` |
|
|
13
|
+
| **Documentation** | README, skill description refinement, typo fixes |
|
|
14
|
+
| **Field pattern harvest** | Proposing a pattern discovered in real use as a skill (see `/field-harvest`) |
|
|
15
|
+
|
|
16
|
+
## Choosing a Contribution Path — Check First
|
|
17
|
+
|
|
18
|
+
| Contribution Type | Path | Overhead |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| Typo fix, 1–3 line improvement, trigger addition | **Lightweight path** — PR rules 1–4 only | Minimal |
|
|
21
|
+
| Add step to existing skill, expand section | **Lightweight path** — PR rules 1–5 | Light |
|
|
22
|
+
| Create new skill or agent | **Full path** — PR rules 1–8 + rc bump checklist | Full |
|
|
23
|
+
| Plugin Level version bump | **Full path** + 3-piece set | Full |
|
|
24
|
+
|
|
25
|
+
> **Adding a new skill = Full path required**. Improving an existing skill = Lightweight path available.
|
|
26
|
+
|
|
27
|
+
## PR Rules (Short Version)
|
|
28
|
+
|
|
29
|
+
1. **New skill** → Create `plugins/fh-meta/skills/{name}/SKILL.md` + add version line to `plugins/fh-meta/CHANGELOG.md`
|
|
30
|
+
2. **New agent** → Register in both `.claude/agents/{name}.md` + `plugins/fh-meta/agents/{name}.md`
|
|
31
|
+
3. **Description must be plain text** — no markdown bold, emphasis words, version mentions, or embedded names (removes self-marketing tone)
|
|
32
|
+
4. **Simplification guard** — verify that existing assets cannot cover the use case before creating something new
|
|
33
|
+
5. **External environment adaptation section** — recommend explicitly noting `Mode A/C` branches in skills and agents
|
|
34
|
+
6. **Plugin version bump 3-piece set** — when bumping Plugin Level version, always update all three simultaneously:
|
|
35
|
+
- Add `[vX.Y.Z]` entry to `CHANGELOG.md` Plugin Level section
|
|
36
|
+
- Sync the `version` field in `plugins/fh-meta/.claude-plugin/plugin.json`
|
|
37
|
+
- Create and push tag with `git tag -a vX.Y.Z -m "..."`
|
|
38
|
+
7. **Run fact-checker before version bump** — use `/fact-checker` to verify 3-way consistency of plugin.json version/skill count, CHANGELOG, README, and SKILL.md files. 0 FAIL items is a prerequisite for any version bump.
|
|
39
|
+
8. **Version policy**: `v0.x` = internal validation phase / `v1.0` = external install validation complete. Claiming v1.0 without external usage evidence is prohibited.
|
|
40
|
+
- **v1.0 validation criteria**: A user other than the owner must ① clone + install FH → ② trigger a skill using natural language → ③ confirm successful completion. Minimum 1 person. Record tester, date, and environment in the PR body.
|
|
41
|
+
|
|
42
|
+
## rc Bump Pre-Requisite Checklist
|
|
43
|
+
|
|
44
|
+
Before any version bump (rc or official release), pass the checklist below **in order**.
|
|
45
|
+
If any item FAILs, **rc bump is blocked** — fix and re-validate.
|
|
46
|
+
|
|
47
|
+
### 1. Run fact-checker — confirm 0 stale numbers
|
|
48
|
+
|
|
49
|
+
Run `/fact-checker` skill for 3-way consistency check:
|
|
50
|
+
|
|
51
|
+
| Validation Target | Check Items |
|
|
52
|
+
|---|---|
|
|
53
|
+
| `plugins/fh-meta/.claude-plugin/plugin.json` | `version` field, `skills` count |
|
|
54
|
+
| `plugins/fh-meta/marketplace.json` | version and skill count in sync |
|
|
55
|
+
| `README.md` (root + plugin) | Stale skill counts or version numbers |
|
|
56
|
+
|
|
57
|
+
**Pass criterion**: 0 stale items. Even 1 FAIL blocks the rc bump.
|
|
58
|
+
|
|
59
|
+
### 2. Pass marketplace-gate skill
|
|
60
|
+
|
|
61
|
+
Run `/marketplace-gate` → All Checks 1–5 must PASS:
|
|
62
|
+
|
|
63
|
+
| Check | Content |
|
|
64
|
+
|---|---|
|
|
65
|
+
| Check 1 | Skill description is plain text (no markdown bold, version mentions, embedded names) |
|
|
66
|
+
| Check 2 | SKILL.md meets minimum structure (frontmatter + triggers + simplification guard) |
|
|
67
|
+
| Check 3 | No external install conflicts (`install-doctor` result linked) |
|
|
68
|
+
| Check 4 | CHANGELOG.md version line exists |
|
|
69
|
+
| Check 5 | Version policy compliance (`v0.x` = internal validation / `v1.0` = external validation complete) |
|
|
70
|
+
|
|
71
|
+
1 or more FAILs blocks the rc bump.
|
|
72
|
+
|
|
73
|
+
### 3. CHANGELOG.md must be updated
|
|
74
|
+
|
|
75
|
+
The changes for the target bump version must be recorded in `CHANGELOG.md`.
|
|
76
|
+
|
|
77
|
+
```markdown
|
|
78
|
+
## [vX.Y.Z-rcN] - YYYY-MM-DD
|
|
79
|
+
### Added
|
|
80
|
+
- ...
|
|
81
|
+
### Fixed
|
|
82
|
+
- ...
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
rc bump without CHANGELOG update is not allowed.
|
|
86
|
+
|
|
87
|
+
### Checklist Summary
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
[ ] fact-checker — plugin.json ↔ marketplace.json ↔ README 3-way stale: 0
|
|
91
|
+
[ ] marketplace-gate — Check 1–5 FAIL: 0
|
|
92
|
+
[ ] CHANGELOG.md — entry for this version written
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Complete all three before running `git tag` and version bump.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## How to Submit a PR
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# 1. fork or create branch
|
|
103
|
+
git checkout -b feat/my-skill-name
|
|
104
|
+
|
|
105
|
+
# 2. do the work
|
|
106
|
+
# plugins/fh-meta/skills/my-skill/SKILL.md — write skill
|
|
107
|
+
# CHANGELOG.md — add version line
|
|
108
|
+
|
|
109
|
+
# 3. create PR
|
|
110
|
+
gh pr create --title "feat(my-skill): one-line description" \
|
|
111
|
+
--body "## What was added\n\n## Why it's needed\n\n## Test environment"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Minimum SKILL.md Structure
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
---
|
|
118
|
+
name: skill-name
|
|
119
|
+
description: One sentence. Plain text only.
|
|
120
|
+
user-invocable: true
|
|
121
|
+
allowed-tools: ["Read", "Bash"]
|
|
122
|
+
model: sonnet
|
|
123
|
+
version: 0.1
|
|
124
|
+
# complexity_routing (optional): only add if this sonnet skill needs conditional Opus escalation
|
|
125
|
+
# complexity_routing:
|
|
126
|
+
# base: sonnet
|
|
127
|
+
# high: opus
|
|
128
|
+
# escalate_when:
|
|
129
|
+
# - cold_start # first run with no session context
|
|
130
|
+
# - cross_project # work spanning 3+ projects
|
|
131
|
+
# - adversarial # devil/steel-quench mode active
|
|
132
|
+
# - high_stakes # pre-release or pre-publish validation
|
|
133
|
+
# - full_revalidation # full re-validation requested
|
|
134
|
+
# - destructive # irreversible operations included (push, delete, deploy, etc.)
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
# skill-name — one-line description
|
|
138
|
+
|
|
139
|
+
## Steps
|
|
140
|
+
|
|
141
|
+
### Step 1. ...
|
|
142
|
+
|
|
143
|
+
## Trigger Phrases
|
|
144
|
+
|
|
145
|
+
| Utterance Pattern | Example | Trigger Strength |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| **Direct call** | `/skill-name` | Immediate |
|
|
148
|
+
| **Natural language A** | "do X for me", "analyze X" | Immediate |
|
|
149
|
+
| **Natural language B** | "check X", "how about X" | Suggest |
|
|
150
|
+
|
|
151
|
+
**Simplification guard**: Do not re-propose if this task is already in progress.
|
|
152
|
+
|
|
153
|
+
## External User Environment Adaptation
|
|
154
|
+
|
|
155
|
+
| Environment | Behavior |
|
|
156
|
+
|---|---|
|
|
157
|
+
| forge-harness clone present | ... |
|
|
158
|
+
| Plugin only (Mode C) | ... |
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## External API Call Standard
|
|
162
|
+
|
|
163
|
+
When a skill calls an external API (your internal tool, task tracker, messaging platform, etc.), always implement 4-state separation.
|
|
164
|
+
|
|
165
|
+
### State Definitions
|
|
166
|
+
|
|
167
|
+
| State | Meaning | Handling |
|
|
168
|
+
|---|---|---|
|
|
169
|
+
| `EXECUTED` | API call succeeded + result returned | Normal completion |
|
|
170
|
+
| `SKIPPED_NO_KEY` | Auth key/token not set | Guide user on how to configure |
|
|
171
|
+
| `SKIPPED_EMPTY_INPUT` | No input provided, call unnecessary | Silent skip |
|
|
172
|
+
| `FAILED` | Call attempted but error occurred | Output error details + retry guide |
|
|
173
|
+
|
|
174
|
+
### Implementation Example (Bash-based skill)
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
API_KEY="${YOUR_API_KEY:-}"
|
|
178
|
+
if [ -z "$API_KEY" ]; then
|
|
179
|
+
echo "STATUS: SKIPPED_NO_KEY — YOUR_API_KEY not set. Configure it and retry."
|
|
180
|
+
exit 0
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
RESPONSE=$(curl -s -w "\n%{http_code}" -H "X-API-Key: $API_KEY" "$ENDPOINT")
|
|
184
|
+
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
|
|
185
|
+
BODY=$(echo "$RESPONSE" | head -1)
|
|
186
|
+
|
|
187
|
+
case $HTTP_CODE in
|
|
188
|
+
200) echo "STATUS: EXECUTED"; echo "$BODY" ;;
|
|
189
|
+
401|403) echo "STATUS: SKIPPED_NO_KEY — Key invalid. Check your credentials." ;;
|
|
190
|
+
*) echo "STATUS: FAILED — HTTP $HTTP_CODE. Network or server error." ;;
|
|
191
|
+
esac
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Principle**: Without explicit state output, users cannot tell whether a skill executed, was skipped, or failed.
|
|
195
|
+
|
|
196
|
+
## Questions
|
|
197
|
+
|
|
198
|
+
Leave a comment on the PR or open an issue.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 chrono-meta
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|