Skip to content

feat: make the gate usable — request builder and Claude Code plugin packaging - #6

Merged
Zulut30 merged 2 commits into
mainfrom
feat/onboarding-ergonomics
Aug 17, 2026
Merged

feat: make the gate usable — request builder and Claude Code plugin packaging#6
Zulut30 merged 2 commits into
mainfrom
feat/onboarding-ergonomics

Conversation

@Zulut30

@Zulut30 Zulut30 commented Aug 17, 2026

Copy link
Copy Markdown
Member

Summary

Two adoption blockers, both outside ROADMAP-10.

1. tools/devops_plan.py — the gate was correct but unusable. Producing a v2 operation request by hand meant writing four correlated sha256 values (policy, target profile, plan digest of the exact argv, duplicated into every approval). The builder computes all of them, derives the minimum risk class the policy implies and refuses to understate it, enforces acceptance criteria at R2+, and prints the remaining human obligations (approval count, separation of duties, change lock, recovery evidence).

Crucially it never manufactures authorization: approval slots, required locks, and required recovery fields are emitted structurally incomplete, so the gate refuses a freshly generated request until a real approver fills it. test_generated_request_is_not_authorized_until_a_human_fills_approvals pins that property; test_planned_request_executes_after_approval proves the full plan → approve → execute path works.

2. .claude-plugin/ — installation is now one command.

/plugin marketplace add Manacost-Labs/devops-skill
/plugin install devops-skill-platform@manacost-devops

The plugin declares the repository root as its skills container ("skills": "."), so all 22 modules load without relayout. It ships skills only: the PreToolUse gate denies mutating shell commands session-wide, which would be a hostile surprise for someone who installed the plugin for the skills, so enforcement stays opt-in via docs/hooks-setup.md. A test asserts plugin.json declares no hooks, so that decision cannot regress silently.

Both files were written against the current published plugin and marketplace schemas; devops_plan.py is registered as a read-only script with the command gate and added to the release, public-source, and verifier allowlists.

Testing

  • python devops-platform-contracts/scripts/validate_platform.py → OK, 22/22 compatible installed skills
  • python -m unittest discover -s tests → 60 tests OK (was 53)
  • python tools/build_public_source.py.claude-plugin/ and tools/devops_plan.py present in the manifest

🤖 Generated with Claude Code

Zulut30 and others added 2 commits August 18, 2026 00:49
Creating a v2 request by hand meant writing four correlated sha256
values, so the gate was correct but unusable. tools/devops_plan.py
computes the canonical command digest, the registered policy digest,
and the validated target-profile digest, derives the minimum risk class
the policy implies and refuses to understate it, requires acceptance
criteria at R2 and above, and prints every remaining human obligation.

Planning grants no authority: approval slots, required change locks,
and required recovery evidence are emitted structurally incomplete, so
the gate refuses a generated request until a real approver fills it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
.claude-plugin/plugin.json exposes the repository root as the skills
container and .claude-plugin/marketplace.json publishes it, so install
becomes '/plugin marketplace add Manacost-Labs/devops-skill' instead of
a clone and a profile decision. The plugin ships skills only: the
PreToolUse gate denies mutating commands session-wide, which must stay
an explicit operator choice, so it is documented rather than enabled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Zulut30
Zulut30 requested a review from Shpuntyara as a code owner August 17, 2026 22:49
@Zulut30
Zulut30 enabled auto-merge (rebase) August 17, 2026 22:49
@Zulut30
Zulut30 merged commit df64bd8 into main Aug 17, 2026
3 checks passed
@Zulut30
Zulut30 deleted the feat/onboarding-ergonomics branch August 17, 2026 22:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant