Skip to content

Define verifier continuation and explicit stop authority - #9

Merged
nsticco merged 1 commit into
mainfrom
fix/verifier-continuation-authority
Sep 8, 2026
Merged

nsticco merged 1 commit into
mainfrom
fix/verifier-continuation-authority

Conversation

@nsticco

@nsticco nsticco commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Description

Define the portable verifier's continuation decision so hosts preserve explicit human or blocked stops instead of repeatedly retrying a missing dependency. Specify compatible verdict/action pairs, distinguish current-runtime recoverability from permission to run a separate remediation step, and include the decision in the verification report.

Source dependency for MoonLadderStudios/MoonMind#4104. This keeps the behavior in the canonical bundle consumed by MoonMind's pinned projection.

Testing

  • python3 tools/validate_bundle.py passed.

  • python -m pytest in an isolated environment with .[test] installed: 17 passed.

  • MoonMind consumer python3 tools/sync_moonspec.py --write and --check: passed.

  • Consumer instruction tests: 11 passed.

  • Tested locally with uv run specify --help

  • Ran existing tests with uv sync && uv run pytest

  • Tested with a sample project (if applicable)

The test suite ran with Python in an isolated virtual environment; uv is unavailable on this host.

AI Disclosure

  • I did not use AI assistance for this contribution
  • I did use AI assistance (describe below)

Codex authored and validated this change while addressing verifier feedback on MoonMind PR github#4104.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-08T07:14:53.959067Z 2230c62 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@nsticco
nsticco merged commit c53aec4 into main Sep 8, 2026
2 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2230c62c5f

ℹ️ 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".

Comment on lines +371 to +373
Include the continuation decision and its evidence in the report. When structured
JSON is requested, use `recommendedNextAction` and
`recoverableInCurrentRuntime` alongside `verdict` and `remainingWork`:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Propagate continuation fields to the slash-command wrapper

When /moonspec.verify is invoked through the Markdown command projected by bundle/projections/moonmind.yaml:13-15, it follows bundle/commands/markdown/moonspec.verify.md, whose report contract at lines 118-168 contains neither recommendedNextAction nor recoverableInCurrentRuntime. That invocation therefore cannot emit the explicit stop introduced here, leaving consumers to apply their old verdict default and potentially retry the missing dependency. Update the command wrapper or make it delegate to the skill rather than maintaining a second, stale verification contract.

AGENTS.md reference: AGENTS.md:L41-L43

Useful? React with 👍 / 👎.

Comment on lines +391 to +396
An explicit `needs_human` or `blocked` decision for `ADDITIONAL_WORK_NEEDED` or
`NO_DETERMINATION` stops automatic verifier retry and implementation remediation.
It does not discard verified progress or authorize publication; the caller's
existing publication policy governs any draft or checkpoint handoff. The caller
owns plan-node routing and must honor this stop decision without substituting a
retry merely because budget remains. Never encode a remediation node, publication

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Make bundled orchestrators honor explicit stop actions

In bundled moonspec-orchestrate runs, an ADDITIONAL_WORK_NEEDED result with needs_human or blocked still triggers remediation: bundle/presets/moonspec-orchestrate.yaml:102 unconditionally starts another cycle, and bundle/skills/moonspec-orchestrate/SKILL.md:157-160 does the same. Thus the two canonical callers directly contradict this new requirement and can continue implementation despite the verifier's explicit stop; both need to branch on recommendedNextAction before applying their verdict-based defaults.

Useful? React with 👍 / 👎.

JSON is requested, use `recommendedNextAction` and
`recoverableInCurrentRuntime` alongside `verdict` and `remainingWork`:

- `FULLY_IMPLEMENTED` uses `advance`; `BLOCKED` and `FAILED_UNRECOVERABLE` use `blocked`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Remove the undeclared verdict from the pairing table

In structured JSON mode, this line introduces FAILED_UNRECOVERABLE, but the skill's verdict contract at lines 343-350 says to choose exactly one of four verdicts and the report schema at line 416 excludes this value; a repo-wide search also finds no other definition of it. A verifier that treats this pairing as permission can emit a contract-invalid verdict, while one that follows the declared verdict list can never use the pairing, so either remove this value or define it consistently throughout the contract.

Useful? React with 👍 / 👎.

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