Update workflow-preset to v3.1.0 - #79
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6759688ff1
ℹ️ 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".
| BDD drafts/contracts and structured behavior scenario/fixture/assertion | ||
| artifacts are optional children only when selected techniques require them: | ||
|
|
||
| - BDD/scenario artifacts must reference their parent `TC-*`; |
There was a problem hiding this comment.
Add parent TC refs to every scenario child
When a Test Condition selects a BDD or scenario technique, this rule requires the resulting child artifact to reference its parent TC-*, but templates/behavior/behavior-scenarios-draft.json has no such field and its schema uses additionalProperties: false without defining one; the BDD templates likewise expose no parent reference. Consequently, a structured draft cannot satisfy both its JSON schema and X2C_TEST_DESIGN_READY, blocking planning whenever this technique is selected. Update the child templates and schemas to carry the parent Test Condition reference.
AGENTS.md reference: presets/workflow-preset/AGENTS.md:L32-L33
Useful? React with 👍 / 👎.
| "request_case": { | ||
| "type": "object", | ||
| "additionalProperties": true, |
There was a problem hiding this comment.
Encode failure-case invariants in the JSON schema
For negative, permission, validation, and state-conflict scenarios, the rewritten schema accepts a request_case containing only an ID and an empty expected_response, even though the bundled validator requires matching case_kind, a failure outcome, a trigger, and an error code. Consumers that validate the advertised decoupled JSON contract without running the Python helper can therefore accept artifacts that the preset later treats as invalid; restore equivalent conditional constraints in the schema.
AGENTS.md reference: presets/workflow-preset/AGENTS.md:L10-L11
Useful? React with 👍 / 👎.
| normalized = value.casefold().replace("-", " ") | ||
| return any(term.replace("-", " ") in normalized for term in PIXEL_TERMS) |
There was a problem hiding this comment.
Normalize separators before checking forbidden pixel scope
When a Test Condition or readiness row uses the natural spelling pixel-fidelity review or pixel fidelity review, this check returns false: input hyphens become spaces, but the only fidelity term remains pixel_fidelity because underscores are never normalized. Such pixel-review work therefore passes both validators despite the X2-C contract explicitly rejecting it; normalize underscores and hyphens consistently, or include the spaced variant.
AGENTS.md reference: presets/workflow-preset/AGENTS.md:L16-L17
Useful? React with 👍 / 👎.
Summary
workflow-presetsnapshot from v3.0.0 to v3.1.0.presets/catalog.jsonandpresets/catalog.community.jsonmetadata.replace/wrapcomposition behavior.Release artifact: https://github.com/bigsmartben/spec-kit-workflow-preset/releases/download/v3.1.0/spec-kit-workflow-preset-v3.1.0.zip
Why
The source release workflow successfully published and verified v3.1.0, but automatic downstream integration stopped because downstream validation still encoded v3.0.0 assumptions: 24 templates, removed intent/testability artifacts, old Plan/Tasks markers, and
.composedoutput for commands now usingreplace.User impact
The integration fork receives the exact source release snapshot for the source-neutral specification contract delivered by workflow-preset v3.1.0. Core
/speckit.implementremains owned by Spec Kit and is not included in the preset snapshot.Test plan
e20dcafde5a1b031643156db49eb3e988e322bf9.python -m pytest tests/test_presets.py -k 'workflow_preset'— 5 passed, 327 deselected on Python 3.11.15.uvx --from ruff==0.15.4 ruff check src/passed.