From harness-claude
Verifies planned integration tasks by inspecting codebase artifacts like exports and mounts, materializes ADRs, updates metadata after execution and verification.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Verify system wiring, materialize knowledge artifacts, and update project metadata. Integration is a gate, not a discovery phase -- it confirms that planned integration tasks completed.
Orchestrates multi-phase projects by dispatching isolated phase-agents for planning, execution, verification, integration, and review. Tracks state and chains artifacts; use after approving specs with 2+ phases.
Orchestrates 4-phase execution loop (IMPLEMENT, VALIDATE, ADVERSARIAL REVIEW, COMMIT) for complex work units with specs. Verifies outputs adversarially in multi-agent setups.
Orchestrates multi-session projects by implementing one feature per cycle from feature-list.json through TDD pipeline with quality gates and code review.
Share bugs, ideas, or general feedback.
Verify system wiring, materialize knowledge artifacts, and update project metadata. Integration is a gate, not a discovery phase -- it confirms that planned integration tasks completed.
No integration claim may be made without checking every planned integration task against the codebase.
Integration checking is mechanical: did the planned task produce the expected artifact? "It should be there" is not evidence. Check the file, check the import, check the registration. Report what you observed.
The words "should", "probably", "seems to", and "I believe" are forbidden in integration reports. Replace with "verified: [evidence]" or "not verified: [what is missing]."
When invoked by autopilot (or with explicit arguments), resolve paths before starting:
session-slug argument provided, set {sessionDir} = .harness/sessions/<session-slug>/. Pass to gather_context({ session: "<session-slug>" }). All report writes go to {sessionDir}/.{sessionDir}/handoff.json (read upstream execution/verification output). The plan contains integration tasks tagged category: "integration" and the integrationTier field.fast/thorough argument provided, use it. Otherwise default to standard.When no arguments are provided (standalone invocation), discover plan from docs/changes/<topic>/plans/ (preferred) or docs/plans/ (legacy fallback) or prompt. Global .harness/ paths used as fallback.
Before running sub-phases, resolve the effective integration tier:
Read plan-time tier. Extract integrationTier from the plan header (small, medium, or large). If absent, default to small.
Derive execution-time tier. Read the execution start commit from the session handoff (startCommit field in {sessionDir}/handoff.json). If unavailable, use the autopilot's startingCommit from {sessionDir}/autopilot-state.json. Diff startCommit..HEAD to analyze the execution phase:
newPackages > 0 -> large
newPublicExports > 5 -> large (minimum)
filesChanged > 15 AND newExports -> medium (minimum)
else -> keep plan estimate
To count these signals:
newPackages: count new package.json files in the diffnewPublicExports: count new export statements in barrel/index filesfilesChanged: count total files changed in the diffnewExports: boolean, true if any new export statements existApply max(planned, derived). The effective tier is the higher of the two.
Notify on escalation. If derived tier exceeds planned tier, notify the human:
Tier escalated from `small` to `medium`: 8 new exports detected.
Use emit_interaction with type confirmation to inform and get acknowledgment.
| Rigor | INTEGRATE behavior |
|---|---|
fast | WIRE only (default checks), auto-approve, no ADR drafting |
standard | Full tier-appropriate checks (WIRE for all; MATERIALIZE + UPDATE for medium and large) |
thorough | Full checks + human reviews every ADR draft + force knowledge graph verification |
Before running sub-phases, load session context:
gather_context({
path: "<project-root>",
intent: "Verify integration of executed plan",
skill: "harness-integration",
session: "<session-slug-if-provided>",
include: ["state", "learnings", "handoff", "graph", "businessKnowledge", "sessions", "validation"]
})
Load the plan, identify integration tasks (tagged category: "integration"), and group them by sub-phase:
Report progress: **[WIRE]** Checking system wiring
WIRE always runs, regardless of tier. It has two parts: default checks (always) and task-specific checks (when integration tasks exist).
These run even with zero explicit integration tasks (D8: barrel exports and validation are cheap and catch real problems).
Barrel export check. Run pnpm run generate-barrel-exports --check. If the --check flag is not supported, fall back to:
pnpm run generate-barrel-exportsgit diff --name-onlyHarness validate. Run pnpm harness validate. Must pass. Record result.
For each integration task tagged category: "integration" that relates to wiring:
Entry point reachability. Trace from known entry points to new code:
createProgram() registration chaingetToolDefinitions() or tool registration filesskill.yaml + SKILL.md exist at the expected path and skill appears in harness skill list output or discovery glob resultsSkill discovery verification. If a new skill was created:
agents/skills/claude-code/<skill-name>/skill.yaml exists and has valid YAMLagents/skills/claude-code/<skill-name>/SKILL.md exists and is non-emptyharness skill list output (or would appear based on glob pattern)Route mount verification. If a new API route was added:
Produce wiring report. Write {sessionDir}/integration-wiring.json:
{
"subPhase": "wire",
"tier": "<effective-tier>",
"timestamp": "<ISO-8601>",
"defaultChecks": {
"barrelExports": { "status": "pass|fail", "detail": "<description>" },
"harnessValidate": { "status": "pass|fail", "detail": "<output summary>" }
},
"taskChecks": [
{
"taskRef": "Task N: <name>",
"check": "<what was verified>",
"status": "pass|fail",
"evidence": "<file:line or command output>"
}
],
"verdict": "pass|fail"
}
Report progress: **[MATERIALIZE]** Checking knowledge materialization
Skip this sub-phase for small tier or fast rigor. For medium and large tiers:
Read handoff decisions. Load {sessionDir}/handoff.json from all phases in this session. Collect all entries from the decisions array.
Classify decisions. For each decision:
Auto-draft ADRs from architectural decisions. For each architectural decision:
a. Assign ADR number. Scan docs/knowledge/decisions/ for existing ADR files matching NNNN-*.md. Take the highest number and increment by 1. If the directory does not exist, create it and start at 0001.
b. Generate slug. Convert the decision title to a URL-safe slug (lowercase, hyphens, no special characters).
c. Write ADR to docs/knowledge/decisions/NNNN-<slug>.md:
---
number: NNNN
title: <decision title>
date: <ISO date>
status: accepted
tier: large
source: <spec path or session slug>
supersedes: <prior ADR number, if any>
---
## Context
<What situation prompted this decision? What constraints existed?>
## Decision
<What was decided and why?>
## Consequences
<What follows from this decision -- positive, negative, and neutral?>
d. Present for review. In thorough rigor, present each ADR draft via emit_interaction (type: confirmation) and wait for human approval. In standard rigor, auto-approve but log the draft for review.
ingest_source with the decision metadata so decisions become queryable graph nodesVerify documentation integration tasks. For each integration task tagged category: "integration" that relates to documentation:
Produce materialization report. Write {sessionDir}/integration-materialization.json:
{
"subPhase": "materialize",
"tier": "<effective-tier>",
"timestamp": "<ISO-8601>",
"decisions": {
"total": 0,
"architectural": 0,
"minor": 0
},
"adrs": [
{
"number": "NNNN",
"title": "<title>",
"path": "docs/knowledge/decisions/NNNN-<slug>.md",
"status": "drafted|approved"
}
],
"graphEnrichment": {
"nodesCreated": 0,
"status": "pass|fail|skipped"
},
"documentationChecks": [
{
"taskRef": "Task N: <name>",
"status": "pass|fail",
"evidence": "<description>"
}
],
"verdict": "pass|fail|skipped"
}
Report progress: **[UPDATE]** Checking project metadata updates
Skip this sub-phase for small tier or fast rigor. For medium and large tiers:
Roadmap sync. If docs/roadmap.md exists, call manage_roadmap with sync and apply: true to update feature status. If manage_roadmap is unavailable, fall back to noting the roadmap needs manual sync.
Changelog verification. If CHANGELOG.md exists at the project root:
CHANGELOG.md exists, skip silently (not all projects use changelogs)Spec cross-reference annotation. Read the spec at its path (from the plan or handoff):
Produce update report. Write {sessionDir}/integration-updates.json:
{
"subPhase": "update",
"tier": "<effective-tier>",
"timestamp": "<ISO-8601>",
"roadmap": { "status": "synced|skipped|failed", "detail": "<description>" },
"changelog": { "status": "pass|fail|skipped", "detail": "<description>" },
"specCrossRef": { "status": "annotated|skipped", "detail": "<description>" },
"verdict": "pass|fail|skipped"
}
After all applicable sub-phases complete, produce the combined integration report:
Write combined report. Write {sessionDir}/phase-{N}-integration.json:
{
"phase": "integration",
"tier": "<effective-tier>",
"rigor": "<fast|standard|thorough>",
"timestamp": "<ISO-8601>",
"subPhases": {
"wire": { "verdict": "pass|fail", "reportPath": "{sessionDir}/integration-wiring.json" },
"materialize": {
"verdict": "pass|fail|skipped",
"reportPath": "{sessionDir}/integration-materialization.json"
},
"update": {
"verdict": "pass|fail|skipped",
"reportPath": "{sessionDir}/integration-updates.json"
}
},
"verdict": "pass|fail",
"failures": [
{
"subPhase": "<wire|materialize|update>",
"taskRef": "Task N: <name>",
"issue": "<what is incomplete>",
"fix": "<specific fix instruction>"
}
]
}
Report verdict. Summarize pass/fail per sub-phase. On failure, list exactly which integration tasks are incomplete with specific fix instructions.
On PASS: Write handoff and emit transition to REVIEW:
emit_interaction({
path: "<project-root>",
type: "transition",
transition: {
completedPhase: "integration",
suggestedNext: "review",
reason: "Integration passed at all applicable sub-phases",
artifacts: ["<report paths>"],
requiresConfirmation: false,
summary: "Integration passed: tier <tier>. WIRE passed. MATERIALIZE <passed|skipped>. UPDATE <passed|skipped>.",
qualityGate: {
checks: [
{ "name": "wire-checks", "passed": true },
{ "name": "materialize-checks", "passed": true },
{ "name": "update-checks", "passed": true },
{ "name": "harness-validate", "passed": true }
],
allPassed: true
}
}
})
Immediately invoke harness-code-review without waiting for user input.
On FAIL: Do NOT emit a transition. Report incomplete items with fix instructions. Present options via emit_interaction:
emit_interaction({
path: "<project-root>",
type: "question",
question: {
text: "Integration failed. <N> items incomplete. How to proceed?",
options: [
{ "label": "fix -- Re-enter EXECUTE with integration-specific fix tasks, then re-VERIFY, re-INTEGRATE", "risk": "low", "effort": "medium" },
{ "label": "skip -- Record decision and proceed to REVIEW (human override)", "risk": "medium", "effort": "low" },
{ "label": "stop -- Save state and exit", "risk": "low", "effort": "low" }
],
recommendation: { "optionIndex": 0, "reason": "Fixing integration gaps now prevents review rework.", "confidence": "high" }
}
})
decisions[] in handoff. Proceed to REVIEW.Write handoff to the session-scoped path when session slug is known, otherwise fall back to global:
.harness/sessions/<session-slug>/handoff.json.harness/handoff.json[DEPRECATED] Writing to
.harness/handoff.jsonis deprecated. In autopilot sessions, always write to.harness/sessions/<slug>/handoff.jsonto prevent cross-session contamination.
{
"fromSkill": "harness-integration",
"phase": "COMPLETE",
"summary": "<verdict summary>",
"tier": "<effective-tier>",
"artifacts": ["<report paths>", "<ADR paths if any>"],
"verdict": "pass | fail",
"gaps": ["<gap descriptions if any>"],
"decisions": [{ "what": "<decision>", "why": "<rationale>" }]
}
Session summary (if session known): Update via writeSessionSummary with skill, status (Integration <PASS|FAIL>. Tier: <tier>. <N> checks, <N> gaps.), keyContext, and nextStep.
| Section | Read | Write | Purpose |
|---|---|---|---|
| terminology | yes | no | Consistent language in integration reports |
| decisions | yes | yes | Reads all phase decisions for ADR drafting; writes integration decisions |
| constraints | yes | no | Respect existing constraints during checks |
| risks | yes | yes | Reads risks; writes integration risks discovered during checks |
| openQuestions | yes | yes | Reads questions; resolves those answered by integration evidence |
| evidence | yes | yes | Prior evidence; writes wiring, materialization, and update evidence |
When to write: After each sub-phase, append evidence entries. After ADR drafting, write decisions.
When to read: During Context Loading via gather_context with include: ["state", "learnings", "handoff", "graph", "businessKnowledge", "sessions", "validation"].
Every pass/fail assertion in the integration report MUST include concrete evidence:
file:line with observed content (e.g., src/index.ts:12 -- "exports NotificationService")pnpm run generate-barrel-exports --check -- "No changes detected")harness validate outputgit diff --name-only output for barrel export checksharness skill list output for skill discovery verificationWhen to cite: At every check. Each pass/fail in the wiring, materialization, and update reports must be backed by evidence.
Uncited claims: Any integration assertion without direct evidence is an integration failure. This skill does not use [UNVERIFIED] -- if evidence cannot be produced, verdict is FAIL.
gather_context -- Load session-scoped state, learnings, handoff, and validation before sub-phases. session parameter scopes to session directory.harness validate -- Run during WIRE default checks. Must pass.harness check-deps -- Run during WIRE if new modules were added.ingest_source -- Run during MATERIALIZE to enrich knowledge graph with decision nodes.manage_roadmap -- Run during UPDATE to sync roadmap status. Use sync with apply: true.emit_interaction -- Tier escalation notification, ADR review (thorough mode), fail/skip/stop decision, transition to REVIEW on pass..harness/sessions/<slug>/ contains all report files. Do not write to global .harness/ when session slug is known.| Flag | Corrective Action |
|---|---|
| "Barrel exports probably have not changed, so I will skip the check" | STOP. WIRE default checks always run. "Probably" is forbidden. Run the check and report the result. |
| "The ADR looks correct from the decision text, no need to present for review" | STOP. In thorough mode, every ADR draft requires human review. In standard mode, auto-approve but log. Do not skip the review protocol. |
| "Integration tasks are just bureaucracy, I will mark them as passed" | STOP. Integration tasks exist because brainstorming and planning identified real connection points. Each must be verified with evidence. |
| "The knowledge graph enrichment failed but it is not critical" | STOP. In thorough mode, graph enrichment failure is a FAIL. In standard mode, log the failure and include in the report. |
| "I will fix the missing barrel export myself to make WIRE pass" | STOP. Integration identifies gaps -- integration never fills them. Record as FAIL with fix instructions. The executor fixes it. |
| Rationalization | Reality |
|---|---|
| "WIRE passed so the feature is properly integrated" | WIRE checks wiring only. For medium/large tiers, MATERIALIZE and UPDATE must also pass. Partial integration is not integration. |
| "This is a small change, so I can skip tier derivation and just use the plan estimate" | Tier derivation is mandatory. Even if the plan says small, execution may have produced more changes than expected. Always derive and compare. |
| "The ADR format is close enough, no need to match the exact frontmatter schema" | ADRs must match the spec format exactly (number, title, date, status, tier, source, supersedes). The knowledge pipeline depends on consistent frontmatter for parsing. |
| "Integration tasks were not in the plan, so there is nothing to check" | WIRE default checks always run regardless of planned integration tasks (D8). If the plan has no integration tasks, WIRE still checks barrel exports and runs validate. |
| "I found an integration gap but it is minor, so I will mark it as pass with a note" | A gap is a FAIL, not a conditional pass. Record the gap, report it, and let the human decide whether to fix or skip. |
## Integration Report
**Tier:** small (plan: small, derived: small)
**Rigor:** standard
### WIRE
- [PASS] Barrel exports: `pnpm run generate-barrel-exports --check` -- no changes
- [PASS] Harness validate: passes
- No integration tasks to verify
### MATERIALIZE
- [SKIPPED] Small tier -- no materialization required
### UPDATE
- [SKIPPED] Small tier -- no updates required
### Verdict: PASS
## Integration Report
**Tier:** large (plan: medium, derived: large -- escalated due to new package)
**Rigor:** standard
### WIRE
- [PASS] Barrel exports: regenerated, git diff shows no changes
- [PASS] Harness validate: passes
- [PASS] Skill discovery: harness-integration/skill.yaml exists, SKILL.md exists (420 lines)
- [PASS] Entry point: skill appears in harness skill list output
- [FAIL] Route mount: /api/integration not mounted in router
### MATERIALIZE
- [PASS] ADR 0001-tiered-integration-rigor.md drafted and auto-approved
- [PASS] Knowledge graph: 3 decision nodes created via ingest_source
- [PASS] AGENTS.md updated with integration phase description
### UPDATE
- [PASS] Roadmap synced: integration-phase moved to in-progress
- [FAIL] Changelog: no entry in CHANGELOG.md for integration phase
- [PASS] Spec cross-reference: annotated with implementation file links
### Verdict: FAIL -- 2 items incomplete
1. Route mount /api/integration not found in router configuration
Fix: Add route import and mount in src/api/routes/index.ts
2. Changelog entry missing
Fix: Add entry under Unreleased: "Added integration phase with tiered wiring verification"
generate-barrel-exports script. Add it to package.json or skip barrel export verification."ingest_source is not available, record materialization as skipped with reason. Do not block on tooling absence for medium tier. For large tier in thorough mode, escalate.docs/knowledge/decisions/ on first ADR write. This is expected for projects that have not used ADRs before.