chore: upgrade openspec to 1.6.0-beta.1 with OMP tool integration#37
Conversation
- Pin @fission-ai/openspec to exact 1.6.0-beta.1 (OMP tool support, converged validate/view/archive resolution, archive exit-code fix) - Generate repo-scoped OMP skills (.omp/skills/openspec-*) and /opsx:* commands via openspec init --tools oh-my-pi - Align generated archive skill/command with the repo archive ceremony: openspec archive + --skip-specs fallback for pre-seeded capabilities, hand-apply deltas, strict validate; -y forbidden Reviewer finding (raw mkdir/mv archive step bypassing the ceremony) fixed before commit. All local gates green under the beta binary.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📝 WalkthroughWalkthroughThis PR adds four new OpsX slash-command markdown docs (opsx-propose, opsx-explore, opsx-apply, opsx-archive) and corresponding skill definitions under ChangesOpsX Command and Skill Documentation
Estimated code review effort: 3 (Moderate) | ~25 minutes Graphify Cache and Report Regeneration
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related PRs
Poem
Caution Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional.
❌ Failed checks (1 error)
✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Pre-merge verification: archive path exercised under 1.6.0-beta.1Throwaway probe (scratch openspec project replicating the pre-seeded-spec conflict pattern):
Two caveats:
|
Correction/extension to the archive verification aboveProbed the exact command the patched skill prescribes (
Key facts:
Decision needed (unchanged from caveat 1, now sharper): for unattended new-capability archives, pick one:
Not resolved in this PR; the patched skill text stays as-is pending the call. |
There was a problem hiding this comment.
All reported issues were addressed across 31 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.omp/commands/opsx-apply.md:
- Around line 45-47: The blocked-state handoff in the opsx apply flow points to
a non-existent recovery command. Update the blocked branch in opsx-apply so it
references the real continue path used by this stack, namely
openspec-continue-change, or add a working /opsx-continue alias that routes
there. Make sure the user-facing message and any related help text in the
opsx-apply command stay consistent with the actual recovery entry point.
In @.omp/commands/opsx-explore.md:
- Around line 57-72: The fenced examples in opsx-explore.md are missing language
tags, which triggers MD040; update the affected fenced blocks and the matching
skill file so the narrative/ASCII sections use text or markdown and any shell
snippets use bash. Use the existing fence content to identify the blocks around
the ASCII diagram and the other repeated sections, and apply consistent labels
across all matching examples.
In @.omp/skills/openspec-apply-change/SKILL.md:
- Around line 51-54: The blocked-state recovery guidance is inconsistent between
the apply-change flow and the documented command name. Update the handle-states
instructions in the openspec apply-change skill so the `state: "blocked"` path
points to the same recovery command as the paired command doc, using the
documented `/opsx-continue` name instead of `openspec-continue-change`. Keep the
`state: "all_done"` and implementation paths unchanged, and ensure the recovery
wording is consistent wherever this blocked-state guidance appears.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: b30ee475-2516-42ef-ba2e-9244378b9141
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (30)
.omp/commands/opsx-apply.md.omp/commands/opsx-archive.md.omp/commands/opsx-explore.md.omp/commands/opsx-propose.md.omp/skills/openspec-apply-change/SKILL.md.omp/skills/openspec-archive-change/SKILL.md.omp/skills/openspec-explore/SKILL.md.omp/skills/openspec-propose/SKILL.mdgraphify-out/.graphify_labels.jsongraphify-out/2026-07-09/.graphify_labels.jsongraphify-out/2026-07-09/GRAPH_REPORT.mdgraphify-out/2026-07-09/cost.jsongraphify-out/2026-07-09/graph.jsongraphify-out/2026-07-09/manifest.jsongraphify-out/GRAPH_REPORT.mdgraphify-out/cache/ast/v0.9.10/4db9403f888542702a3671a179ec043a6b120ada53f17c049b797bb2691e3cbc.jsongraphify-out/cache/ast/v0.9.10/73800af32b139cebdca1d7941bfbd152c20a7b394c2d9804e376f38113ecc79a.jsongraphify-out/cache/ast/v0.9.10/7c58d7c288a7af1556bbdd249b59350a33a61024c41ab5313735d968b2f2f4a7.jsongraphify-out/cache/ast/v0.9.10/8a32ac138d40718433aedc94b6e552fd186a55df976b035b12ce99999e53f8fa.jsongraphify-out/cache/ast/v0.9.10/bc1a9630969289ce9eab40badba90796550ab0b49d72897b39cdc74bf409ab7a.jsongraphify-out/cache/ast/v0.9.10/c0433ac97e58fff219d102bf583309e72fd1dac752e7bab05e2e085fd56482ad.jsongraphify-out/cache/ast/v0.9.10/c07854bdb7b373b38fb50bc34707035376644fcc2b97530447c3b18397e8adb5.jsongraphify-out/cache/ast/v0.9.10/d0c4bd94e15d3ff0c31870a61a56c79fd65a15eb057e1a73177de504270c4738.jsongraphify-out/cache/ast/v0.9.10/d177bf171298b015e77e83b26d39d15839283284962e2b0f0d2e4faa56f5b06d.jsongraphify-out/cache/ast/v0.9.10/d43bff1ca5959d9fae16afcf835bd789577146d4b7989b1c9ac1279cf6975d78.jsongraphify-out/cache/stat-index.jsongraphify-out/graph.htmlgraphify-out/graph.jsongraphify-out/manifest.jsonpackage.json
| - If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx-continue` | ||
| - If `state: "all_done"`: congratulate, suggest archive | ||
| - Otherwise: proceed to implementation |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
rg -n "opsx-continue|continue-change" .omp openspecRepository: George-RD/openspine
Length of output: 428
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== commands ==\n'
fd -a -t f 'opsx-*.md' .omp/commands .omp/skills 2>/dev/null || true
printf '\n== direct matches ==\n'
rg -n "opsx-continue|continue-change|blocked" .omp/commands .omp/skills
printf '\n== opsx-apply excerpt ==\n'
sed -n '1,140p' .omp/commands/opsx-apply.md
printf '\n== openspec apply-change excerpt ==\n'
sed -n '1,120p' .omp/skills/openspec-apply-change/SKILL.mdRepository: George-RD/openspine
Length of output: 9560
Point the blocked-state handoff at a real recovery path.
.omp/commands/opsx-apply.md:45 sends users to /opsx-continue, but the matching continue flow in this stack is openspec-continue-change. Rename the handoff or add a real /opsx-continue alias so blocked applies don’t dead-end.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.omp/commands/opsx-apply.md around lines 45 - 47, The blocked-state handoff
in the opsx apply flow points to a non-existent recovery command. Update the
blocked branch in opsx-apply so it references the real continue path used by
this stack, namely openspec-continue-change, or add a working /opsx-continue
alias that routes there. Make sure the user-facing message and any related help
text in the opsx-apply command stay consistent with the actual recovery entry
point.
| ``` | ||
| ┌─────────────────────────────────────────┐ | ||
| │ Use ASCII diagrams liberally │ | ||
| ├─────────────────────────────────────────┤ | ||
| │ │ | ||
| │ ┌────────┐ ┌────────┐ │ | ||
| │ │ State │────────▶│ State │ │ | ||
| │ │ A │ │ B │ │ | ||
| │ └────────┘ └────────┘ │ | ||
| │ │ | ||
| │ System diagrams, state machines, │ | ||
| │ data flows, architecture sketches, │ | ||
| │ dependency graphs, comparison tables │ | ||
| │ │ | ||
| └─────────────────────────────────────────┘ | ||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add language tags to the fenced examples.
These unlabeled fences trigger MD040 across the doc, and the matching skill file has the same pattern. Mark the narrative/ASCII blocks as text/markdown and the shell snippets as bash.
Also applies to: 151-171, 174-202, 205-219, 222-248, 263-275
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 57-57: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.omp/commands/opsx-explore.md around lines 57 - 72, The fenced examples in
opsx-explore.md are missing language tags, which triggers MD040; update the
affected fenced blocks and the matching skill file so the narrative/ASCII
sections use text or markdown and any shell snippets use bash. Use the existing
fence content to identify the blocks around the ASCII diagram and the other
repeated sections, and apply consistent labels across all matching examples.
Source: Linters/SAST tools
| **Handle states:** | ||
| - If `state: "blocked"` (missing artifacts): show message, suggest using openspec-continue-change | ||
| - If `state: "all_done"`: congratulate, suggest archive | ||
| - Otherwise: proceed to implementation |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
rg -n "opsx-continue|continue-change" .omp openspecRepository: George-RD/openspine
Length of output: 428
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== Matches ==\n'
rg -n "opsx-continue|continue-change|openspec-continue-change" .omp || true
printf '\n== Relevant files ==\n'
for f in .omp/skills/openspec-apply-change/SKILL.md .omp/commands/opsx-apply.md; do
echo "--- $f"
nl -ba "$f" | sed -n '35,60p'
done
printf '\n== Command inventory ==\n'
fd -a 'opsx-*.md' .omp || true
fd -a 'openspec-*.md' .omp || trueRepository: George-RD/openspine
Length of output: 553
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== Command docs ==\n'
fd -a '' .omp/commands | sort || true
printf '\n== Search for continue commands ==\n'
rg -n "opsx-continue|continue-change|openspec-continue-change" .omp/commands .omp/skills || true
printf '\n== Relevant snippets ==\n'
for f in .omp/skills/openspec-apply-change/SKILL.md .omp/commands/opsx-apply.md; do
echo "--- $f"
sed -n '40,58p' "$f"
doneRepository: George-RD/openspine
Length of output: 2146
Make the blocked-state recovery name consistent. .omp/skills/openspec-apply-change/SKILL.md still suggests openspec-continue-change, but the paired command doc only documents /opsx-continue. Align the recovery name so blocked applies point users to one path.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.omp/skills/openspec-apply-change/SKILL.md around lines 51 - 54, The
blocked-state recovery guidance is inconsistent between the apply-change flow
and the documented command name. Update the handle-states instructions in the
openspec apply-change skill so the `state: "blocked"` path points to the same
recovery command as the paired command doc, using the documented
`/opsx-continue` name instead of `openspec-continue-change`. Keep the `state:
"all_done"` and implementation paths unchanged, and ensure the recovery wording
is consistent wherever this blocked-state guidance appears.
- Replace references to nonexistent openspec-continue-change / /opsx-continue with actionable blocked-state guidance (cubic P2, coderabbit major) - Respect Cancel in the archive sync prompt instead of proceeding regardless (cubic P1) - Replace nonexistent openspec-sync-specs skill references with the repo hand-apply + strict-validate ceremony Skipped: MD040 fence language tags (coderabbit minor) - generated files, no markdownlint gate, minimizes regeneration drift.
There was a problem hiding this comment.
1 issue found across 10 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name=".omp/commands/opsx-apply.md">
<violation number="1" location=".omp/commands/opsx-apply.md:45">
P2: This line uses `/opsx:propose` and `/opsx:apply` with colons, but the rest of the generated commands use dashes everywhere (`/opsx-apply`, `/opsx-propose`, `/opsx-archive`, `/opsx-explore`). If the OMP trigger convention is colon-based, all dash references need updating; if dash-based, this line introduced the wrong separator. Align the separator in this instruction with the convention used by the rest of the codebase to avoid agent confusion.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| - Dynamic instruction based on current state | ||
|
|
||
| **Handle states:** | ||
| - If `state: "blocked"` (missing artifacts): show message listing the missing artifacts; create them first (use `/opsx:propose` or follow the change's schema), then re-run `/opsx:apply` |
There was a problem hiding this comment.
P2: This line uses /opsx:propose and /opsx:apply with colons, but the rest of the generated commands use dashes everywhere (/opsx-apply, /opsx-propose, /opsx-archive, /opsx-explore). If the OMP trigger convention is colon-based, all dash references need updating; if dash-based, this line introduced the wrong separator. Align the separator in this instruction with the convention used by the rest of the codebase to avoid agent confusion.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .omp/commands/opsx-apply.md, line 45:
<comment>This line uses `/opsx:propose` and `/opsx:apply` with colons, but the rest of the generated commands use dashes everywhere (`/opsx-apply`, `/opsx-propose`, `/opsx-archive`, `/opsx-explore`). If the OMP trigger convention is colon-based, all dash references need updating; if dash-based, this line introduced the wrong separator. Align the separator in this instruction with the convention used by the rest of the codebase to avoid agent confusion.</comment>
<file context>
@@ -42,7 +42,7 @@ Implement tasks from an OpenSpec change.
**Handle states:**
- - If `state: "blocked"` (missing artifacts): show message, suggest using `/opsx-continue`
+ - If `state: "blocked"` (missing artifacts): show message listing the missing artifacts; create them first (use `/opsx:propose` or follow the change's schema), then re-run `/opsx:apply`
- If `state: "all_done"`: congratulate, suggest archive
- Otherwise: proceed to implementation
</file context>
| - If `state: "blocked"` (missing artifacts): show message listing the missing artifacts; create them first (use `/opsx:propose` or follow the change's schema), then re-run `/opsx:apply` | |
| - If `state: "blocked"` (missing artifacts): show message listing the missing artifacts; create them first (use `/opsx-propose` or follow the change's schema), then re-run `/opsx-apply` |
All three actionable findings addressed in 93b93ee (broken opsx-continue/openspec-continue-change refs, Cancel handling, sync-specs refs); MD040 skipped with reason (generated files, no markdownlint gate). Local gates + CI green.
- Loop contract: pre-seeded requirements carried as MODIFIED deltas; archive via 'openspec archive <id> --yes' (mechanical delta apply) + strict validate; --yes permitted ONLY on non-interactive archive; --skip-specs reserved for no-spec-impact changes - .omp archive skill/command updated to the same ceremony; ADDED-conflict recovery is now 'fix the delta header to MODIFIED', not a --skip-specs bypass - scripts/check-omp-ceremony.sh: deterministic gate (wired into check.sh, inherited by CI) failing if openspec regeneration reverts the patched .omp files or reintroduces dangling skill refs; mutation-tested - D-052 recorded in .raw/openspine-decision-log.md (narrows the blanket -y prohibition; grounded in PR #37 archive probes of 1.5.0 and 1.6.0-beta.1) Independent review: COMMIT-READY, zero blockers.
What
@fission-ai/openspecfrom^1.5.0to exact1.6.0-beta.1openspec init --tools oh-my-pi: 4 skills (.omp/skills/openspec-*) + 4 slash commands (/opsx:propose|apply|archive|explore)mkdir/mvarchive step with this repo's mandated ceremony (openspec archive <id>,--skip-specsfallback for pre-seeded capabilities, hand-apply deltas,validate --all --strict;-yforbidden)Why
^) controls beta-channel riskEvidence
./scripts/check.shgreen under the beta binary (npx --no-install): fmt, clippy -D warnings, tests, file-size, claims, openspec validate 11/11 strictopenspec/config.yamland pre-existing user-authored.omp/skills/*untouched (verified via git diff)Follow-up
--skip-specsmanual-apply workaroundSummary by cubic
Upgraded and pinned
@fission-ai/openspecto 1.6.0-beta.1 and added repo-scoped OMP tools with/opsxcommands for proposing, applying, archiving, and exploring changes. This enables native, repo-driven workflows and enforces a strict, validated archive process.New Features
.omp/skills/openspec-*and 4/opsxcommands (propose|apply|archive|explore).openspec archivewith strict validation; supports--skip-specsfallback; no-y.Bug Fixes
openspec-continue-changeand/opsx-continue; added clear blocked-state guidance.Written for commit 93b93ee. Summary will update on new commits.