Redesign spine tasks to align better with OpenSpec #20
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
I would like to iterate on the naming of the steps on the spine, to better align them with OpenSpec and Git Feature Branching. Script tasks should be prefixed with "script", openspec tasks should be prefixed with "openspec", git tasks should be prefixed with "git", "human" for tasks requiring a human, and we should follow this pattern to make the naming more representative of their action. I'd like to see clearly all of the openspec steps - explore, propose, apply.
Also we should build in the functionality that the user could merge the PR from braid, as well as archive the change. Both of those should be human gates that present a dialog. I will likely merge the PR from Frogejo, so the system should be able to handle the case where the gate is stopped waiting, the user merges the PR, comes back to braid and is able to "re-check" the pull request to see if it has been merged already.
Here's a snapshot of the current spine task list
For example: I assume "workspace.prepare" does some work, but all that ends up in the agent console is "wrote .osf/brief.json for run_01M2FZ72MEAJZV8QPNN0EB9VCD". What is this step actually doing? A better name, and if something else is happening, it should be clear in the agent console. When does the repo get cloned? when does the branch get made?
Also I noticed the review and revise labels were white before the run got to those steps.
Shipped in
01c21ed, and archived as2026-09-14-spine-step-names-and-landingin75c0a8f. osfd is redeployed.Step names say who acts. Every step is now
<actor>.<action>, where the actor isscript,openspec,gitorhuman:git.clone,script.brief,script.agents-mdopenspec.explore,openspec.new-change,openspec.propose.{proposal,spec,design,tasks},openspec.validate,script.budget,git.commit.proposalopenspec.review,script.review-digest,openspec.revise,git.commit.revision,human.review-proposalopenspec.apply,openspec.reconcile-tasks,openspec.test.unit,git.commit.featureopenspec.summarize,git.commit.summary,git.pr.openhuman.merge-pr,git.pr.merge,human.archive-change,openspec.archiveworkspace.prepareis split in two.git.clonesays what really happened. The repository was cloned from X into Y, and the work branch was cut frommainat a given sha. It also says both happen at admission, before any step runs, and records.osf/workspace.json. It fails if the worktree is not on the run's branch.script.briefwrites the brief and prints its first line.Landing from Braid.
human.merge-prreads the pull request live from Forgejo (the newGET /api/runs/{id}/pr). It offers Merge pull request, which asks in a dialog naming the PR and base branch, and Re-check. If you merged on Forgejo while it waited, Re-check shows it merged and offers Continue — merged on Forgejo.git.pr.mergemerges it in the repository's default style. It is refused if the head moved. If the PR was already merged, it just records that.human.archive-changeasks in a dialog.openspec.archivethen runsopenspec archiveon the merged base branch, commits, and pushes without force. If the change is already archived, it records that and changes nothing.Bug fixed: the review and revise loop rows are dim until the run reaches them.
Tested:
pytest: 1580 passed. Newtest_landing.pycovers merge, archive and the route against a fake Forge, realopenspecand a bare origin.vitest: 353 passed.landing.spec.tscovers names, the LAND phase, dim loop rows, Cancel/Escape sending nothing, Merge, Re-check open → merged → Continue, and Archive.git.cloneprinted the clone and branch (below)./api/runs/{id}/prread the merged #19 from Forgejo.python -m osf.forgejo mergerecordedmerged_by: forgewithout asking for a merge.A repository that commits its own
.osf/pipeline.yamlkeeps the names in that file, so update it to the new ids. This repository's copy is updated. Runs started before the deploy still carry the old ids and cannot continue.git.cloneon a real osfd:The merge gate on an open pull request:
Merge pull request asks first:
After merging on Forgejo and Re-check:
Archive change asks first: