Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Testing Plan: Holochain Agent Skill v1

Status: Pre-release checklist Target: v1.0.0 release gate

All tests are manual unless marked [auto]. Check each box before cutting a release.


T1 — Agent Skills Open Standard Conformance

Validate that SKILL.md frontmatter meets the Agent Skills Open Standard spec.

head -25 SKILL.md
#TestPass Condition
T1.1name field presentKey exists in frontmatter
T1.2name is lowercaseValue is holochain (no uppercase, no spaces)
T1.3name uses only alphanumeric + hyphensRegex: ^[a-z0-9-]+$
T1.4description field presentKey exists
T1.5description is between 1 and 1024 characterswc -c on the value
T1.6description mentions primary use casesContains: “zome”, “HDK”, “Holochain”
T1.7license field is Apache-2.0Value exactly matches
T1.8compatibility field present and non-emptyKey exists, value not blank
T1.9metadata.author is soushi888Value matches
T1.10metadata.version is presentKey exists, SemVer format
T1.11metadata.holochain-versions references current pinsContains hdk=0.7.0, hdi=0.8.0, holonix ref=main-0.7

T2 — File Integrity

Verify every file referenced in SKILL.md routing tables actually exists.

ls Workflows/*.md
ls *.md
#FileExists?
T2.1references/workflows/design-data-model.md
T2.2references/workflows/scaffold.md
T2.3references/workflows/implement-zome.md
T2.4references/workflows/design-access-control.md
T2.5references/workflows/package-and-deploy.md
T2.6references/architecture.md
T2.7references/scaffolding.md
T2.8references/patterns.md
T2.9references/access-control.md
T2.10references/cell-cloning.md
T2.11references/error-handling.md
T2.12references/testing.md
T2.13references/client.md
T2.14references/deployment.md
T2.15LICENSE at repo root
T2.16README.md at repo root

T3 — Routing Accuracy

For each Workflow Routing entry in SKILL.md, verify the trigger resolves to the correct file and the file’s content matches the described purpose.

#Trigger phraseExpected fileContent check
T3.1“design data model”references/workflows/design-data-model.mdContains Step 1 (domains/zome pairs) and Step 2 (entry type definition)
T3.2“new happ”references/workflows/scaffold.mdContains Nix install and hc scaffold happ commands
T3.3“implement zome”references/workflows/implement-zome.mdContains hc scaffold entry-type and integrity/coordinator structure
T3.4“who can call”references/workflows/design-access-control.mdContains CapAccess::Unrestricted, CapAccess::Assigned
T3.5“package”references/workflows/package-and-deploy.mdContains Kangaroo-Electron setup steps

For each Context Files entry in SKILL.md:

#Load-when triggerExpected fileContent check
T3.6coordinator/integrity splitreferences/architecture.mdContains hdi and hdk crate explanation
T3.7Nix flake setupreferences/scaffolding.mdContains nix develop and flake.nix
T3.8entry types, CRUDreferences/patterns.mdContains #[hdk_entry_helper] and create_entry()
T3.9cap grantsreferences/access-control.mdContains CapAccess::Unrestricted and init()
T3.10cell cloningreferences/cell-cloning.mdContains createCloneCell and clone_limit
T3.11WasmErrorreferences/error-handling.mdContains WasmError and ExternResult
T3.12Sweettest testsreferences/testing.mdContains await_consistency and two-agent scenario
T3.13holochain-clientreferences/client.mdContains callZome and signal handling
T3.14packaging, Kangarooreferences/deployment.mdContains .webhapp and versioning guidance

T4 — Content Coverage

Verify each of the 6 skill domains has substantive (non-stub) content.

#DomainPrimary filePass condition
T4.1Architecturereferences/architecture.md> 100 lines, covers integrity/coordinator split
T4.2Designreferences/workflows/design-data-model.mdHas at least 4 numbered steps with examples
T4.3Scaffoldreferences/scaffolding.md + references/workflows/scaffold.mdContains nix develop, hc scaffold happ, Nix flake template
T4.4Implementreferences/patterns.mdContains CRUD patterns, link types, validation section
T4.5Testreferences/testing.mdContains Sweettest setup, await_consistency, two-agent example
T4.6Deployreferences/deployment.md + references/workflows/package-and-deploy.mdContains kangaroo-electron, .webhapp bundling, versioning

T5 — Code Example Accuracy

Validate specific API calls against the actual HDK 0.7 API (use the hAppenings or Nondominium codebase as reference).

HDK / HDI API

#Example to validateExpected formFile
T5.1Entry type macro#[hdk_entry_helper] on structreferences/patterns.md
T5.2Entry type enum in integrity#[hdk_entry_types] on enum with #[unit_enum(UnitEntryTypes)]references/patterns.md
T5.3Create entrycreate_entry(EntryTypes::MyEntry(entry))references/patterns.md
T5.4Get entryget(hash, GetOptions::default()) or must_get_entry(hash)references/patterns.md
T5.5Delete linkdelete_link(link_hash, GetOptions::default()) (second arg required in 0.6)references/patterns.md
T5.6Link types enum#[hdk_link_types] on enumreferences/patterns.md
T5.7Update chain trackingcreate_link(original_hash, new_hash, LinkTypes::EntryUpdates, ())references/patterns.md
T5.8Validation signaturepub fn validate(op: Op) -> ExternResult<ValidateCallbackResult>references/patterns.md
T5.9post_commit infallible#[hdk_extern(infallible)] + pub fn post_commit(...)references/architecture.md or references/patterns.md
T5.10Remote signal cap grantCapAccess::Unrestricted grant created in init()references/access-control.md
T5.11consistency callawait_consistency([&alice_cell, &bob_cell])references/testing.md
T5.12Scaffold compile checkhc s sandbox generate workdir/references/workflows/implement-zome.md

Version pin consistency [auto]

grep -rn "hdk\s*=\s*\"=" . --include="*.md" --include="*.toml" | grep -v Plans/
grep -rn "hdi\s*=\s*\"=" . --include="*.md" --include="*.toml" | grep -v Plans/
grep -rn "holonix" . --include="*.md" | grep -v Plans/
#CheckExpected valuePass condition
T5.13hdk pin in SKILL.md Quick Reference"=0.7.0"All occurrences match
T5.14hdi pin in SKILL.md Quick Reference"=0.8.0"All occurrences match
T5.15holonix ref in SKILL.md and references/scaffolding.mdmain-0.7All occurrences match
T5.16No file references hdk = "0.6.*" or olderZero matches
T5.17PackageAndDeploy.md Cargo.toml example pins match currenthdk = "=0.7.0"Matches T5.13

T6 - Installation Tests

Every method below is now covered by an automated job in .github/workflows/validate.yml (the package and nix jobs). Run them by hand only when changing the installer, the files array, the archive builder or the flake. Each one starts from a clean scratch directory.

Option A - release archive, the documented default

mkdir -p /tmp/t6a/.claude/skills && cd /tmp/t6a
curl -fsSL https://github.com/Soushi888/holochain-agent-skills/releases/download/v1.0.0-rc.1/holochain-agent-skills.tar.gz | tar -xz -C .claude/skills
#TestPass condition
T6.1Skill installed at the printed path.claude/skills/holochain/SKILL.md exists
T6.2references/ present.claude/skills/holochain/references/workflows/ holds 8 files
T6.3assets/templates/ present17 template files copied
T6.4No workshop files leakedNo book.toml, SUMMARY.md, CHANGELOG.md, CLAUDE.md, docs/ or scripts/ under the installed directory
T6.5No build output copiedNo target/ or node_modules/ under the installed directory

Option B - harness detection, via the bundled installer

Build it from a clone first (bun run build), then run node <clone>/bin/install.mjs install from each scratch directory. Registry publishing is off, so this is how the installer is reached; the detection logic itself is unchanged.

#TestSetupPass condition
T6.6Nothing detectedEmpty directoryFalls back to .claude/skills and .agents/skills, and says so
T6.7Exactly one detectedmkdir .cursorInstalls to .cursor/skills without asking
T6.8Several detected, no TTYmkdir .claude .opencode .github, run with stdin closedInstalls to all three, does not prompt, does not hang
T6.9Several detected, TTYSame, under a ptyPrompts, honours a numeric selection, installs only what was chosen
T6.10Unknown target--target nopeExits 2 and names the known targets

Option C - archive integrity and the stable URL

# a stable (non-prerelease) tag also answers at the latest/download URL;
# a prerelease is skipped by it by design, so name the tag for a candidate
mkdir -p /tmp/t6c/.claude/skills && cd /tmp/t6c
curl -fsSL https://github.com/Soushi888/holochain-agent-skills/releases/latest/download/holochain-agent-skills.tar.gz | tar -xz -C .claude/skills
#TestPass condition
T6.11One command, correct shape.claude/skills/holochain/SKILL.md exists, no rename step needed
T6.12Checksums verifysha256sum -c SHA256SUMS passes for every asset
T6.13Archives are reproducibleTwo builds of the same commit produce identical SHA256SUMS
git clone https://github.com/Soushi888/holochain-agent-skills ~/holochain-agent-skills
cd /tmp/t6d && node ~/holochain-agent-skills/bin/install.mjs install --link
#TestPass condition
T6.14Symlink created.claude/skills/holochain is a symlink to skills/holochain in the clone
T6.15git pull propagatesPull in the clone, the symlinked install sees the change immediately
T6.16Reinstall over a symlinkA subsequent plain install replaces the symlink with a real directory rather than failing

Option E - Nix

#TestCommandPass condition
T6.17Skill derivation is rooted at the skillnix build .#holochain$out/SKILL.md exists
T6.18Bundle matches the archive shapenix build .#default$out/holochain/SKILL.md exists
T6.19The derivation gates on the validatorSeed a frontmatter/directory name mismatchnix build fails with that message
T6.20Flake checks passnix flake checkExit 0
T6.21mkSkillsHook survives a second shellEnter a consumer devShell twiceNo permission error on the second entry

T7 — Invocation Tests

Verify the skill loads and responds correctly in Claude Code.

#TestStepsPass condition
T7.1Explicit command invocationType /holochain in Claude CodeSkill loads, greets with Holochain context
T7.2Natural language trigger — workflowType “implement zome for Profile entry type”references/workflows/implement-zome.md guidance appears
T7.3Natural language trigger — context fileType “how do I set up a Sweettest test?”references/testing.md content cited
T7.4Natural language trigger — scaffoldType “scaffold a new happ called my-network”references/workflows/scaffold.md steps appear
T7.5Version questionAsk “what version of hdk does this skill target?”Responds with 0.7.0
T7.6Out-of-scope questionAsk a non-Holochain questionSkill does not answer as if it’s Holochain-related

T8 — PAI Independence

Verify the skill works in a clean Claude Code environment with no PAI infrastructure.

#TestStepsPass condition
T8.1No ~/.claude/PAI/ requiredTemporarily rename ~/.claude/PAI/ to ~/.claude/PAI_bak/, invoke skillSkill loads without error
T8.2No voice curl in skill filesgrep -r "localhost:8888" .Zero matches
T8.3No Algorithm routing referencesgrep -r "ALGORITHM|AlgorithmMode|PAI/Algorithm" .Zero matches in skill files
T8.4No PROJECTS.md referencesgrep -r "PROJECTS.md" .Zero matches in skill files
T8.5Restore PAI after testmv ~/.claude/PAI_bak ~/.claude/PAIRestore before next session

T9 — Workflow End-to-End Tests

For each workflow, walk through the steps in Claude Code with a real or simulated project and verify guidance is accurate and complete.

T9.A — DesignDataModel

Trigger: “design data model for a marketplace listing”

#StepPass condition
T9.A.1Step 1: Identify domainsSkill asks or describes how to map business nouns to zome pairs
T9.A.2Step 2: Define entry typesProduces a Rust struct definition with field types
T9.A.3Step 3: Define link typesProduces at least AgentTo*, PathTo*, *Updates link types
T9.A.4Step 4: Discovery strategyExplains Path anchor vs. agent-linked discovery tradeoffs
T9.A.5Step 5: Validation rulesProduces at least one validation rule per entry type
T9.A.6Output completenessProduces a summary table or structured output usable as implementation spec

T9.B — Scaffold

Trigger: “scaffold new happ called community-app”

#StepPass condition
T9.B.1Nix install stepProvides curl Determinate Nix installer command
T9.B.2flake.nix creationProvides template with holonix ref=main-0.7
T9.B.3hc scaffold happ commandCorrect command with app name parameter
T9.B.4First DNA scaffoldhc scaffold dna command shown
T9.B.5First zome pair scaffoldhc scaffold zome for integrity + coordinator
T9.B.6Compile verificationhc s sandbox generate workdir/ step present

T9.C — ImplementZome

Trigger: “implement zome for Profile entry type”

#StepPass condition
T9.C.1Scaffold stephc scaffold entry-type Profile and link-type commands shown
T9.C.2Integrity crateProduces Profile struct with #[hdk_entry_helper], entry type enum
T9.C.3Validation functionProduces validate() function with Op pattern matching
T9.C.4Coordinator — createProduces create_profile() using create_entry()
T9.C.5Coordinator — readProduces get_profile() using get() with GetOptions::default()
T9.C.6Coordinator — updateUses update_entry() and create_link() for update chain
T9.C.7Coordinator — deleteUses delete_entry() and handles link cleanup
T9.C.8Test scaffoldProduces at minimum a two-agent Sweettest structure

T9.D — DesignAccessControl

Trigger: “design access control for my admin zome”

#StepPass condition
T9.D.1Caller mapping tableProduces table of function → caller type
T9.D.2Unrestricted grantShows init() with CapAccess::Unrestricted for remote signals
T9.D.3Progenitor checkShows dna_info().provenance check for admin-only functions
T9.D.4Assigned grantShows CapAccess::Assigned pattern with agent key
T9.D.5recv_remote_signalShows correct extern signature and cap grant pairing

T9.E — PackageAndDeploy

Trigger: “package my happ for desktop distribution”

#StepPass condition
T9.E.1Version compatibility checkAsks for or checks hdk/hdi versions before proceeding
T9.E.2Kangaroo-Electron setupgit clone command for Kangaroo repo shown
T9.E.3.happ bundle stephc app pack or equivalent command shown
T9.E.4.webhapp bundle stepUI + .happ combined packaging step shown
T9.E.5Versioning guidanceExplains semantic version bump for DNA updates vs UI-only updates
T9.E.6CI/CD noteAt minimum mentions GitHub Actions or manual release process

T10 — Cross-Tool Compatibility

Claude Code (primary)

Covered by T7 and T9 above.

GitHub Copilot

#TestPass condition
T10.1Install to .claude/skills/holochain/ in project rootDirectory exists with SKILL.md
T10.2Copilot agent mode recognizes skillSkill name holochain appears in available skills list
T10.3Basic invocationCopilot responds with Holochain context when asked about zomes

Cursor

#TestPass condition
T10.4Install to .claude/skills/holochain/ in project rootDirectory exists with SKILL.md
T10.5Cursor agent detects skillSkill is listed or referenced in agent context
T10.6Basic invocationCursor responds with Holochain guidance when triggered

Augment Code

#TestPass condition
T10.7Install to .claude/skills/holochain/Directory exists
T10.8Skill loaded by AugmentSkill context is included in agent workspace

OpenAI Codex CLI

#TestPass condition
T10.9Install to .claude/skills/holochain/Directory exists
T10.10Codex reads SKILL.md frontmatterInvocation triggers Holochain-domain responses

Note: T10.2–T10.10 require access to each tool. Mark as N/A if the tool is not installed. T10.1 and T10.4 are always testable.


T11 — Repository Hygiene

#TestCommandPass condition
T11.1LICENSE file is Apache-2.0head -3 LICENSEContains “Apache License, Version 2.0”
T11.2No Plans/ content ships as skillSKILL.md routing table has no reference to Plans/Zero Plans/ entries in routing table
T11.3No docs/ loaded by skillSKILL.md routing table has no reference to docs/Zero docs/ entries in routing table
T11.4No broken markdown linksScan for relative markdown links in all filesAll linked files exist
T11.5No TODO / STUB markersgrep -rn "TODO|STUB|PLACEHOLDER" . --include="*.md"Zero matches in non-Plans/ files
T11.6README install command is the one that worksRun the first fenced command in README.md verbatim in a scratch directorySkill installed, exit 0
T11.8Nothing outside the payload shipsnpm pack --dry-run (the packaging manifest is still the payload allowlist, whether or not the package is published)Every path is under skills/, bin/, or is README.md / LICENSE / package.json
T11.9The four version declarations agreesh scripts/check-versions.shExit 0
T11.7CLAUDE.md license annotationgrep "Apache" CLAUDE.mdMatches Apache-2.0

Release Gate

All items below must be ✅ before tagging a release.

Spec & Structure (non-negotiable)

  • T1 — All 11 frontmatter checks pass
  • T2 — All 16 files exist
  • T3 — All 14 routing entries resolve correctly
  • T11 — All 7 hygiene checks pass

Content

  • T4 — All 6 domains have substantive content
  • T5.13–T5.17 — Version pins consistent across all files

Code Accuracy (sample — validate at least 6 of 12)

  • T5.1–T5.12 — At least 6 code examples verified against real codebase

Installation

  • T6.1–T6.4 — Option A passes
  • T6.5–T6.6 — Option B passes
  • T6.7–T6.9 — Option C passes

Invocation

  • T7.1–T7.5 — Claude Code invocation tests pass (T7.6 optional)

Workflows (all 5 required)

  • T9.A — DesignDataModel workflow complete
  • T9.B — Scaffold workflow complete
  • T9.C — ImplementZome workflow complete
  • T9.D — DesignAccessControl workflow complete
  • T9.E — PackageAndDeploy workflow complete

Independence

  • T8.1–T8.4 — PAI independence verified

Cross-tool (Claude Code required; others optional for v1)

  • T10.1 — Install path verified for at least one non-Claude-Code tool

Once all release gate items are checked, tag v1.0.0 and publish.