Repository navigation
feat(skills): add OpenTofu IaC release management skill with findings ledger - #28
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intent
Said on 2026-10-05 after a day of failed QA infrastructure releases and a scout audit of them: "Whatever we learn, we should make into a finding, add it to our fm tooling so that fm can turn it into a skill for managing opentofu iac." Context: the audit found the releases failed because secret, grant, image, database, realm and recovery prerequisites lived outside the executable OpenTofu release; mocked tests stayed green while Azure refused creates and left orphan shells. Turn those lessons into a reusable firstmate skill for managing OpenTofu infrastructure-as-code releases, with the findings recorded as a citable ledger.
What Changed
opentofu-iac-managementskill. It covers scoping and briefing a release, a single protected orchestration (exclusive lock, an executable prerequisite manifest, a live prerequisite gate that fails closed, and immutable saved plans for each phase), private Key Vault and identity boundaries, image publication and executed bootstrap receipts, scoped recovery after failed creates, and layered verification. The skill gives no authority to mutate or destroy infrastructure.references/findings.md, a citable ledger of 14 findings (IAC-001 to IAC-014) from the failed QA infrastructure releases. Topics include prerequisites that were never executable, grants that must exist before consumers, preview runs that don't verify anything, orphan shells left by failed Azure creates, mocked tests that pass while real releases fail, and destroy/rebuild as the acceptance boundary.agent-skill-trigger-indexand marks both new files with theagent-runtimeaudience indocs/documentation-audiences.json.🤖 Generated with Claude Code
Risk Assessment
✅ Low: A documentation-only change that adds an agent-only skill, its findings ledger and their index and audience entries, following existing patterns, with no executable code changed.
Testing
I ran the repo's real documentation-audience checker on the change. It passes. In a throwaway clone I broke the change two ways: removing its inventory entries and breaking its link to the ledger. The checker failed closed both times. I then started a real Claude Code primary in a disposable lab home on a private tmux socket. Given two OpenTofu tasks it had not been told the skill name for (scoping a destroy-and-rollout brief, and diagnosing an orphan failed-create shell), it loaded opentofu-iac-management by itself both times and answered with the skill's rules: zero human actions after destroy except approvals, no unmocked tofu test against the real release root, and no hand deletion of the shell without receipted ownership proof followed by a fresh approved plan. Every finding ID it cited (IAC-003/004/008/009/011/012/014) exists in the ledger. The lab was torn down afterwards. All scenarios passed.
bin/fm-doc-audience-check.shexit 0, surfaces=124 local_links=734)Evidence: Doc audience checker passes on target commit
Source: Doc audience checker passes on target commit
fm-doc-audience-check: ok surfaces=124 local_links=734 exit=0Evidence: Doc audience checker rejects missing inventory entries and broken ledger link
Source: Doc audience checker rejects missing inventory entries and broken ledger link
unclassified: .agents/skills/opentofu-iac-management/SKILL.md, .../references/findings.md exit=1 unresolved local link in .agents/skills/opentofu-iac-management/SKILL.md: references/findings.md exit=1Evidence: Lab Claude primary transcript: scope/brief destroy-and-rollout loads the skill
Source: Lab Claude primary transcript: scope/brief destroy-and-rollout loads the skill
Evidence: Lab Claude primary transcript: orphan-shell diagnosis loads the skill and refuses hand deletion
Source: Lab Claude primary transcript: orphan-shell diagnosis loads the skill and refuses hand deletion
Pipeline
Updates from git push no-mistakes