feat: close the setup-contract wave — final setups + contract gate - #362
Conversation
Closing tranche of wave #314 (epic #313, dim 8): - disk-hygiene 0.4.0 and guardrails 0.7.0 gain their setup skills (unblocked now that #286/#305 landed): thin check-centric, guidance- only apply, platform-posture and per-guard-toggle reporting, jq fails-open surfaced as the FAIL it is. - review 0.14.0: its setup — outside the wave list, caught by the new gate — adopts check/apply while keeping the standards-contract binding's by-reference discipline and explicit-confirmation gates. - validate-plugin-contracts.mjs now enforces the contract shape on every setup skill: check leads the argument-hint, the read-only check action is documented, and apply exists unless the skill declares the doctrine's check-only userConfig-only carve-out. 33 setup skills pass fleet-wide. ## Related - Closes #314 - Part of #313 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 40s —— View job PR Review: feat/setup-contract-closing
Contract gate —
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 172ed171de
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (!/`apply`/.test(body) && !/check-only/i.test(body)) { | ||
| fail(path, "setup skills must document apply, or declare the check-only userConfig-only carve-out"); |
There was a problem hiding this comment.
Tighten the apply-action contract check
This only checks whether the body contains the literal `apply`, rather than whether apply is an actual documented action or the setup explicitly satisfies the check-only carve-out. A future setup that says something incidental such as “do not apply changes” but exposes no apply action will pass this new gate even though it violates the required check + apply contract in docs/PLUGIN-PHILOSOPHY.md; parse an action heading/routing declaration, or require the carve-out wording when no apply action is present.
Useful? React with 👍 / 👎.
| 3. **Platform posture** — detect the current OS family and report its documented lane per | ||
| the README: Windows (full, `lstat` reparse + Win32, never UAC), Linux (full when | ||
| `/proc/self/mountinfo` is readable; `lsof` needed only for the optional execution | ||
| lane — absent `lsof` is INFO with the reduced-capability note), macOS (audit/report | ||
| only by design — INFO, not a defect). |
There was a problem hiding this comment.
On Windows, this check is instructed to report a “full” lane, but the README explicitly says that Windows “never enters the execution lane” and returns execution-platform-unsupported at preview. Consequently, a Windows user can receive a successful setup posture and only discover at cleanup time that deletion is unavailable; classify Windows as audit/report-only (an INFO, like macOS) and state that execution requires Linux.
Useful? React with 👍 / 👎.
Summary
Closing tranche of wave #314 (epic #313, dim 8) — with this PR, every plugin in the fleet conforms to the uniform setup contract and the contract is machine-enforced.
checkprobes Python 3.11+ (absolute-interpreter note), conditional Git, and the current OS family's documented lane (Linuxlsofoptional-execution note, macOS audit-only by design as INFO); guidance-onlyapply; disabled-toggle downgrade.checkreads the guard scripts +hooks.jsonas truth and probes Bash 5.0+,jq(absence = every guard fails open — surfaced as FAIL), all eight guard toggles, thecli-flag-verifyscan surface, and theblock-dangerous-gitallowlist; guidance-onlyapply.check | applywhile keeping the standards-contract binding's by-reference discipline and explicit-confirmation gates intact.validate-plugin-contracts.mjsnow enforces the shape on everyskills/setup/SKILL.md:checkleads theargument-hint, the read-only check action is documented, andapplyexists unless the skill declares the doctrine's check-only userConfig-only carve-out (feat: check-only setup carve-out for userConfig-only plugins (bug-report, miro) #361). 33 setup skills pass fleet-wide; future setups are gated, not hand-reviewed.Verification
validate-plugins.sh,validate-plugin-contracts.mjs(33 setup skills, 1541 files), markdownlint,typos: green locally. The gate change was validated by its own first catch (review).Related
🤖 Generated with Claude Code