Skip to content

chore: merge upstream 1.0.4 (1.0.3+adlc1 → 1.0.4+adlc1) - #115

Open
kanfil wants to merge 13 commits into
mainfrom
chore/upstream-merge-1.0.4
Open

chore: merge upstream 1.0.4 (1.0.3+adlc1 → 1.0.4+adlc1)#115
kanfil wants to merge 13 commits into
mainfrom
chore/upstream-merge-1.0.4

Conversation

@kanfil

@kanfil kanfil commented Sep 3, 2026

Copy link
Copy Markdown
Member

Summary

Stacked upstream merge: syncs with github/spec-kit through release 1.0.4 plus 7 post-release commits (11 commits total; upstream HEAD db648699). Bumps the fork to 1.0.4+adlc1.

Stacked on PR #114 (1.0.3 merge). Retarget to main once #114 lands.

Base: 1.0.3+adlc11.0.4+adlc1.

Notable upstream content

Conflicts resolved (5)

File Resolution
pyproject.toml version → 1.0.4+adlc1; kept fork name/description
scripts/bash/create-new-feature.sh Adopted github#4286 parity clean_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.ps1 Applied upstream's ASCII word-boundary acronym regex to fork's Get-BranchName; conflict was a merge-alignment collision with fork's Invoke-WorktreeDelegation (unrelated functions at same line region) — kept fork's worktree code intact
src/specify_cli/integrations/base.py Kept fork resolve_command_refs signature (project_root param); adopted upstream's hyphen-allowing regex [A-Z0-9_-]* + docstring
workflows/catalog.json Took upstream updated_at + speckit workflow 1.0.1; kept fork's feature-squad + impl-converge-loop entries

Test adaptation

  • test_integration_muse.py/speckit-constitution next-steps assertion → /spec-constitution (fork prefix)

Verification

  • Ruff clean
  • Parity tests pass (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.py pass
  • Regex functional check: __SPECKIT_COMMAND_AGENT-CONTEXT_UPDATE__/spec.agent-context.update (hyphen-allowing + fork prefix)
  • Smoke: specify --version1.0.4+adlc1; specify init --integration muse installs cleanly
  • All hotspots verified: muse registered alphabetically, agent-context-defaults muse entry, git bash twin LC_ALL=C landed, slot step registers, fork scripts customizations intact

🤖 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.

github-actions Bot and others added 13 commits September 2, 2026 14:44
* 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)
@kanfil
kanfil changed the base branch from chore/upstream-merge-1.0.3 to main September 4, 2026 04:44
@kanfil
kanfil requested a review from or-yam September 4, 2026 05:18
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.

9 participants