Skip to content

fix(nanoclaw): make legacy package non-installable - #308

Draft
davida-ps wants to merge 5 commits into
davida-ps/npx-install-doc-platform-policyfrom
davida-ps/nanoclaw-v2-truthfulness
Draft

fix(nanoclaw): make legacy package non-installable#308
davida-ps wants to merge 5 commits into
davida-ps/npx-install-doc-platform-policyfrom
davida-ps/nanoclaw-v2-truthfulness

Conversation

@davida-ps

@davida-ps davida-ps commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • reclassify clawsec-nanoclaw 0.0.11 as a historical, runtime-unverified NanoClaw v1-era record
  • declare installable: false, assert no supported NanoClaw version range, and explicitly reject NanoClaw v2 compatibility
  • remove the legacy TypeScript adapter, policy files, and embedded key from the release SBOM while retaining source history in the repository
  • replace install and scheduler instructions with denial-only guidance and successor acceptance requirements
  • leave the unshipped legacy runtime source byte-identical to the base branch
  • add a regression contract for metadata, documentation, release payload, and unsupported-version claims

Why

The existing package described pre-v2 NanoClaw surfaces as current and could be read as usable on NanoClaw v2. We do not have runtime acceptance evidence for a supported NanoClaw adapter. Shipping the old executable payload would therefore be misleading and unsafe.

This PR preserves the historical record without presenting it as an installable skill. A future NanoClaw v2 adapter must be a separately tested release with a pinned compatibility range and apply, update, resume, removal, and rollback evidence.

Scope

Remote acceptance

The exact combined working tree was archived, copied with scp, and tested in a fresh quarantine on davida@20.14.133.241 before these commits were pushed.

  • quarantine: /tmp/clawsec-nanoclaw-cleanup.RRDtmA
  • clean extraction with no AppleDouble sidecars
  • npm ci: 422 packages, zero reported vulnerabilities
  • every skills/clawsec-nanoclaw/test/*.test.mjs test passed, including 8/8 hardening tests
  • python3 utils/validate_skill.py skills/clawsec-nanoclaw passed
  • every scripts/test-skill-*.mjs test passed, including 19 hostile-archive cases
  • bash -n scripts/release-skill.sh passed
  • ESLint passed with zero warnings
  • npx tsc --noEmit passed
  • npm run build passed and generated 115 wiki exports
  • the exact skill returned false from the installability contract
  • --require-publication rejected the exact skill as expected

No local test or build is used as acceptance evidence.

Release boundary

This PR is draft-only. Do not merge, tag, create a GitHub Release, or publish to ClawHub or another skill store as part of this work.

Comment thread skills/clawsec-nanoclaw/SKILL.md Outdated
Comment on lines 107 to 111
if (!safety.safe) {
// Return the advisory evidence to the host installer or operator.
await showSecurityWarning(safety.advisories);
if (await getUserConfirmation()) {
await installSkill(userRequestedSkill);
}
return { recommendation: 'do-not-install', safety };
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Invalid recommendation label

recommendation: 'do-not-install' doesn't match the documented recommendation enum in skills/clawsec-nanoclaw/docs/SKILL_SIGNING.md, so the example diverges from the published contract — should we switch it to block or update the enum everywhere if a new label is intended?

Severity

Want Baz to fix this for you? Activate Fixer

Other fix methods

Fix in Cursor

Prompt for AI Agents
Before applying, verify this suggestion against the current code. In
skills/clawsec-nanoclaw/SKILL.md around lines 107-111, in the “Pre-Installation
Advisory Review” example logic that returns { recommendation: 'do-not-install', safety
} when !safety.safe, fix the inconsistent recommendation label. Verify the published
contract in skills/clawsec-nanoclaw/docs/SKILL_SIGNING.md (enum values “install” |
“block”) and change the example to use the correct rejection value (likely
recommendation: 'block') so the example matches the documented schema and surrounding
terminology. If the intent is to introduce 'do-not-install' as a new enum value, update
the docs enum everywhere it’s defined and keep the example + schema consistent.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commit 09b72d3 addressed this comment by deleting the example containing the invalid do-not-install recommendation label.

Comment on lines +19 to +27
const skillJson = JSON.parse(read('skill.json'));
const skill = read('SKILL.md');
const readme = read('README.md');
const install = read('INSTALL.md');
const signing = read('docs/SKILL_SIGNING.md');
const integrity = read('docs/INTEGRITY.md');
const changelog = read('CHANGELOG.md');
const signatureTool = read('mcp-tools/signature-verification.ts');
const advisoryTool = read('mcp-tools/advisory-tools.ts');

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False-confidence contract test

nanoclaw-v1-compatibility.test.mjs only reads mcp-tools/signature-verification.ts and mcp-tools/advisory-tools.ts as text and matches prose strings, so runtime recommendation drift from clawsec_verify_skill_package can slip through without failing the suite — should we exercise the MCP tools or assert the JSON recommendation fields too?

Severity

Want Baz to fix this for you? Activate Fixer You can also update your AI coding guidelines based on this comment by apply pr to [branch name]

Other fix methods

Fix in Cursor

Prompt for AI Agents
Before applying, verify this suggestion against the current code. In
skills/clawsec-nanoclaw/test/nanoclaw-v1-compatibility.test.mjs around lines 19-27, the
test defines `signatureTool` and `advisoryTool` by reading the MCP tool TypeScript files
as plain text via `read('mcp-tools/...ts')`. Refactor this so the test actually
imports/instantiates the real MCP tool modules and runs the relevant
verification/advisory functions (or whatever exported entrypoints exist) with stable
test inputs, then asserts against the runtime output (e.g., the returned
`recommendation`/fields) instead of regex-matching the source text; update the related
assertions that currently target those strings (around lines ~68-77) to validate the
tool’s output matches the compatibility expectations. This ensures recommendation
drift at runtime can’t slip by as long as the prose regexes still match.

@davida-ps
davida-ps changed the base branch from main to davida-ps/npx-install-doc-platform-policy July 22, 2026 21:24
@davida-ps davida-ps changed the title fix(nanoclaw): mark legacy adapter v1-only fix(nanoclaw): make legacy package non-installable Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant