chore: merge upstream 1.0.4 (1.0.3+adlc1 → 1.0.4+adlc1) - #115
Open
kanfil wants to merge 13 commits into
Open
Conversation
* Update Charter extension to v0.6.1 Update charter extension submitted by @Huljo: - extensions/catalog.community.json (version, download_url, etc.) - docs/community/extensions.md community extensions table Closes github#4404 Assisted-by: GitHub Copilot (model: gpt-5.2-codex, autonomous) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix fragments entry in catalog community JSON Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Ken Schlobohm <keschlob@microsoft.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
github#4396) The bash wrap strategy rewrote layer_content in place and then re-tested the string it had just modified. When the resolved core content held a literal {CORE_TEMPLATE}, every pass reintroduced the token and the loop never terminated. Consume the wrapper left to right instead, appending each segment and the core content to an accumulator. Work is bounded by the placeholders in the original wrapper and inserted content is never re-examined, matching the single-pass semantics the PowerShell (.Replace) and Python (.replace) ports already have -- so this aligns bash with the other two rather than introducing new behaviour. The regression mode is a hang rather than a wrong value, so the new parity test passes a timeout; run() grows an optional timeout parameter for that. Without it a reintroduced bug would stall the suite instead of failing it. Fixes github#4385
* chore: bump version to 1.0.4 * chore: begin 1.0.5.dev0 development --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Add Axi Extension to community catalog Add axi extension submitted by @d0whc3r to:\n- extensions/catalog.community.json (alphabetical order)\n- docs/community/extensions.md community extensions table\n\nCloses github#3948\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>\nAssisted-by: GitHub Copilot (model: gpt-5.2-codex, autonomous) * Add tools requirement to catalog community JSON Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Ken Schlobohm <keschlob@microsoft.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* allow hyphen in command ref token names the token pattern was matching only A-Z 0-9 and underscore so a command name like speckit.agent-context.update can not be written as a token and the token stays in the output as plain text now the character class allows a hyphen also in both places that resolve the token * document that a hyphen stays inside a segment the guide still said the token scheme does not carry hyphens, which is the opposite of what this branch does. added the real bundled command as the example since speckit.agent-context.update is the one that was unreachable before this. * replace the skills mode limitation with what skills mode actually does the callout said a command ref token reaches codex zcode and kimi verbatim. it does not. _resolve_command_ref_tokens inside _register_extension_skills resolves the same token shape against the active skill style. the callout was right that resolve_command_refs is never called there and wrong about what follows from it. * name the right invocation for each skills agent the callout said kimi renders the bare slash form. it does not, kimi is in SKILL_COLON_AGENTS only and falls through both branches to its own build_command_invocation which returns /skill:speckit-<name>.
…owerShell twins (github#4286) * fix(scripts): make bash branch-name sanitizing match the Python and PowerShell twins * fix(scripts): use ASCII acronym boundaries in the Python and PowerShell twins * test(scripts): cover the ASCII acronym boundary in the PowerShell twins The ASCII-lookaround fix in scripts/powershell/create-new-feature.ps1 and extensions/git/scripts/powershell/create-new-feature-branch.ps1 had no PowerShell regression coverage: the accented-acronym parity cases invoked only bash and Python, and the existing PowerShell acronym tests used ASCII-separated words, so a regression there would have passed CI. Adds a three-way bash/Python/pwsh assertion for 'Fix eDBe sync' in the core parity suite and a pwsh arm to the extension parity test, both asserting 001-fix-db-sync. * test(scripts): cover clean_branch_name independently of generate_branch_name
* feat(workflows): add plugin slots Assisted-by: GitHub Copilot (model: gpt-5.6-terra, autonomous) * fix(workflows): add runtime fan-out guard to PluginStep Mirror GateStep's inside_fan_out check so plugin slots inside fan-out templates fail at execution time, not only at static validation. This closes the gap when WorkflowEngine.execute() is called without prior validation. Assisted-by: opencode (model: qwen3.7-max, supervised) * refactor(workflows): rename plugin slots to workflow slots The feature reserves a no-op position replaced through a workflow overlay; it does not register or resolve plugins. Rename per maintainer feedback so 'plugin' stays available for a future genuine plugin mechanism and avoid confusion with Spec Kit extensions: - type: plugin -> type: slot - PluginStep -> SlotStep - 'plugin step/slot' -> 'workflow slot' in prose and error messages - steps/plugin/ -> steps/slot/ (git mv) - test_plugin_step.py -> test_slot_step.py (git mv) Assisted-by: opencode (model: glm-5.3-flash, autonomous) --------- Co-authored-by: Markus <markus@example.com>
Muse Code is Meta's terminal coding agent (binary: muse). It discovers project skills at .agents/skills/<skill-id>/SKILL.md and invokes them via the /speckit-<command> slash shortcut, so wire it up as a SkillsIntegration sharing the .agents/skills layout with Codex/Zed (multi_install_safe=False, same policy as docker-agent). Includes registry wiring, invocation-style mapping, init next-steps, discovery catalog, integrations doc, agent-context default (AGENTS.md), issue templates, and a dedicated test module.
…4401) * fix: drop unused scope input from the bundled speckit workflow The Full SDD Cycle workflow prompted for full / backend-only / frontend-only, but none of the steps read inputs.scope. Every command only received inputs.spec, so the three choices behaved the same. Remove the dead input from the shipped workflow and align the docs that showed `specify workflow run speckit ... -i scope=...`. Keep scope as an example in the generic input-typing docs for authors who do wire it up. * Bump bundled speckit workflow to 1.0.1 after dropping scope. Catalog installs only see the dead input removed when the published version advances past what they already have. --------- Co-authored-by: Gyanu <gyanum.ug20.cse@gmail.com>
Add evaluator extension submitted by @tbitcs to: - extensions/catalog.community.json (alphabetical order) - docs/community/extensions.md community extensions table Closes github#4414 Assisted-by: GitHub Copilot (model: gpt-5.2-codex, autonomous) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ithub#4149) Both loop steps type-check `steps` ("must be a list") but never require it to be present, so an absent body silently becomes `[]`. `if` already requires `then`, and `fan-out` already requires both `items` and `step`. The mistype is unusually easy here because the fan-out step's own payload key is the singular `step:` while the loops use `steps:`. Writing `step:` on a `while` passed `specify workflow validate` with zero errors: A. while, body key typo'd as singular step: validate: [] execute : StepStatus.COMPLETED | next_steps = [] B. do-while, no steps at all: validate: [] execute : StepStatus.COMPLETED | next_steps = [] At run time the step reports COMPLETED while returning no `next_steps`, so the engine's `if result.next_steps:` block never fires and the loop the workflow is built around never runs even once. `DoWhileStep`'s own docstring promises "The first invocation always returns the nested steps for execution". Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
….0.4+adlc1) 11 commits: release 1.0.4 + 7 post-release. New: muse integration (github#4413), workflow slot step (github#4352), bash branch-name sanitizing parity (github#4286), hyphen in command-ref tokens (github#4356), while/do-while steps validation (github#4149), remove unused scope input (github#4401). 5 conflicts resolved. Assisted-by: opencode (model: glm-5.2, supervised)
The two new github#4356 tests hardcoded /speckit.* — use the fork's _get_prefix() helper (returns "spec") like the neighboring separator tests so they pass on the fork prefix. Assisted-by: opencode (model: glm-5.2, supervised)
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.
Summary
Stacked upstream merge: syncs with
github/spec-kitthrough release 1.0.4 plus 7 post-release commits (11 commits total; upstream HEADdb648699). Bumps the fork to1.0.4+adlc1.Stacked on PR #114 (1.0.3 merge). Retarget to
mainonce #114 lands.Base:
1.0.3+adlc1→1.0.4+adlc1.Notable upstream content
muse(Muse Code, skills-based, feat(integrations): add Muse Code (muse) agent integration github/spec-kit#4413)slotstep type (feat(workflows): add workflow slots github/spec-kit#4352) — named output slots for inter-step data passing--*sed) across core + git-extension twins (fix(scripts): make bash branch-name sanitizing match the Python and PowerShell twins github/spec-kit#4286)__SPECKIT_COMMAND_*__token names (allow hyphen in command ref token names github/spec-kit#4356) —agent-context.updateresolves correctlystepsbody on while/do-while loops (fix(workflows): require astepsbody on while and do-while loops github/spec-kit#4149), remove unused scope input from bundled speckit workflow (fix: remove unused scope input from bundled speckit workflow github/spec-kit#4401, catalog → 1.0.1)Conflicts resolved (5)
pyproject.toml1.0.4+adlc1; kept fork name/descriptionscripts/bash/create-new-feature.shclean_branch_name/generate_branch_name(LC_ALL=C, printf,--*); removed fork's old duplicate; kept all fork customizations (issue templates, isolation mode, JSON output)extensions/git/scripts/powershell/create-new-feature-branch.ps1Get-BranchName; conflict was a merge-alignment collision with fork'sInvoke-WorktreeDelegation(unrelated functions at same line region) — kept fork's worktree code intactsrc/specify_cli/integrations/base.pyresolve_command_refssignature (project_rootparam); adopted upstream's hyphen-allowing regex[A-Z0-9_-]*+ docstringworkflows/catalog.jsonupdated_at+ speckit workflow 1.0.1; kept fork'sfeature-squad+impl-converge-loopentriesTest adaptation
test_integration_muse.py—/speckit-constitutionnext-steps assertion →/spec-constitution(fork prefix)Verification
test_create_new_feature_python_parity.py);test_integration_muse.py(37 pass);test_slot_step.py(13 pass);test_base.py,test_registry.py,test_agent_config_consistency.py,test_merge.pypass__SPECKIT_COMMAND_AGENT-CONTEXT_UPDATE__→/spec.agent-context.update(hyphen-allowing + fork prefix)specify --version→1.0.4+adlc1;specify init --integration museinstalls cleanly🤖 Agent disclosure: This PR (merge, conflict resolution, test adaptation, and this PR body) was authored by opencode (model: glm-5.2) on behalf of @lior, under direct human supervision. No code was committed autonomously without review. The fork's standard
Assisted-by:trailer convention applies to any follow-up commits added during review.