harness-everything 0.18.1 → 0.19.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-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/AGENTS.md +3 -2
- package/CHANGELOG.md +8 -0
- package/README.md +21 -14
- package/bin/cli.js +16 -0
- package/ci/invariant-routing.test.js +42 -19
- package/ci/mechanism-2af-worktree-isolation.test.js +3 -3
- package/ci/mechanism-2ag-router-worktree-contract.test.js +1 -0
- package/ci/mechanism-2an-workflow-obligations.test.js +1 -0
- package/ci/mechanism-2ao-plugin-sync.test.js +163 -0
- package/ci/mechanism-33-issues-205-207.test.js +2 -2
- package/ci/openai-plugin-package.test.js +6 -6
- package/ci/router-workflow-plan.test.js +12 -9
- package/ci/workflow-execution-contract.test.js +2 -2
- package/docs/architecture.md +15 -15
- package/docs/enforcement-locks.md +17 -15
- package/docs/philosophy.md +43 -8
- package/docs/platform-capabilities.md +22 -2
- package/docs/platform-compatibility.json +4 -4
- package/docs/routing.md +23 -16
- package/docs/troubleshooting.md +8 -0
- package/docs/workflow-runtime.md +20 -19
- package/environment-detection/SKILL.md +3 -1
- package/evals/harness-everything/tasks/positive-tier1.yaml +1 -1
- package/evals/harness-everything/tasks/positive-tier2.yaml +1 -1
- package/evals/harness-everything/tasks/positive-tier3.yaml +1 -1
- package/evals/using-git-worktrees/tasks/positive-trigger.yaml +1 -1
- package/find-skills/SKILL.md +20 -29
- package/git-commit/SKILL.md +4 -4
- package/harness-everything/SKILL.md +16 -17
- package/harness-everything/references/triage-and-tiers.md +17 -16
- package/harness-everything/scripts/kernel-router-core.js +26 -24
- package/harness-everything/scripts/kernel-router.js +8 -8
- package/harness-everything/scripts/router-contract-core.js +7 -7
- package/harness-everything/scripts/router-contract.js +1 -1
- package/hooks/scripts/atomic-commit-check.js +1 -1
- package/hooks/scripts/boundary-guard.js +2 -2
- package/hooks/scripts/depth-guard.js +5 -6
- package/hooks/scripts/subagent-scope-guard.js +2 -2
- package/hooks/scripts/workflow-gate.js +1 -1
- package/install-cognitive-os/SKILL.md +3 -3
- package/opencode-plugin/plugin.json +1 -1
- package/package.json +4 -2
- package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
- package/plugins/harness-everything/hooks/scripts/atomic-commit-check.js +1 -1
- package/plugins/harness-everything/hooks/scripts/boundary-guard.js +2 -2
- package/plugins/harness-everything/hooks/scripts/depth-guard.js +5 -6
- package/plugins/harness-everything/hooks/scripts/subagent-scope-guard.js +2 -2
- package/plugins/harness-everything/hooks/scripts/workflow-gate.js +1 -1
- package/plugins/harness-everything/plugin.json +1 -1
- package/plugins/harness-everything/scripts/lib/advisory-text.js +19 -17
- package/plugins/harness-everything/skills/environment-detection/SKILL.md +3 -1
- package/plugins/harness-everything/skills/find-skills/SKILL.md +20 -29
- package/plugins/harness-everything/skills/git-commit/SKILL.md +4 -4
- package/plugins/harness-everything/skills/harness-everything/SKILL.md +16 -17
- package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +17 -16
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router-core.js +26 -24
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +8 -8
- package/plugins/harness-everything/skills/harness-everything/scripts/router-contract-core.js +7 -7
- package/plugins/harness-everything/skills/harness-everything/scripts/router-contract.js +1 -1
- package/plugins/harness-everything/skills/install-cognitive-os/SKILL.md +3 -3
- package/plugins/harness-everything/skills/rewrite-commits/SKILL.md +2 -2
- package/plugins/harness-everything/skills/to-tickets/SKILL.md +2 -2
- package/plugins/harness-everything/skills/using-git-worktrees/SKILL.md +6 -6
- package/rewrite-commits/SKILL.md +2 -2
- package/scripts/lib/advisory-text.js +19 -17
- package/scripts/plugin-sync.js +465 -0
- package/scripts/plugin-sync.ps1 +5 -0
- package/scripts/plugin-sync.sh +5 -0
- package/to-tickets/SKILL.md +2 -2
- package/using-git-worktrees/SKILL.md +6 -6
|
@@ -67,6 +67,7 @@ if (validContract(direct, 'direct-single')) {
|
|
|
67
67
|
check(plan.strategy === 'direct-single', 'one-file trivial task selects direct-single');
|
|
68
68
|
check(plan.strategySelection === 'selected', 'direct-single is a selected strategy');
|
|
69
69
|
check(plan.requiredInvariants.includes('visible-status-updates'), 'every selected workflow carries the user-visible status invariant');
|
|
70
|
+
check(plan.requiredInvariants.includes('environment-alignment'), 'every selected workflow carries conditional environment-alignment MUST');
|
|
70
71
|
check(plan.workspace.required === false, 'direct-single does not require a workspace');
|
|
71
72
|
check(plan.parallelism.allowed === false, 'direct-single does not parallelize');
|
|
72
73
|
}
|
|
@@ -76,15 +77,15 @@ if (validContract(iterative, 'iterative-single')) {
|
|
|
76
77
|
const plan = iterative.contract.workflowPlan;
|
|
77
78
|
check(plan.tier === 'tier2', 'ordinary test-first bug fix is tier2');
|
|
78
79
|
check(plan.strategy === 'iterative-single', 'ordinary bug fix selects iterative-single');
|
|
79
|
-
check(plan.limits.maxIterations === ITERATIVE_MAX_ITERATIONS, 'iterative-single retains
|
|
80
|
-
check(plan.limits.maxRevisionRounds === WORKFLOW_MAX_REVISION_ROUNDS, 'workflow exposes
|
|
81
|
-
check(plan.limits.maxReplans === FABLE_MAX_REPLANS, 'workflow exposes
|
|
82
|
-
check(plan.limits.maxWorkers === FABLE_MAX_WORKERS, 'workflow exposes
|
|
80
|
+
check(plan.limits.maxIterations === ITERATIVE_MAX_ITERATIONS, 'iterative-single retains a MAY iteration planning value');
|
|
81
|
+
check(plan.limits.maxRevisionRounds === WORKFLOW_MAX_REVISION_ROUNDS, 'workflow exposes a MAY revision planning value');
|
|
82
|
+
check(plan.limits.maxReplans === FABLE_MAX_REPLANS, 'workflow exposes a MAY replan planning value');
|
|
83
|
+
check(plan.limits.maxWorkers === FABLE_MAX_WORKERS, 'workflow exposes a MAY worker planning value');
|
|
83
84
|
check(plan.requiredInvariants.includes('objective-verification'), 'iterative-single carries objective verification invariant');
|
|
84
|
-
check(plan.requiredInvariants.includes('loop-awareness'), 'iterative-single carries loop-awareness
|
|
85
|
-
check(plan.suggestedSkills.includes('tdd'), 'TDD
|
|
85
|
+
check(plan.requiredInvariants.includes('loop-awareness'), 'iterative-single carries semantic loop-awareness obligation while numeric counts remain MAY');
|
|
86
|
+
check(plan.suggestedSkills.includes('tdd'), 'TDD remains applicability-conditional rather than a universal invariant');
|
|
86
87
|
check(plan.memory.write === 'none', 'ordinary iterative work cannot write durable memory');
|
|
87
|
-
check(!plan.requiredInvariants.includes('tdd'), 'suggested
|
|
88
|
+
check(!plan.requiredInvariants.includes('tdd'), 'suggested skill names remain separate from plan invariants until applicability is resolved');
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
const memoryPersist = runTier('Persist this lesson as memory after resolving the checkout regression.');
|
|
@@ -110,6 +111,8 @@ if (validContract(staged, 'fable-staged')) {
|
|
|
110
111
|
check(plan.strategy === 'fable-staged', 'dependent multi-stage work selects fable-staged');
|
|
111
112
|
check(plan.parallelism.allowed === false, 'dependent stages remain sequential');
|
|
112
113
|
check(plan.verification.mode === 'cold-verifier', 'fable-staged requires cold verification');
|
|
114
|
+
check(plan.requiredInvariants.includes('isolated-worktree-before-mutation'), 'fable-staged carries mandatory isolation disposition');
|
|
115
|
+
check(plan.suggestedSkills.includes('using-git-worktrees'), 'fable-staged surfaces worktree resolution skill');
|
|
113
116
|
}
|
|
114
117
|
|
|
115
118
|
const parallelPrompt = 'Audit the entire repository with independent read-only security, architecture, and documentation workstreams.';
|
|
@@ -287,10 +290,10 @@ const kernelIterative = spawnSync(process.execPath, [kernelRouter, 'Fix this che
|
|
|
287
290
|
encoding: 'utf8',
|
|
288
291
|
});
|
|
289
292
|
check(kernelIterative.stdout.includes('"strategy":"iterative-single"'), 'kernel consumes strategy from structured plan');
|
|
290
|
-
check(kernelIterative.stdout.includes('loop-awareness:'), 'kernel prints dynamic plan
|
|
293
|
+
check(kernelIterative.stdout.includes('loop-awareness:'), 'kernel prints dynamic semantic plan obligations');
|
|
291
294
|
check(kernelIterative.stdout.includes('visible-status-updates:'), 'kernel prints the user-visible status invariant');
|
|
292
295
|
check(kernelIterative.stdout.includes('USER-VISIBLE HARNESS STATUS CONTRACT (MUST)'), 'kernel prints the canonical mandatory user-visible status contract');
|
|
293
|
-
check(kernelIterative.stdout.includes(' - tdd'), 'kernel prints
|
|
296
|
+
check(kernelIterative.stdout.includes(' - tdd'), 'kernel prints suggested skills separately from required invariants');
|
|
294
297
|
|
|
295
298
|
for (const schemaPath of [
|
|
296
299
|
'harness-everything/schemas/router-task-shape.schema.json',
|
|
@@ -9,7 +9,7 @@ function runNode(args){return spawnSync(process.execPath,args,{cwd:ROOT,encoding
|
|
|
9
9
|
console.log('=== Workflow Guidance Contract ===');
|
|
10
10
|
for(const rel of ['harness-everything/scripts/kernel-router.js','hooks/scripts/workflow-gate.js','hooks/scripts/workflow-stop-gate.js','hooks/scripts/workflow-disposition.js','hooks/scripts/state-persist.js','hooks/scripts/rule-of-3.js','hooks/scripts/rule-of-3-tracker.js'])check(runNode(['--check',path.join(ROOT,rel)]).status===0,rel+' parses as valid JavaScript');
|
|
11
11
|
const ctx={workflow:{workflowPlan:{limits:{maxIterations:8,maxRevisionRounds:2,maxReplans:2,maxWorkers:4}}}};
|
|
12
|
-
for(const type of ['iteration','revision','replan','worker-acquire'])check(runtime.recordBudgetEvent(ctx,type,{evidence:'fixture'}).advisory===true,type+'
|
|
12
|
+
for(const type of ['iteration','revision','replan','worker-acquire'])check(runtime.recordBudgetEvent(ctx,type,{evidence:'fixture'}).advisory===true,type+' remains a MAY planning hint rather than blocking');
|
|
13
13
|
check(runtime.mutationProbeReservations(ctx)===0,'mutation probes reserve no capacity');
|
|
14
14
|
check(runtime.registerMutationProbe(ctx,'x','y')===null,'mutation probe registration is a no-op');
|
|
15
15
|
check(runtime.resetWorkflowBudget(ctx,'legacy').retired===true,'reset-budget API is retired compatibility only');
|
|
@@ -51,5 +51,5 @@ try{
|
|
|
51
51
|
check(stale.includes('independent-verifier-missing'),'Fable independent verifier is invalidated by newer handoff shell-edit evidence');
|
|
52
52
|
}finally{fs.rmSync(freshnessRoot,{recursive:true,force:true});}
|
|
53
53
|
|
|
54
|
-
console.log('\n'+(failed===0?'PASS':'FAIL')+': workflow
|
|
54
|
+
console.log('\n'+(failed===0?'PASS':'FAIL')+': workflow semantic contract mechanics ('+failed+' failures)');
|
|
55
55
|
process.exit(failed===0?0:1);
|
package/docs/architecture.md
CHANGED
|
@@ -9,16 +9,16 @@ Harness is a **behavior and workflow observer/router**, not a universal fixed wo
|
|
|
9
9
|
The minimal kernel establishes:
|
|
10
10
|
|
|
11
11
|
- scope/tier before mutation,
|
|
12
|
-
- a selected workflow topology as
|
|
12
|
+
- a selected workflow topology as a semantic execution contract when task evidence supports one,
|
|
13
13
|
- applicability evaluation for every suggested skill before omission,
|
|
14
14
|
- objective evidence before completion,
|
|
15
15
|
- bounded re-plan/recovery after repeated failure,
|
|
16
16
|
- explicit warnings/degraded/escape evidence instead of silent workflow deletion;
|
|
17
17
|
- one mandatory user-visible Harness Status protocol for non-trivial work, independent of execution topology.
|
|
18
18
|
|
|
19
|
-
> **
|
|
19
|
+
> **Contract-first lifecycle; flexible reasoning/implementation and execution.**
|
|
20
20
|
>
|
|
21
|
-
> Suggested skills
|
|
21
|
+
> Suggested skills MUST be evaluated from their real flows. Applicable skill core contracts and selected-topology obligations are semantic MUSTs; missing evidence produces reminders rather than persistent Harness locks.
|
|
22
22
|
|
|
23
23
|
This avoids both extremes: no universal Tier-2/Tier-3 pipeline and no maze of self-deadlocking cognitive gates.
|
|
24
24
|
|
|
@@ -50,8 +50,8 @@ flowchart TD
|
|
|
50
50
|
- selected/deferred execution strategy,
|
|
51
51
|
- required invariants,
|
|
52
52
|
- suggested skills that require applicability evaluation,
|
|
53
|
-
- the
|
|
54
|
-
-
|
|
53
|
+
- the internal routing checkpoint,
|
|
54
|
+
- the semantic workflow contract.
|
|
55
55
|
|
|
56
56
|
The router does not tell the model *how* to solve each stage. It decides what lifecycle shape is required. `direct-single`, `iterative-single`, `fable-staged`, `fable-parallel`, and `fable-multi-agent-workspace` remain deliberately small, non-overlapping topology choices.
|
|
57
57
|
|
|
@@ -78,7 +78,7 @@ This is a semantic contract, not another cognitive lock. Hook-capable hosts may
|
|
|
78
78
|
|
|
79
79
|
Router suggestions remain useful domain/workflow knowledge, not a universal sequence. Before omission, the agent reads the complete `SKILL.md` entry and evaluates `USE FOR`, `DO NOT USE FOR`, workflow/basic flow, and hard rules. Name/description/router-summary or “routine task” is insufficient evidence.
|
|
80
80
|
|
|
81
|
-
The selected topology is a
|
|
81
|
+
The selected topology is a semantic lifecycle contract, not a persistent execution lock. Required obligations MUST resolve; implementation tactics MAY adapt.
|
|
82
82
|
|
|
83
83
|
### Runtime workflow state
|
|
84
84
|
|
|
@@ -91,13 +91,13 @@ For selected Fable topologies on Claude:
|
|
|
91
91
|
- `workflow-stop-gate.js` reports unresolved stage/verification evidence without rejecting Stop;
|
|
92
92
|
- `workflow-disposition.js` records explicit lifecycle/audit decisions; numeric budgets are no longer authoritative control state.
|
|
93
93
|
|
|
94
|
-
Other topologies use their own applicable mechanisms:
|
|
94
|
+
Other topologies use their own applicable mechanisms: MAY-level loop-awareness planning hints, regular verification stop-gates, action gates, and task-specific skills. Mechanism coverage is not assumed identical across hosts.
|
|
95
95
|
|
|
96
96
|
### Scoped runtime advisories and capabilities
|
|
97
97
|
|
|
98
98
|
Two kernel mechanisms annotate plans without creating hard workflow enforcement:
|
|
99
99
|
|
|
100
|
-
- **Ensemble policy (`harness-everything/scripts/ensemble-policy.js`):**
|
|
100
|
+
- **Ensemble policy (`harness-everything/scripts/ensemble-policy.js`):** optional selection is a **MAY** capability, not a separate topology. It is selected only when uncertainty is high (or stakes are high) **and** the task asks for comparable outputs or preserves explicit disagreement **and** the selected strategy is already `fable-*`. Creative generation, mechanical bulk work, an explicit user prohibition, unavailable subagents, or a blocked base plan force exclusion. Once selected, preserving disagreement, using an independent verifier, and honoring the plan's ensemble invariants are **MUST** obligations. Covered by deterministic mechanism tests; no live-host effectiveness claim follows from the annotation alone.
|
|
101
101
|
- **Single-use memory capability (`kernel-router.js#issueMemoryCapability`):** when the selected plan permits memory writes, the router issues one capability token bound to `sessionId`/`workflowId` with a stored SHA-256 hash (`memoryAuthorization`, coordinator-only writer role, `usedAt` tracking). Plans with `memory.write === 'none'` receive no capability. This binds a memory write to the workflow that authorized it; it is not a general credential and proves nothing about a live host honoring the binding.
|
|
102
102
|
|
|
103
103
|
### PreToolUse guard trio and denied-mutation probes
|
|
@@ -105,7 +105,7 @@ Two kernel mechanisms annotate plans without creating hard workflow enforcement:
|
|
|
105
105
|
On the Claude hook path, three narrowly scoped `PreToolUse` guards sit alongside the workflow/action gates:
|
|
106
106
|
|
|
107
107
|
- `boundary-guard.js` (Grep/Glob/Read): warns about very large reads and noisy search roots; it fails open.
|
|
108
|
-
- `depth-guard.js` (Write):
|
|
108
|
+
- `depth-guard.js` (Write): reminds when an existing file would be overwritten without prior inspection. The semantic obligation to establish current target state before destructive overwrite is a **MUST**; the hook itself stays fail-open. New files are unaffected.
|
|
109
109
|
- `context-compact.js`: estimates working-tree context pressure from `git status`/`git diff --numstat` so later stages can compact or halt before lost-in-the-middle degradation.
|
|
110
110
|
|
|
111
111
|
Shell mutation observation is best-effort evidence for reminders. The old mutation-probe reservation/lock subsystem was retired by #190.
|
|
@@ -118,23 +118,23 @@ Harness aligns to each host's actual lifecycle/tool APIs. Shared skill text defi
|
|
|
118
118
|
|
|
119
119
|
Runtime state includes hook metadata, workflow lifecycle, circuit-breaker counters, handoff/verification evidence, and WAL-style session state. Skill content is independently discoverable and remains useful on instruction-only surfaces.
|
|
120
120
|
|
|
121
|
-
### Claude Code — hook
|
|
121
|
+
### Claude Code — hook observation plus explicit safety boundaries
|
|
122
122
|
|
|
123
123
|
The installer configures native lifecycle hooks and project skills.
|
|
124
124
|
|
|
125
125
|
- `SessionStart`: bootstrap/restoration.
|
|
126
|
-
- `UserPromptSubmit`: kernel routing + workflow
|
|
126
|
+
- `UserPromptSubmit`: kernel routing + semantic workflow contract.
|
|
127
127
|
- `PreToolUse`: workflow/boundary/depth/scope reminders, plus separate action permission and Rule-of-3 boundaries.
|
|
128
128
|
- `PostToolUse`: outcomes, state, repeated-failure evidence, stage checks.
|
|
129
129
|
- `Stop`: action-gate audit plus non-blocking workflow/verification reminders.
|
|
130
130
|
|
|
131
|
-
These hooks make
|
|
131
|
+
These hooks make semantic obligations observable; they do not promote cognitive workflow contracts into hard enforcement.
|
|
132
132
|
|
|
133
133
|
### OpenCode — plugin enforcement, scoped live verification
|
|
134
134
|
|
|
135
135
|
The retained [OpenCode evidence](../benchmarks/results/live-host/opencode-2026-09-16/README.md) supports **project-scope `.js` loading and edit/verification state on OpenCode 1.18.31 (macOS)**. The final snapshot is **post-reset**. Hard-lock is an **interactive observation** with **no retained blocked-tool trace**; reflection was **operator-seeded** and then agent-rewritten. Global scope, npm-package installation, and other OpenCode versions remain unverified.
|
|
136
136
|
|
|
137
|
-
This evidence predates #190 and does not establish behavioral effectiveness of the current
|
|
137
|
+
This evidence predates #190 and does not establish behavioral effectiveness of the current contract-first lifecycle.
|
|
138
138
|
|
|
139
139
|
### Cursor — skills plus advisory rules
|
|
140
140
|
|
|
@@ -148,7 +148,7 @@ Copilot receives Agent Skills/repository instructions. No Harness-specific live
|
|
|
148
148
|
|
|
149
149
|
Codex has multiple distinct Harness surfaces:
|
|
150
150
|
|
|
151
|
-
- The general `--codex` installer writes repo-scoped `.agents/skills/` plus `AGENTS.md`; when consumed only as instructions,
|
|
151
|
+
- The general `--codex` installer writes repo-scoped `.agents/skills/` plus `AGENTS.md`; when consumed only as instructions, the same semantic contract is instruction-delivered without a hard-enforcement claim.
|
|
152
152
|
- The **Codex / local OpenAI plugin** under `plugins/harness-everything/` packages canonical skills plus session/prompt/supported-tool/subagent/stop hooks. The package includes workflow-gate adapters, but this is mechanism/package evidence until a live Codex session proves loading/firing.
|
|
153
153
|
- The public OpenAI **Skills-only** artifact excludes local `.codex-plugin` lifecycle hooks; it carries reusable workflow knowledge, not local hard gates.
|
|
154
154
|
|
|
@@ -204,7 +204,7 @@ A domain skill may define RED/GREEN/REFACTOR or another local lifecycle. The sel
|
|
|
204
204
|
|
|
205
205
|
1. **No Harness telemetry service:** project code/state is not uploaded by Harness runtime scripts.
|
|
206
206
|
2. **Credential protection:** credentials remain human/host controlled.
|
|
207
|
-
3. **Small mechanism surface:** hooks
|
|
207
|
+
3. **Small mechanism surface:** hooks **SHOULD** remain fast and auditable.
|
|
208
208
|
4. **Explicit enforcement labels:** instruction, mechanism, and live evidence are distinct.
|
|
209
209
|
5. **Deterministic regression:** workflow/routing/hook contracts are executable CI gates.
|
|
210
210
|
6. **No silent widening:** workflow escape cannot widen authorization, permissions, or external side effects.
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Semantic Contracts and Safety Boundary Diagnostic Flows
|
|
2
2
|
|
|
3
|
-
Harness deliberately separates **
|
|
3
|
+
Harness deliberately separates **semantic obligation strength** from **mechanical enforcement** and from **authorization/safety boundaries**. Canonical MUST/SHOULD/MAY definitions live in [philosophy.md](philosophy.md#contract-strength-must--should--may).
|
|
4
4
|
|
|
5
5
|
## Classification
|
|
6
6
|
|
|
7
|
-
| Mechanism |
|
|
8
|
-
|
|
9
|
-
| Workflow routing/
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
7
|
+
| Mechanism / obligation | Semantic strength | Runtime behavior | Hard block? |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| Workflow routing / selected topology | **MUST** resolve required obligations | Observe/remind about unresolved lifecycle evidence | No |
|
|
10
|
+
| Suggested skill applicability | **MUST** evaluate; applicable core contract **MUST** run | Kernel/instructions expose dispositions | No |
|
|
11
|
+
| Iteration/revision/replan/worker numbers | **MAY** guide planning | Planning hints only | No |
|
|
12
|
+
| Verification before claim | **MUST** | Stop/hooks remind when evidence is missing | No |
|
|
13
|
+
| Boundary guard / huge-noisy context | **SHOULD** narrow reads/searches | Warn | No |
|
|
14
|
+
| Destructive overwrite target inspection | **MUST** establish current state | Depth guard reminds/fails open on mechanism errors | No |
|
|
15
|
+
| Tier-3/Fable isolation disposition | **MUST** resolve worktree or degraded fallback | Warn when unresolved | No |
|
|
16
|
+
| Subagent declared scope / unexpected writes | **MUST** respect and reconcile | Report ambiguous/out-of-scope changes | No |
|
|
17
|
+
| Commit scope | Staged diff review **MUST**; split unrelated concerns **SHOULD** | Atomic-commit reminder | No |
|
|
18
|
+
| Fable stage/check/synthesis/verifier | **MUST** when selected | Record pass/fail/ambiguity/dependency evidence and remind | No |
|
|
19
|
+
| Rule of 3 | Third matching failure **MUST** trigger zoom-out | Pause mutation until reflection | **Yes — intentional cognitive boundary** |
|
|
20
|
+
| Action/permission gate | Approval **MUST** precede governed side effects | Host/user authorization | **Yes — trust boundary** |
|
|
19
21
|
|
|
20
22
|
## Rule of 3
|
|
21
23
|
|
|
@@ -41,7 +43,7 @@ The previous numeric enforcement required mutation probes, stale-probe recovery,
|
|
|
41
43
|
|
|
42
44
|
The design test is simple:
|
|
43
45
|
|
|
44
|
-
> If
|
|
46
|
+
> If observing a semantic obligation would require another lock, lease, heartbeat, counter-recovery protocol, or parser exception, use a reminder instead. The reminder changes the **mechanism**, not the obligation's MUST/SHOULD/MAY strength.
|
|
45
47
|
|
|
46
48
|
## Troubleshooting
|
|
47
49
|
|
package/docs/philosophy.md
CHANGED
|
@@ -9,17 +9,52 @@ The mechanism/enforcement boundary remains platform-specific; see [Platform Capa
|
|
|
9
9
|
## Core Philosophy: Constrain Lifecycle, Not Reasoning
|
|
10
10
|
|
|
11
11
|
1. **Reasoning autonomy remains high.** The model chooses implementation technique, tools, decomposition details, and tactics inside the selected workflow.
|
|
12
|
-
2. **
|
|
13
|
-
3. **Skill applicability is explicit.**
|
|
12
|
+
2. **Selected lifecycle obligations are contracts, not advice.** Once a topology is selected, its required invariants, stages, checks, synthesis barriers, and verification obligations are semantic MUSTs. The model remains free to decide how to satisfy them.
|
|
13
|
+
3. **Skill applicability is explicit.** Every router-suggested skill MUST be read/evaluated before omission. If its real flow is applicable, its core contract MUST be followed; if it is not applicable, the agent MUST keep a flow-grounded reason.
|
|
14
14
|
4. **Escape is conditional, not default.** If the selected workflow genuinely cannot represent part of the task, record the uncovered scope and evidence, then allow model-defined handling only for that uncovered portion.
|
|
15
|
-
5. **Mechanisms
|
|
15
|
+
5. **Mechanisms do not define obligation strength.** Hooks/plugins may observe, remind, or mechanically block where the host supports them, but a missing blocking mechanism does not downgrade a semantic MUST to optional advice.
|
|
16
16
|
|
|
17
17
|
This principle can be summarized as:
|
|
18
18
|
|
|
19
|
-
> **
|
|
19
|
+
> **contract-first lifecycle; flexible reasoning/implementation inside it; evidence-backed escape only where the workflow does not cover the task.**
|
|
20
20
|
|
|
21
21
|
The goal is not to make the model less capable. It is to prevent capability/confidence from silently deleting engineering obligations such as verification, bounded re-planning, stage checks, documentation checks, or safety gates when those obligations are applicable.
|
|
22
22
|
|
|
23
|
+
## Contract Strength: MUST / SHOULD / MAY
|
|
24
|
+
|
|
25
|
+
Harness uses three semantic strengths. Recommendation-style language is the last choice, not the default for important behavior.
|
|
26
|
+
|
|
27
|
+
| Strength | Meaning | Typical use |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| **MUST** | Skipping the obligation violates the Harness semantic contract. Host enforcement may still be reminder-only. | routing, applicability resolution, applicable skill core contracts, selected-topology obligations, verification-before-claim, status, scope/safety/authorization evidence |
|
|
30
|
+
| **SHOULD** | The default is expected, but a concrete evidence-based exception is legitimate. | ordinary isolation, targeted editing, splitting mixed commit concerns, context-size/noisy-search discipline |
|
|
31
|
+
| **MAY** | Optional optimization/capability. Omitting it needs no exception unless another contract selected it. | numeric planning hints, optional ensemble selection, extra deep references, opportunistic parallelism |
|
|
32
|
+
|
|
33
|
+
Do not use `recommend`, `prefer`, `advisory`, or `guidance` to weaken a MUST. Those words are reserved for actual SHOULD/MAY behavior or for describing the host's **mechanical delivery mode** (for example, an instruction-only surface).
|
|
34
|
+
|
|
35
|
+
The repository-wide classification for #217 is:
|
|
36
|
+
|
|
37
|
+
| Obligation | Strength |
|
|
38
|
+
|---|---|
|
|
39
|
+
| Route before software/project execution | **MUST** |
|
|
40
|
+
| Read/evaluate every suggested skill before omission | **MUST** |
|
|
41
|
+
| Follow an applicable suggested skill's core contract; otherwise keep a flow-grounded not-applicable reason | **MUST** |
|
|
42
|
+
| Resolve selected-topology invariants/stages/checks/synthesis/verification | **MUST** |
|
|
43
|
+
| Choose tools, implementation technique, decomposition details, and local tactics | **MAY** within the MUST contract |
|
|
44
|
+
| Verify before claiming completion | **MUST** |
|
|
45
|
+
| Emit the unified Harness Status for non-trivial work | **MUST** |
|
|
46
|
+
| Discover relevant environment/host facts before relying on environment-sensitive behavior | **MUST** |
|
|
47
|
+
| Establish current target state before destructive overwrite/rewrite | **MUST** |
|
|
48
|
+
| Resolve Tier-3/Fable isolation before broad mutation: linked worktree or explicit degraded fallback | **MUST** |
|
|
49
|
+
| Use isolation for ordinary work when it materially reduces collision/risk | **SHOULD** |
|
|
50
|
+
| Honor Fable stage contracts, checks, synthesis barrier, and cold verifier when selected | **MUST** |
|
|
51
|
+
| Keep delegated agents inside declared scope and reconcile unexpected writes | **MUST** |
|
|
52
|
+
| Inspect the staged diff/commit scope before committing | **MUST**; split unrelated concerns **SHOULD** |
|
|
53
|
+
| Avoid huge/noisy reads/searches when a narrower query is sufficient | **SHOULD** |
|
|
54
|
+
| Numeric iteration/revision/replan/worker values | **MAY** guide planning; never hard-block |
|
|
55
|
+
| Select ensemble review | **MAY** when task shape warrants it; once selected, disagreement preservation and independent verification are **MUST** |
|
|
56
|
+
| Durable memory writes | **MUST** be authorized by the active workflow/session contract |
|
|
57
|
+
|
|
23
58
|
## Why This Is Not a Rigid Global Pipeline
|
|
24
59
|
|
|
25
60
|
Harness still rejects a universal `TODO → TDD → Fable → verification` sequence.
|
|
@@ -38,19 +73,19 @@ Domain skills remain conditional on applicability. The contract says “execute
|
|
|
38
73
|
|
|
39
74
|
### 1. Environment Alignment — Discovery over Assumption
|
|
40
75
|
|
|
41
|
-
|
|
76
|
+
Relevant environment discovery is a conditional **MUST**: establish OS, shell, package/runtime context, repository boundaries, and host capabilities before relying on environment-sensitive behavior. On surfaces that package preflight/session hooks this may be injected automatically; instruction-only hosts MUST do it explicitly when needed.
|
|
42
77
|
|
|
43
78
|
### 2. Guardrails — Lifecycle Boundaries
|
|
44
79
|
|
|
45
|
-
Circuit breakers, action gates, workflow gates, scope guards, and completion gates protect specific transitions. They
|
|
80
|
+
Circuit breakers, action gates, workflow gates, scope guards, and completion gates protect specific transitions. They **SHOULD** remain narrow and evidence-driven. On integration surfaces that expose the required lifecycle/tool hooks, Harness can mechanically block supported violations; elsewhere the same contract is instruction-governed and must not be mislabeled hard enforcement.
|
|
46
81
|
|
|
47
82
|
### 3. Context Preservation — Progressive Disclosure
|
|
48
83
|
|
|
49
|
-
|
|
84
|
+
**SHOULD** load the smallest useful context. A suggested skill's complete entry **MUST** be read before deciding applicability; optional deep references **MAY** remain unloaded unless needed. Machine-visible workflow state SHOULD carry lifecycle facts instead of repeating large prompt blocks.
|
|
50
85
|
|
|
51
86
|
### 4. Self-Evolution — Learn from Workflow Evidence
|
|
52
87
|
|
|
53
|
-
`self-evolve`
|
|
88
|
+
`self-evolve` **MUST** ground durable learning in verified recovery/workflow evidence. Escape events, repeated replans, verifier fail→pass transitions, and recurrence outcomes **MAY** provide that evidence. Durable learning MUST improve future coverage rather than grant a shortcut around the current workflow, and remains distinct from runtime session state.
|
|
54
89
|
|
|
55
90
|
## Mechanism-First Cooperation
|
|
56
91
|
|
|
@@ -27,9 +27,9 @@ This is a **repository/agent contract**, not an automatic upgrade to any platfor
|
|
|
27
27
|
|
|
28
28
|
| Platform surface | Standalone skills | Plugin support | Hooks/lifecycle | Project scope | Global scope | Current evidence boundary |
|
|
29
29
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
30
|
-
| Codex | `Supported` | `Mechanism verified` | `Mechanism verified` for the local OpenAI package, including session, prompt, supported-tool, subagent, and stop hooks | `.agents/skills/`, `AGENTS.md` | `~/.agents/skills/` | Local package hooks are mechanically checked; live loading and marketplace refresh remain
|
|
30
|
+
| Codex | `Supported` | `Mechanism verified` | `Mechanism verified` for the local OpenAI package, including session, prompt, supported-tool, subagent, and stop hooks | `.agents/skills/`, `AGENTS.md` | `~/.agents/skills/` | Local package hooks and the state-specific marketplace sync command are mechanically checked; live loading and marketplace refresh remain unverified. |
|
|
31
31
|
| ChatGPT / OpenAI Plugin | `Unknown` for a repository-local standalone path | `Mechanism verified` | `Partial`: local Work/Codex hooks are separate from ordinary Chat | Managed workspace marketplace | Not established | The public Skills-only bundle is mechanically reproducible; import, approval, and live behavior remain `Unknown`. |
|
|
32
|
-
| Claude Code | `Supported` | `Supported` | `Mechanism verified` for Harness configuration | `.claude/skills/` | `~/.claude/skills/` | Native Claude surfaces
|
|
32
|
+
| Claude Code | `Supported` | `Supported` | `Mechanism verified` for Harness configuration | `.claude/skills/` | `~/.claude/skills/` | Native Claude surfaces and the state-specific plugin sync command are mechanically checked; fresh-host execution is not preserved here. |
|
|
33
33
|
| OpenCode | `Supported` | `Partial` live-host loading for the project-scope, `.js`-filename install path on OpenCode 1.18.31 (macOS); other install paths remain `Mechanism verified` | `Partial` live-host evidence for project-scope `.js` loading and edit/verification state; hard lock reported only, with no retained blocked-tool trace and a post-reset final snapshot | `.opencode/skills/`, `.agents/skills/`, `.opencode/plugins/` | `~/.config/opencode/skills/`, `~/.agents/skills/`, `~/.config/opencode/plugins/` | [Retained evidence](../benchmarks/results/live-host/opencode-2026-09-16/README.md): loading and state effects verified in one host session; final snapshot post-reset; hard lock only an interactive observation; reflection operator-seeded, then agent-rewritten; no raw transcript or behavioral-effectiveness claim. `.mjs` auto-discovery broken (issue #127); global scope, npm-package installation, and other host versions remain unverified. |
|
|
34
34
|
| GitHub Copilot agent surfaces | `Supported` | `Unknown` for a Harness-specific plugin install | `Unknown` | `.github/skills/`, `.agents/skills/`, repository instructions | `~/.copilot/skills/`, `~/.agents/skills/` | GitHub Agent Skills paths and installer behavior are checked; no live Copilot session or plugin install is preserved. |
|
|
35
35
|
| Cursor | `Supported` | `Mechanism verified` for the portable package shape | `Unknown` for Harness | `.cursor/skills/`, `.agents/skills/` | `~/.cursor/skills/`, `~/.agents/skills/` | Official paths and package shape are checked; Cursor plugin loading and hooks remain unverified. |
|
|
@@ -64,6 +64,26 @@ Codex has two paths that must not be collapsed:
|
|
|
64
64
|
|
|
65
65
|
The package is tested at the mechanism layer and remains subject to the host’s hook review/trust flow. A fresh host session is still required before claiming that a particular ChatGPT/Codex installation loaded and fired the hooks or that the model followed read-before-skip.
|
|
66
66
|
|
|
67
|
+
### Native plugin install/update synchronization
|
|
68
|
+
|
|
69
|
+
The repository also ships a host-facing synchronization command for the native marketplace/plugin surfaces:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npx github:dyphn1/Harness-everything plugin-sync
|
|
73
|
+
# or, from a checkout:
|
|
74
|
+
./scripts/plugin-sync.sh
|
|
75
|
+
powershell -File scripts/plugin-sync.ps1
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The command detects Claude Code and Codex independently, ensures the Harness marketplace is configured, reads the installed-plugin state, then refreshes that marketplace before choosing the operation:
|
|
79
|
+
|
|
80
|
+
- absent plugin → install;
|
|
81
|
+
- existing Claude Code plugin → `claude plugin update harness-everything@harness-everything`;
|
|
82
|
+
- existing Codex plugin → `codex plugin marketplace upgrade harness-everything`;
|
|
83
|
+
- unknown plugin state → fail closed, with no blind install/re-add.
|
|
84
|
+
|
|
85
|
+
The installed branch is intentionally an update branch even when the current release is already the newest version; the host command may report “already latest.” Codex marketplace upgrade is the current native refresh operation; the command does not edit private cache paths or `config.toml`. These are deterministic command/state tests, not live-host evidence, so `liveHostVerification` remains `Unknown` in the matrix.
|
|
86
|
+
|
|
67
87
|
### Explicit Codex user-hook compatibility fallback
|
|
68
88
|
|
|
69
89
|
Current Codex documentation supports plugin-bundled hooks, so native plugin mounting remains the preferred path. Some host/source combinations have nevertheless failed to expose enabled plugin hooks for review/entry attribution (#122 and upstream Codex reports). Harness therefore provides an **explicit compatibility fallback**, not an automatic replacement for native plugin hooks:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "harness-platform-compatibility-v1",
|
|
3
|
-
"last_reviewed": "2026-09-
|
|
3
|
+
"last_reviewed": "2026-09-21",
|
|
4
4
|
"status_vocabulary": {
|
|
5
5
|
"Supported": "An official or native mechanism exists and the Harness behavior is verified.",
|
|
6
6
|
"Mechanism verified": "Harness package, adapter, or installer checks pass, but a real host run is not confirmed.",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"globalScope": {"status": "Mechanism verified", "paths": {"skills": ["~/.agents/skills"]}},
|
|
115
115
|
"installUninstallSymmetry": {"status": "Mechanism verified", "notes": "General Harness installer ownership is mechanism-tested. The optional codex-hooks compatibility fallback separately has exact-entry update/uninstall ownership tests and preserves unrelated user hooks; live Codex trust/dispatch still requires host evidence."},
|
|
116
116
|
"assetsReferences": {"status": "Mechanism verified", "notes": "Packaged skill references are checked and remain inside the package."},
|
|
117
|
-
"updateSync": {"status": "
|
|
117
|
+
"updateSync": {"status": "Mechanism verified", "notes": "scripts/plugin-sync.js detects installed state and uses marketplace upgrade for an installed Codex plugin; no live Codex host refresh is preserved."},
|
|
118
118
|
"liveHostVerification": {"status": "Unknown", "notes": "No preserved Codex plugin/session artifact proves current bundled-hook entry. Native plugin mounting is preferred; the explicit user-hook fallback is mechanism-verified only and does not solve host carriers that bypass hook dispatch."}
|
|
119
119
|
}
|
|
120
120
|
},
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
"globalScope": {"status": "Mechanism verified", "paths": {"skills": ["~/.claude/skills"], "hooks": ["~/.claude/settings.json"]}},
|
|
160
160
|
"installUninstallSymmetry": {"status": "Mechanism verified", "notes": "Owned settings, skills, agents, and user files are covered by round-trip tests."},
|
|
161
161
|
"assetsReferences": {"status": "Mechanism verified", "notes": "Skill-local references, scripts, and templates are checked."},
|
|
162
|
-
"updateSync": {"status": "
|
|
162
|
+
"updateSync": {"status": "Mechanism verified", "notes": "scripts/plugin-sync.js detects installed state and uses the explicit Claude plugin update command for an installed plugin; no live Claude host refresh is preserved."},
|
|
163
163
|
"liveHostVerification": {"status": "Unknown", "notes": "No fresh Claude Code plugin session artifact is committed for this revision."}
|
|
164
164
|
}
|
|
165
165
|
},
|
|
@@ -267,4 +267,4 @@
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
]
|
|
270
|
-
}
|
|
270
|
+
}
|
package/docs/routing.md
CHANGED
|
@@ -4,9 +4,9 @@ Harness classifies software work and selects the smallest sufficient execution t
|
|
|
4
4
|
|
|
5
5
|
The current architecture follows two coupled rules:
|
|
6
6
|
|
|
7
|
-
> **
|
|
7
|
+
> **Contract-first lifecycle; flexible reasoning/implementation and execution.**
|
|
8
8
|
>
|
|
9
|
-
> **Skill applicability is
|
|
9
|
+
> **Skill applicability is explicit: evaluation is mandatory, applicable core contracts are mandatory, and not-applicable dispositions require evidence.**
|
|
10
10
|
|
|
11
11
|
A strong model remains free to decide *how* to perform the work. It may not decide that an applicable selected lifecycle can be skipped because the task feels simple or already understood.
|
|
12
12
|
|
|
@@ -18,7 +18,7 @@ For software/project work, Harness establishes routing context and lightweight r
|
|
|
18
18
|
2. **Verify before claim** — completion requires objective evidence appropriate to the change.
|
|
19
19
|
3. **Re-plan after repeated failure** — after three same-signature failures, stop micro-retrying and use a fresh diagnosis / `zoom-out`.
|
|
20
20
|
4. **Evaluate before omission** — read every suggested skill's complete `SKILL.md` entry before deciding applicability.
|
|
21
|
-
5. **
|
|
21
|
+
5. **Resolve selected workflow** — satisfy the selected topology's required obligations before completion; tactics MAY adapt, but required lifecycle evidence cannot be silently skipped.
|
|
22
22
|
6. **Surface status** — non-trivial work MUST keep the user informed through the single Harness Status format at required phase boundaries.
|
|
23
23
|
|
|
24
24
|
The model owns tools, implementation technique, reasoning, and decomposition details inside those rails.
|
|
@@ -28,10 +28,10 @@ The model owns tools, implementation technique, reasoning, and decomposition det
|
|
|
28
28
|
```text
|
|
29
29
|
kernel-router.js
|
|
30
30
|
├─ delegates classification / guide discovery → tier-router.js
|
|
31
|
-
├─ preserves tier + rationale + dynamic-skill
|
|
31
|
+
├─ preserves tier + rationale + dynamic-skill suggestions
|
|
32
32
|
├─ emits required invariants + structured workflow plan
|
|
33
33
|
├─ requires applicability evaluation for suggested skills
|
|
34
|
-
├─ records the selected workflow
|
|
34
|
+
├─ records the selected workflow contract
|
|
35
35
|
└─ exposes warnings/degraded/escape evidence instead of silently hiding limitations
|
|
36
36
|
```
|
|
37
37
|
|
|
@@ -70,10 +70,11 @@ These are intentionally different concepts.
|
|
|
70
70
|
|
|
71
71
|
For **every suggested skill**:
|
|
72
72
|
|
|
73
|
-
1.
|
|
74
|
-
2.
|
|
73
|
+
1. **MUST** resolve/read the complete `SKILL.md` entry.
|
|
74
|
+
2. **MUST** evaluate `USE FOR`, `DO NOT USE FOR`, workflow/basic flow, and hard rules.
|
|
75
75
|
3. Read extra material only when the entry explicitly requires it for applicability.
|
|
76
|
-
4.
|
|
76
|
+
4. **MUST** resolve the suggestion as `use`, `not-applicable`, or `unresolved/unavailable`.
|
|
77
|
+
5. If disposition is `use`, the skill's core contract **MUST** be followed. If it is `not-applicable`, a concise flow-grounded reason **MUST** be retained.
|
|
77
78
|
|
|
78
79
|
A name, description, router summary, tier label, or generic “routine/common task” judgement is not sufficient evidence for `not-applicable`.
|
|
79
80
|
|
|
@@ -86,7 +87,7 @@ For the **selected workflow topology**:
|
|
|
86
87
|
|
|
87
88
|
This prevents two opposite failures: forcing every task through one giant pipeline, and allowing a model to rationalize away the entire engineering lifecycle.
|
|
88
89
|
|
|
89
|
-
## Three-tier
|
|
90
|
+
## Three-tier routing model
|
|
90
91
|
|
|
91
92
|
```mermaid
|
|
92
93
|
flowchart TD
|
|
@@ -117,7 +118,7 @@ No universal `TODO → TDD → verification-loop` order is implied. But when a s
|
|
|
117
118
|
|
|
118
119
|
Typical triggers: repository-wide refactors, architecture/migration work, broad synthesis, or bounded delegation. The router may select `fable-staged`, `fable-parallel`, or `fable-multi-agent-workspace`.
|
|
119
120
|
|
|
120
|
-
A selected Fable topology is
|
|
121
|
+
A selected Fable topology is a semantic execution contract for that run: required stage contracts, dependency/write-set validation, objective checks, synthesis, and cold verification **MUST** resolve. Host hooks may only remind when evidence is missing; that fail-open mechanism does not make the obligations optional.
|
|
121
122
|
|
|
122
123
|
Tier 3 does **not** automatically mean multi-agent. The smallest sufficient topology still wins.
|
|
123
124
|
|
|
@@ -141,18 +142,24 @@ Direct/iterative verification milestones are checked, while semantic check quali
|
|
|
141
142
|
|
|
142
143
|
## Cognitive OS relationship
|
|
143
144
|
|
|
144
|
-
`install-cognitive-os` remains the explanatory/manual entry point for Discover → Think → Try → Summarize → Record. It is a reasoning policy, not a peer skill that must be selected before domain work. The selected workflow
|
|
145
|
+
`install-cognitive-os` remains the explanatory/manual entry point for Discover → Think → Try → Summarize → Record. It is a reasoning policy, not a peer skill that must be selected before domain work. The selected workflow contract defines lifecycle obligations; the model retains freedom over reasoning and implementation tactics.
|
|
145
146
|
|
|
146
|
-
##
|
|
147
|
+
## Contract and Enforcement Strength
|
|
147
148
|
|
|
148
|
-
|
|
149
|
+
Canonical strength definitions live in [philosophy.md](philosophy.md#contract-strength-must--should--may):
|
|
149
150
|
|
|
150
|
-
- **
|
|
151
|
+
- **MUST:** skipping violates the semantic contract.
|
|
152
|
+
- **SHOULD:** expected default with a concrete evidence-based exception.
|
|
153
|
+
- **MAY:** optional optimization/capability.
|
|
154
|
+
|
|
155
|
+
Keep semantic strength separate from runtime mechanics:
|
|
156
|
+
|
|
157
|
+
- **semantic contract:** what the agent MUST/SHOULD/MAY do;
|
|
151
158
|
- **mechanism:** which transitions a packaged hook/plugin can block, observe, or remind about;
|
|
152
159
|
- **live evidence:** whether a real host actually loaded/fired that mechanism.
|
|
153
160
|
|
|
154
|
-
|
|
161
|
+
A semantic MUST does not require a hard lock. Outside Rule-of-3 reflection and explicit permission/safety boundaries, lifecycle hooks stay fail-open/reminder-oriented.
|
|
155
162
|
|
|
156
|
-
Instruction-only integrations receive the same
|
|
163
|
+
Instruction-only integrations receive the same semantic contract through instructions, but must not be labeled hard-enforced. Kernel emission alone does not prove model compliance. #82 owns host-specific retained evidence.
|
|
157
164
|
|
|
158
165
|
Do not infer cross-host parity from shared runtime code or passing package tests.
|
package/docs/troubleshooting.md
CHANGED
|
@@ -189,6 +189,14 @@ If those checks pass but the host still shows an older copy:
|
|
|
189
189
|
|
|
190
190
|
The local plugin mechanically injects the session policy and invariant-first routing contract, and its package includes mechanism-tested supported-tool, subagent, and stop adapters. If those events do not appear in a live session, verify the host loaded the current package and that changed command hooks were reviewed/trusted; package tests alone cannot prove host loading.
|
|
191
191
|
|
|
192
|
+
For the native host install/update path, run:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
npx github:dyphn1/Harness-everything plugin-sync --json
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The command installs only when the plugin is absent. An installed Claude plugin uses the explicit Claude update command; an installed Codex plugin uses marketplace upgrade. If plugin state cannot be read, synchronization stops without re-adding or overwriting the plugin.
|
|
199
|
+
|
|
192
200
|
See [openai-plugin.md](openai-plugin.md) for installation and validation details.
|
|
193
201
|
|
|
194
202
|
### Public OpenAI Skills-only plugin behaves differently from local Codex plugin
|